zoukankan      html  css  js  c++  java
  • 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类必先创建他的派生类Base
    48 //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=5
    61 Base1 a=15
    62 Base2 a=35
    63 Base1::a=35
    64 Base2::a=35
    65 */
    66 /*
    67 在非虚继承时执行的结果 
    68 Base a=5
    69 Base1 a=15
    70 Base a=5
    71 Base2 a=25
    72 Base1::a=15
    73 Base2::a=25
    74 */ 
  • 相关阅读:
    HDU2027 统计元音 一点点哈希思想
    湖南工业大学第一届ACM竞赛 数字游戏 字符串处理
    湖南工业大学第一届ACM竞赛 我素故我在 DFS
    HDU3293sort
    HDU2082 找单词 母函数
    HDU1018 Big Number 斯特林公式
    湖南工业大学第一届ACM竞赛 分糖果 位操作
    UVA 357 Let Me Count The Ways
    UVA 147 Dollars
    UVA 348 Optimal Array Multiplication Sequence
  • 原文地址:https://www.cnblogs.com/sytu/p/4112249.html
Copyright © 2011-2022 走看看