虚拟继承中谁调用构造函数?

发布于 2024-10-10 03:27:43 字数 460 浏览 4 评论 0原文

#include<iostream>

class base{
public:
base(){std::cout<<"In base";}
};

class dv1:virtual private base {
public:
dv1(){std::cout<<"In DV1";}
};

class dv2:virtual private base {
public:
dv2(){std::cout<<"In DV2";}
};

class drv : public dv1, public dv2 {
public:
drv() {std::cout<<"Why is this working";}
};

int main() {
drv obj;

return 0;
}

在虚拟继承的情况下,调用构造函数不是大多数派生类的责任吗? 注意:这里的base是虚拟的、私有的继承。

#include<iostream>

class base{
public:
base(){std::cout<<"In base";}
};

class dv1:virtual private base {
public:
dv1(){std::cout<<"In DV1";}
};

class dv2:virtual private base {
public:
dv2(){std::cout<<"In DV2";}
};

class drv : public dv1, public dv2 {
public:
drv() {std::cout<<"Why is this working";}
};

int main() {
drv obj;

return 0;
}

Isn't in case of virtual inheritance, it is the responsibility of most derive class to call the constructor?
Note: Here base is inherited virtually and privately.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

本宫微胖 2024-10-17 03:27:43

drv 的构造函数没有显式调用其基类的构造函数,因此编译器将生成对基类的无参数构造函数的调用

Your constructor of drv didn't explicitly call the constructors of its base class(es), so the compiler will generate a call to the parameterless constructor of the base class

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文