C++继承与多态注意点汇总
2013-09-29 09:12
246 查看
三种继承方式:
(1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
(2)private(私有继承):继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
(3)protected(保护性继承):继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
注意点:
1. 私有继承和保护继承指针均不能用基类指针表示,即无法实现多态性。
2. 基类虚函数访问级别为public, 子类中重写并将访问级别改为private, 通过多态性仍旧可以访问子类中的私有虚函数。由此可得,多态性的访问级别与封装性的访问级别并不是属于同一个范畴,多态性只以基类虚函数的访问级别为准。
3. 派生类需要显式调用基类函数时,必须将调用写在构造函数参数列表中。写在参数体内会额外进行一次默认构造函数调用。
(1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
(2)private(私有继承):继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
(3)protected(保护性继承):继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。
注意点:
1. 私有继承和保护继承指针均不能用基类指针表示,即无法实现多态性。
class CBase {... }; class CChild : private/protected CBase {...} CBase* pChild = new Child(); //错误
2. 基类虚函数访问级别为public, 子类中重写并将访问级别改为private, 通过多态性仍旧可以访问子类中的私有虚函数。由此可得,多态性的访问级别与封装性的访问级别并不是属于同一个范畴,多态性只以基类虚函数的访问级别为准。
class CBase { public: virtual void Fun1(){}; }; class CChild : public CBase { private: virtual void Fun1(){}; } CBase* pChild = new Child(); pChild->Fun1(); //正常可以访问
3. 派生类需要显式调用基类函数时,必须将调用写在构造函数参数列表中。写在参数体内会额外进行一次默认构造函数调用。
class CBase { public: CBase(int nNum){}; CBase(){}; }; class CChild: public { public: CChild(int nNum) { CBase(nNum); //错误调用,会调用两次基类构造函数,第一次是CBase() } //正确调用 CChild(int nNum):CBase(nNum) { }; };
相关文章推荐
- C++封装继承多态总结
- C语言模式实现C++继承和多态的实例代码
- 【C++面向对象】类继承、多态与virtual成员
- C++/java 继承类的多态详解及实例代码
- C++ 利用类模板---类继承形成多态----的一个异常处理结构
- C++继承与多态的常见面试题
- C++中多态要注意的事情&与Java的对比
- C++组合,继承,委托,多态_boolan
- C++继承多态实现通用链表
- c++多继承多态
- C++的继承与多态
- C++封装继承多态总结
- C++ 继承&多态
- C++之继承与多态
- C++三大特性:封装、继承、多态
- C++的继承,多态和组合
- 简单理解C++的多态公有继承及虚函数
- 嵌入式开发之C++基础学习笔记4--面向对象封装继承多态
- c++——多态、继承、运算符重载综合例子代码
- 用C语言实现c++的封装、继承、多态