虚继承执行顺序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuYinXinAll/article/details/71037075

虚继承执行顺序

虚基类的执行顺序有点不懂嘛。于是找了一个例题。打个断点看看。(代码在最后)

1.先调用D的构造函数,在D的构造函数中调用A(父类的构造函数)

这里写图片描述

2. 返回D的构造函数

这里写图片描述

3. 在调用B的构造函数

这里写图片描述

4. 再返回 D的构造函数

这里写图片描述#### 5. 再调用C的构造函数
这里写图片描述

6. 再返回D的构造函数

这里写图片描述

7. 执行 D构造函数的内容。

这里写图片描述

参考文章
C++虚继承的概念

源代码如下:

#include "stdafx.h"
#include<iostream>
using namespace std;
class A {
public :
    A(char * str){
        cout << str << endl;
    }
    ~A(){}
};
class B :virtual public A {
public:
    B(char * str1, char * str2):A(str1) {
        cout << str2 << endl;
    }
    ~B(){}
};
class C :virtual public A {
public:
    C(char* str1, char * str2) :A(str1) {
        cout << str2 << endl;
    }
    ~C(){}
};
class D : public B, public C {
public:
    D(char* str1,char * str2,char * str3,char *str4):B(str1,str2),C(str1,str3),A(str1){
        cout << str4 << endl;
    }
};

int main() {

    D * d = new D("class a","class b","class c","class d");
    delete d;
    getchar();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/liuYinXinAll/article/details/71037075