首页 > 代码库 > C++派生类继承的理解

C++派生类继承的理解

 

 1 #include<iostream> 2 using namespace std; 3 class Base{ 4     public: 5         Base() 6         { 7             a=5; 8             cout<<"Base a="<<a<<endl; 9         }10     protected:11         int a;//如果这里是私有的变量,则在他的所有派生类中都不具有访问权限12         //派生类只能直接访问基类 的公有和保护成员13         //私有成员仅限于自己使用。14         //保护成员则允许派生类使用,而不允许通过对象进行直接调用15         //公有类是允许所有的调用 16 };17 class Base1:virtual public Base{18     public:19         int b1;20         Base1()21         {22             a=a+10;23             cout<<"Base1 a="<<a<<endl;24         }25 };26 class Base2:virtual public Base{27     public:28         int b2;29         Base2()30         {31             a=a+20;32             cout<<"Base2 a="<<a<<endl;33         }34 };35 class Derived:public Base1,public Base2{36     public:37         int d;38         Derived()39         {40             cout<<"Base1::a="<<Base1::a<<endl;41             cout<<"Base2::a="<<Base2::a<<endl;42         }43 };44 //定义虚基类是对同一个基类只复制一次。45 //从本例函数执行结果看出:46 //由Derived类的创建,会导致Base1类的创建,然后是Base2的创建 47 //要创建Base1类必先创建他的派生类Base48 //Base类创建后接着Base1创建,然后此时Base类被调用了一次49 //Base1类创建结束后再创建Base2.50 //因为是虚继承,Base已经被调用过一次,此时它不再调用Base类51 //Base2会用在Base1创建的基础上调用的Base类的值。52 //在所有的基类被依次创建后,然后再创建 最底层的派生类Derived 53 int main()54 {55     Derived obj;56     return 0;57 }58 /*59 在虚继承时的执行结果 60 Base a=561 Base1 a=1562 Base2 a=3563 Base1::a=3564 Base2::a=3565 */66 /*67 在非虚继承时执行的结果 68 Base a=569 Base1 a=1570 Base a=571 Base2 a=2572 Base1::a=1573 Base2::a=2574 */ 

 

C++派生类继承的理解