• 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 */ 
  • 相关阅读:
    Spring Boot中常用的三个注解
    Idea插件
    Java微服务 在 Linux 环境启停Shell脚本
    注解
    Oracle树状结构层级查询
    zabbix安装部署(server部分)
    zabbix监控系统客户端安装
    Windows 用bat脚本带配置启动redis,并用vb脚本使其在后台运行。
    svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
    PHP网页显示乱码问题总结
  • 原文地址:https://www.cnblogs.com/sytu/p/4112249.html
Copyright © 2020-2023  润新知