C++类中的成员类型
2010-08-17 09:02
218 查看
C++中的成员分为三种类型:公有成员,私有成员,保护成员。
如果不特别指定,类里所有的成员都是公有(Public)的,不用特地声明。但是私有(Private)成员则是要一定声明的。
这三种类型才成员的区别在于,对于本类来说:
公有成员,外部可以访问的成员。
私有成员,外部不可以访问的成员。
保护成员,外部不可以访问的成员。
乍看起来,私有成员与保护成员的访问权限是相同的,使用私有成员就行了,貌似没有必要再多出来一个保护成员。
我们要相信,我们觉得自己挺明白,弄出C++的大牛比我们还明白,他们当然知道哪些是需要的哪些是没用的,如果保护成员没有用处,还会出现在C++中吗?
实际上,保护成员与私有成员的区别体现在继承上。
继承分为:公有继承,私有继承,保护继承。
公有继承,基类的公有成员和保护成员作为派生类的公有成员,外部可以访问;
私有继承,基类的公有成员和保护成员作为派生类的私有成员,外部不可以访问;
保护继承,基类的公有成员和保护成员作为派生类的保护成员,外部不可以访问;
(外部指基类的外部,即派生类中可以访问,在派生类的外部不能访问该函数)
这三种继承中,派生类都不能访问基类的私有成员。
从继承中,我们可以看出,保护成员和私有成员有本质上的区别。
当然,也可以说在继承中,保护成员和公有成员没什么区别。
可以看出,保护成员就是夹在私有成员和公有成员间的一个第三者,说是第三者可能不太合适,应该是一夫二妻里的老公,两边他都有关系,但是本质上他又和两边都不同(他是男的。。。)
通过以上的说明我们也可以看出,保护成员的作用主要是在继承时才体现出来的。
可能有好事者又要问,那私有继承和保护继承有什么区别,继承来的成员都是外部不能访问的啊?对于这个问题,继承一次好办,确实没区别,但是如果再从派生类派生出派生类2,那就有区别了,因为私有成员是不能被再派生出来的派生类2访问的。
如果不特别指定,类里所有的成员都是公有(Public)的,不用特地声明。但是私有(Private)成员则是要一定声明的。
这三种类型才成员的区别在于,对于本类来说:
公有成员,外部可以访问的成员。
私有成员,外部不可以访问的成员。
保护成员,外部不可以访问的成员。
乍看起来,私有成员与保护成员的访问权限是相同的,使用私有成员就行了,貌似没有必要再多出来一个保护成员。
我们要相信,我们觉得自己挺明白,弄出C++的大牛比我们还明白,他们当然知道哪些是需要的哪些是没用的,如果保护成员没有用处,还会出现在C++中吗?
实际上,保护成员与私有成员的区别体现在继承上。
继承分为:公有继承,私有继承,保护继承。
公有继承,基类的公有成员和保护成员作为派生类的公有成员,外部可以访问;
私有继承,基类的公有成员和保护成员作为派生类的私有成员,外部不可以访问;
保护继承,基类的公有成员和保护成员作为派生类的保护成员,外部不可以访问;
(外部指基类的外部,即派生类中可以访问,在派生类的外部不能访问该函数)
这三种继承中,派生类都不能访问基类的私有成员。
从继承中,我们可以看出,保护成员和私有成员有本质上的区别。
当然,也可以说在继承中,保护成员和公有成员没什么区别。
可以看出,保护成员就是夹在私有成员和公有成员间的一个第三者,说是第三者可能不太合适,应该是一夫二妻里的老公,两边他都有关系,但是本质上他又和两边都不同(他是男的。。。)
通过以上的说明我们也可以看出,保护成员的作用主要是在继承时才体现出来的。
可能有好事者又要问,那私有继承和保护继承有什么区别,继承来的成员都是外部不能访问的啊?对于这个问题,继承一次好办,确实没区别,但是如果再从派生类派生出派生类2,那就有区别了,因为私有成员是不能被再派生出来的派生类2访问的。
相关文章推荐
- C++类中const, static, reference等类型成员的初始化
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
- C++小知识:C++类中成员的访问控制属性有哪些类型,什么区别
- C++类的隐式类型转换成员函数
- C++类中数据成员为类类型时,定义为对象还是定义为指针?
- c++类中特殊数据类型成员变量的初始化
- C++类中的成员类型
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- C++类中const, static, reference等类型成员的初始化
- C++类中const, static, reference等类型成员的初始化
- C++类中各种不同类型成员根据是否static 、是否const类型的初始化方法不尽相同,写代码时经常搞乱,网上搜了一下资料,全部总结一下。一、例子 [cpp] view plaincopy ---
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- c++类里初始化各种类型的数据成员
- C++类中定义数据成员的类型的几种方式
- C++类类型成员函数的重载、覆盖与隐藏
- 关于初始化C++类成员
- 特殊数据类型成员变量的初始化
- Java 原始类型JComboBox的成员JComboBox(E())的调用 未经过检查
- C++类中的静态成员变量和静态成员函数的作用
- c++类的模板成员函数申明和实现必须放在一起