C++派生类继承的理解
2014-11-21 10:37
141 查看
#include<iostream> using namespace std; class Base{ public: Base() { a=5; cout<<"Base a="<<a<<endl; } protected: int a;//如果这里是私有的变量,则在他的所有派生类中都不具有访问权限 //派生类只能直接访问基类 的公有和保护成员 //私有成员仅限于自己使用。 //保护成员则允许派生类使用,而不允许通过对象进行直接调用 //公有类是允许所有的调用 }; class Base1:virtual public Base{ public: int b1; Base1() { a=a+10; cout<<"Base1 a="<<a<<endl; } }; class Base2:virtual public Base{ public: int b2; Base2() { a=a+20; cout<<"Base2 a="<<a<<endl; } }; class Derived:public Base1,public Base2{ public: int d; Derived() { cout<<"Base1::a="<<Base1::a<<endl; cout<<"Base2::a="<<Base2::a<<endl; } }; //定义虚基类是对同一个基类只复制一次。 //从本例函数执行结果看出: //由Derived类的创建,会导致Base1类的创建,然后是Base2的创建 //要创建Base1类必先创建他的派生类Base //Base类创建后接着Base1创建,然后此时Base类被调用了一次 //Base1类创建结束后再创建Base2. //因为是虚继承,Base已经被调用过一次,此时它不再调用Base类 //Base2会用在Base1创建的基础上调用的Base类的值。 //在所有的基类被依次创建后,然后再创建 最底层的派生类Derived int main() { Derived obj; return 0; } /* 在虚继承时的执行结果 Base a=5 Base1 a=15 Base2 a=35 Base1::a=35 Base2::a=35 */ /* 在非虚继承时执行的结果 Base a=5 Base1 a=15 Base a=5 Base2 a=25 Base1::a=15 Base2::a=25 */
相关文章推荐
- C++第十三周任务-项目一(理解基类中成员的访问限定符和派生类的继承方式)
- C++第十二周【任务1】理解基类中成员的访问限定符和派生类的继承方式
- 《C++第十二周实验报告1-1》----理解基类中成员的访问限定符和派生类的继承方式
- 第十二周C++【任务1】理解基类中成员的访问限定符和派生类的继承方式
- C++ 学习之继承1:基类与派生类
- C++中 public和private派生类继承问题和访问权限问题
- c++第十周【任务0】理解基类、派生类中构造函数、析构函数
- c++多重继承和虚继承及虚函数深入理解
- C++实验 实验4 继承与派生类 1
- 理解C++基类与派生类
- 第十二周任务一理解基类中成员的访问限定符和派生类的继承方式
- 理解基类中成员的访问限定符和派生类的继承方式
- C++学习笔记-类的继承(派生类)
- 十二周实验报告任务1 理解基类中成员的访问限定符和派生类的继承方式。
- 第十二周任务二(理解基类成员的访问限定符和派生类的继承方式)
- 对于C++保护继承方式的一点理解
- 继承---派生类(C++)
- in c++读后感--理解继承和组合
- C++中 public和private派生类继承问题和访问权限问题
- 第十二周实验指导--任务1--理解基类中成员的访问限定符和派生类的继承方式