草庐IT

继承权

全部标签

c++ - 菱形多态继承 : sizeof Most derived Class

我知道菱形继承会导致歧义,可以通过virtualBaseClasses使用继承来避免,问题不在于此。当类是多态时,问题是关于菱形层次结构中最派生类的大小。这是示例代码和示例输出:#includeusingnamespacestd;classBase{public:virtualvoiddoSomething(){}};classDerived1:publicvirtualBase{public:virtualvoiddoSomething(){}};classDerived2:publicvirtualBase{public:virtualvoiddoSomething(){}};cl

c++ - 单一虚拟继承

我理解基类的虚拟继承在多个派生类之间创建了一个公共(public)共享基类,从而解决了DDD问题。如果我的基类只有一个派生类,那么虚拟继承基类或非虚拟继承基类时有区别吗?基本上我试图理解查询中提供的解释Isitpossibletoforbidderivingfromaclassatcompiletime?其中Usage_lock基类实际上是继承的,以防止从类Usable派生。如果我删除这个虚拟键,行为就会改变,即我能够从Usable派生子类。所以我想了解单继承场景中虚拟键造成的差异。 最佳答案 单个虚拟继承情况下的主要区别在于,只有

C++ 和结构(多重继承)

我一直在为我正在从事的项目研究C++和结构;目前,我正在使用“链式”模板结构将数据字段添加为伪特征。虽然它有效,但我认为我更喜欢像下面示例中的多重继承这样的东西:structa{inta_data;};//'Trait'Astructb{intb_data;};//'Trait'Bstructc:publica,publicb{intc_data;};//Acompositestructurewith'traits'AandB.structd:publicb{intd_data;};//Acompositestructurewith'trait'B.我的实验代码示例表明它们工作正常,但

c++ - c++编译器如何在内存中实现虚拟继承?

我对VIRTUAL关键字感到困惑。我试图找到编译器如何在内存中实现它。好的,让我用例子来解释。我正在使用MicrosoftVisualStudio2010,因为虚拟的实现取决于编译器。这是第一个代码#includeclassone{int_a;public:virtual~one(){}};classtwo:publicone{int_a;public:virtual~two(){}};intmain(){usingnamespacestd;couto/p是12个字节,因为_vptr_two,one::_a和two::_a这是另一个示例代码#includeclassone{int_a;

c++ - 继承构造函数 vs 转发

C++11允许继承构造函数,从而可以避免大量样板文件,尤其是使用包装类之类的东西。但是,您似乎已经可以单独使用可变参数模板实现此功能。classB{public:B(int){//dosomething}B(int,char){//dosomething}};使用继承构造函数:classD:publicB{public:usingB::B;};使用可变模板和转发:classD:publicB{public:templateD(Args&&...args):B(std::forward(args)...){}};虽然一致性(对于using以相同的方式对待构造函数和方法)和易用性是将继承的

c++ - C++继承中的protected和private成员变量

我是C++的新手,我有一个关于继承中的c++protected和private成员的问题。如果一个类是public继承了一个基类,protected和private成员变量是否会成为派生类的一部分?例如:classBase{protected:inta;intb;private:intc;intd;public;intq;};classDerived:publicBase{};类Derived是否也有a,b,c,d,q的所有成员?我们可以在Derived类中将inta定义为public、protected和private吗? 最佳答案

c++ - 基本的 C++ 继承

在学校和数百个在线视频中,C++继承是通过单个文件教授的;所有类都在main之上声明。我进行了广泛的搜索以找到继承如何与头文件一起工作的单个示例,但我很惊讶以前没有人问过这个问题。C++继承如何与头文件一起工作?每个子类是否需要它自己的扩展基本头文件的新头文件,或者子类定义文件是否可以定义父类(superclass)头文件的函数?此外,抽象类是否会影响上述问题? 最佳答案 在C++中,头文件的内容由预处理器插入到#included的位置。因此,将您正在使用的所有定义放在一个文件中与将这些定义拆分到各个头文件之间没有实质性区别。同样的

java - 多重继承 :Java vs C++

最近看了《ProgrammingLanguagesandPractice》一书中的一些文章,提到Java中的多接口(interface)继承不会像C++中的多类继承一样遇到同样的问题。但我不明白为什么会这样。Java如何能够在C++实现错误存在的情况下使用多接口(interface)继承??有没有办法在C++中替换多重继承以避免实现问题??为了更具体地说明最后一个陈述,假设我们有:classA{...};classB:publicA{...};classC:publicA{...};classD:publicB,publicC{...};然后类D继承类B、C,它们都继承类A。因此,如果

c++ - `is_trivially_destructible` 不适用于继承类

#includeusingnamespacestd;classNoConstructOperation{protected:NoConstructOperation()=default;virtual~NoConstructOperation()=default;public:NoConstructOperation(constNoConstructOperation&)=delete;NoConstructOperation&operator=(NoConstructOperation&)=delete;NoConstructOperation(NoConstructOperatio

c++ - 多层继承中的virtual关键字

我有一个继承链,其中A类公开继承自B类,B类又公开继承自C类。C类的析构函数被标记为“虚拟”。是否有人反对将B类和A类的析构函数标记为虚拟的?或者在这些情况下是否需要支付性能/内存损失? 最佳答案 如果基类析构函数被标记为虚拟的,那么派生类析构函数也是隐式虚拟的,您不需要明确地将其指定为虚拟的。没有性能或内存损失所以在你的例子中,如果C有一个虚拟析构函数B并且A继承了析构函数的“虚拟性” 关于c++-多层继承中的virtual关键字,我们在StackOverflow上找到一个类似的问题: