zoukankan      html  css  js  c++  java
  • C++虚基类的初始化

     1 #include<iostream>
     2 using namespace std;
     3 class Base{
     4     public:
     5         Base(int sa)
     6         {
     7             a=sa;
     8             cout<<"Constructing Base"<<endl;
     9         }
    10     private://私有变量,不可在派生类中直接使用 
    11         int a;
    12 };
    13 class Base1:virtual public Base{
    14     public:
    15         Base1(int sa,int sb):Base (sa)
    16         {
    17             b=sb;
    18             cout<<"Constructing Base1"<<endl;
    19         }
    20     private:
    21         int b;
    22 }; 
    23 class Base2:virtual public Base{
    24     public:
    25         Base2(int sa,int sc):Base(sa)
    26         {
    27             c=sc;
    28             cout<<"Constructing Base2"<<endl;
    29         }
    30     private:
    31         int c;
    32 };
    33 class Derived:public Base1,public Base2{
    34     public:
    35         Derived(int sa,int sb,int sc,int sd)
    36         :Base(sa),Base1(sa,sb),Base2(sa,sc)
    37         //如果Base类不是虚基类,就不能使用这种方式调用基类的构造函数 
    38         {
    39             d=sd;
    40             cout<<"Constructing Derived"<<endl;
    41         }
    42     private:
    43         int d;
    44 };
    45 int main()
    46 {
    47     Derived obj(2,4,6,8);
    48     return 0;
    49 }
    50 
    51 /*
    52 执行结果 
    53 Constructing Base
    54 Constructing Base1
    55 Constructing Base2
    56 Constructing Derived
    57 */ 

     从分析上述程序中虚基类Base的构造函数只执行了一次。

    显然,当Derived的构造调用了虚基类Base的构造函数之后,

    类Base1和类Base2对Base构造函数的调用被忽略了,这也是初始化虚基类

    和初始化非虚基类不同的地方。

    关键字virtual与派生方式关键字(public或private)的先后顺序无关紧要,

    他只说明是“虚拟派生”。

    一个基类在作为某些派生类虚基类的同时,又作为另一些派生类的非虚基类,

    这种情况是允许的。

  • 相关阅读:
    媒介管理系统权限设计方案
    document.ready和window.onload区别,顺带jQuery的ready方法
    nvm管理node版本
    async await一些小结
    Git学习
    详解JavaScript中的正则表达式
    JavaScript中的事件循环机制跟函数柯里化
    前端面试遇到的问题
    ES6在工作中会用到的核心知识点讲解
    JavaScript中的事件委托机制跟深浅拷贝
  • 原文地址:https://www.cnblogs.com/sytu/p/4112315.html
Copyright © 2011-2022 走看看