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)
什么是虚拟基类的陷阱?谢谢你回答我的琐碎问题.
不可能base只构造一次而不是所有五种原始构造.程序中有四个包含base子对象的完整对象.这意味着无论你做什么,你将至少有四个 base结构.
此外,使用其他答案中提到的虚拟继承的建议实际上需要更改其他类,而不是base类.同时你的问题坚持要做出改变base.
这将base在您创建top类时仅构造一次.
class medium1:virtual public base{};
class medium2:virtual public base{};
Run Code Online (Sandbox Code Playgroud)
其余的来自你创建对象的事实b,m1和m2.你无法真正阻止调用基类的析构函数,因为,这就是你告诉编译器要做的事情.如果您不想创建base对象,请不要从中派生.