首页 > 代码库 > 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++派生类继承的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。