protected和private存在的意义?
是不是为了子类简单,并且方便。如果都使用public,那么子类会非常的大。所以增加了这两种类型的继承。还有其他的作用么? 问题点数:20、回复次数:11Top
1 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-15 09:39:37 得分 0
出于对数据封装Top
2 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-03-15 11:32:57 得分 0
隐藏内部细节,只是提高外部访问的接口
Top
3 楼iamcaicainiao(老菜,长征)回复于 2006-03-15 11:43:37 得分 0
隐藏实现。Top
4 楼windking21(想玩玩WOW 真的那么难吗)回复于 2006-03-15 11:49:43 得分 0
虚拟函数 接口类实现Top
5 楼Jchangcheng(长城)回复于 2006-03-15 12:01:45 得分 0
保护数据.操作灵活.Top
6 楼popy007(Twinsen)回复于 2006-03-15 12:06:01 得分 0
说来话长Top
7 楼sinkileu(小心)回复于 2006-03-15 12:37:52 得分 0
这是从现实的角度来设计的,想想人都是有隐私的,不可能把人的所有内容都让外界知道.所以有了public和private之分.
在继承中,父亲的东西不可能全部由孩子来继承的,有些是父亲私有的东西(如:秘密),有些是孩子没能力继承的,如此等等,这些用private限制.
至于protected,那是继承机制才用得上的,即:子类可以共享,外部不可以.
当然,这些会与继承限制(冒号后面的修饰符)共同作用,产生许许多多种情况.幸运的是,一般继承限制都是publicTop
8 楼longlongago8(南瓜)回复于 2006-03-15 13:38:38 得分 0
分享
Top
9 楼aniude(重返荣耀)回复于 2006-03-15 14:52:14 得分 0
试着写一个类,然后对比书上的例子,然后想想Top
10 楼wwangzhihang100(大浪淘沙)回复于 2006-03-15 15:22:49 得分 0
感觉protected存在的意义不是很大Top
11 楼ox_thedarkness()回复于 2006-03-15 17:22:17 得分 20
权限是oop封装的核心工具之一。
我们的代码是给用户使用的(我们自己也是用户),我们希望提供安全的代码,禁止用户使用我们所不希望的功能。
即使不涉及封装,很多时候我们也必须使用权限。比如:
////////////////////////////////////////
例1 禁止 A 用 = 执行的默认拷贝操作
class A{
private:
A& operator= ( const A& ); // 声明 operator= 为 private,禁止其使用
};
A a, b;
a = b; //非法, operator = 为 private
/////////////////////////////////////////
例2 强迫 A 使用模版版本的赋值、构造函数等。
我们的 class A 是一个很复杂的类型,假如我们把它的构造函数、赋值函数写成模版形式:
class A{
public:
template <class T>
A( const T& );
template <class T>
A& operator= ( const T& );
};
但是!模版形式的构造函数并不能阻止默认版本的产生。 作者如果没有意识到这一点,那么就很危险了:
A a, b; // 居然可以!? 将调用默认(什么也不做的)构造函数 —— 作者很可能希望禁止这一点
A c = b; // 怎么回事!? 居然不掉用我们定义的拷贝构造函数!?
a = b; // 怎么回事!? 居然不掉用我们定义的 A::operator = !?
解决方案是增加拷贝构造函数和默认赋值函数的声明到private:
class A{
A( const A& );
A& operator=( const A& );
//...
};
A a, b; // 非法。必须提供参数
A c = b; // 正确调用了模版版本的拷贝构造函数
a = b; // 正确调用了模版版本的 A::operator =
/////////////////////////////////////////
例3 设计一个基类,要求:禁止容器对基类指针使用delete。
class Base{
protected:
~Base();
};
这里我们只能把他设置为 protected。 如果为 public, 那么容器就可以delete它; 如果为 private, 那么它就无法成为基类 —— 他的派生类无法调用其析构函数。Top
相关问题
- private的意义是什么呢?
- 不知道这个目录的存在有没有实际意义?
- 虚函数定义成private有意义么?
- 抽象类--〉〉〉〉为什么要有抽象类,他存在的意义是什么?? 各位指点..
- 关于private和protected
- 实在弄不非常懂 虚函数,纯虚函数存在的意义,我肯定没有理解,请不懂得你,懂得你随便说两句
- 大家好,请问链接:href="betting-matches.php?ah 有什么具体意义呢?问号后面的"ah"没有赋值有存在的意义吗?我是初学者,谢谢!
- \\的意义???
- 如何在页面加载 Private Sub Page_Load中判断一个表是否存在,若不存在创建该表
- 关于类中 protected 和 private 的区别?




