基类构造五次

hus*_*sik -2 c++ constructor class

这个"基础"类构造了b,medium1和medium2.当我使用"顶级"课程时,它构建了2倍以上.完全构建5次(写入屏幕5次).

问题: 我可以在"基础"类中进行哪些更改,使其仅构建一次.

#include "stdafx.h"
#include<stdlib.h> 

class base
{
public:
    base(){x=5;printf(" %i ",x);}
    int x;
}b;

class medium1:public base{}m1;

class medium2:public base{}m2;

class top:public medium1,medium2{};


int main() {
    top ten;
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

什么是虚拟基类的陷阱?谢谢你回答我的琐碎问题.

AnT*_*AnT 6

不可能base只构造一次而不是所有五种原始构造.程序中有四个包含base子对象的完整对象.这意味着无论你做什么,你将至少有四个 base结构.

此外,使用其他答案中提到的虚拟继承的建议实际上需要更改其他类,而不是base类.同时你的问题坚持要做出改变base.


Luc*_*ore 5

这将base在您创建top类时仅构造一次.

class medium1:virtual public base{};
class medium2:virtual public base{};
Run Code Online (Sandbox Code Playgroud)

其余的来自你创建对象的事实b,m1m2.你无法真正阻止调用基类的析构函数,因为,这就是你告诉编译器要做的事情.如果您不想创建base对象,请不要从中派生.