首页 > TAG信息列表 > virtual-inheritance

C虚拟继承初始化列表

在以下代码中: class A { public: int x; A(int x):x(x){} }; class B: public virtual A { public: B(int x):A(x){} }; class C: public virtual A { public: C(int x):A(x){} }; class D: public B, public C { public: D(int x):B(x++), C(x++), A(x++){}

消除C 11可变参数模板参数中的重复条目

我在C中使用具有多个虚拟继承的可变参数模板,以将类型聚合到单个结构定义中. 以下是一组结构示例: struct meas { int i; }; struct meas2 : public virtual meas { int j; }; struct meas3 : public virtual meas { int k; }; 然后我使用多个虚拟继承来聚合它们: template <typen

c – 虚拟继承中的析构函数

class Base{}; class D1:virtual public Base{}; class D2:virtual public Base{}; class DD:public D1,public D2{}; int main(){ Base *pBase=new DD; delete pBase; } 这导致崩溃,但我修改如下: class Base{ public: virtual ~Base(){}; }; class D1:virtual pu

c – 在未完成的类层次结构中对“final”类使用虚拟继承

是否存在任何损害或被认为是不好的设计,以先发制人的方式在未完成的类层次结构中导出当前“处于底层”(即衍生得最多)的类?是否有充分的理由让人们想要等到实际需要虚拟继承(即,当有人决定扩展层次结构并导致钻石时)?解决方法:在实际需要之前,我会避免虚拟继承.当您使用虚拟继承时,您

c – 删除多个(虚拟)继承中涉及的对象时,为什么会出现无效的块崩溃?

我正在编辑这个问题,使其更具可读性和更少人为.我已经设法用以下简短的代码复制我的问题.那么问题是:为什么在~A()的“删除p”行上,_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)的断言失败会导致失败? class A; class I { public: I(const A *p) : parent_(p) {} virtual voi

密封C语言中的类和虚拟继承

class ClassSealer { private: friend class Sealed; ClassSealer() {} }; class Sealed : public ClassSealer { // ... }; class FailsToDerive : public Sealed { // This class is capable of being instantiated }; 以上未能封上课,但以下作品,为什么? class C

C虚拟继承和类型转换/复制构造函数混淆

我有以下代码: class A { }; class B: public virtual A { public: B() { cerr << "B()"; } B(const A& a) { cerr << "B(const A&)"; } }; class C: public B { }; int main(int argc, char