草庐IT

继承权

全部标签

c++ - 类和接口(interface)之间的继承顺序重要吗?

先继承class还是先继承C++interface会有什么不同吗?例子:classA:publicIAbstract,publicClassB{};classA:publicClassB,publicIAbstract{}; 最佳答案 initializationorder直接基类(即ClassB和IAbstract)将不同。由基类说明符列表中的声明顺序决定。(强调我的)2)Then,directbaseclassesareinitializedinleft-to-rightorderastheyappearinthisclass'

c++ - 从 C++ 中的空基类继承

我想创建一个名为“Node”的空基类,然后从中派生其他类,例如“DecisionNode”和“Leaf”。这样做很有意义,因此我可以利用多态性将这些不同类型的节点传递给方法,而无需在编译时知道将传递给方法的内容,但每个派生类都不共享任何状态或方法。我认为最好的实现方法是使构造函数成为纯虚拟的,而无需在基类中创建额外的纯虚拟方法(这会增加困惑)。因此,在该类的头文件“Node.h”中,我写道:classNode{private:virtualNode();};在“Node.cpp”中我写道:#include"Node.h"virtualNode::Node()=0;此实现防止Node被另

c++ - 非多态继承对性能/内存使用有影响吗?

我很好奇继承对非多态类的影响。具体来说,我正在编写两个智能指针类,都没有使用虚方法,而且都用于非常独特的目的。由于基本运算符重载和一些标准函数是相同的,而且它们只需要一个成员变量,所以我想我可以使用一个基类来重用代码。这是我的意思的简单模型:基类:templateclassPointer_Impl{public:T&operator*(){returnthis->*m_pointer;}//etc.protected:T*m_pointer;//protectedtopreventinstantiationwithoutusing=deletePointer_Impl(){}Point

C++ 继承 : scoping and visibility of members

你能解释一下为什么这是不允许的吗,#includeclassB{private:inta;public:inta;};intmain(){return0;}这是什么时候?#includeclassA{public:inta;};classB:publicA{private:inta;};intmain(){return0;}在这两种情况下,我们在classB中都有一个名为a的公共(public)变量和一个私有(private)变量。现在编辑! 最佳答案 Inboththecases,wehaveonepublicandonepriv

c++ - 基类指针与继承类指针?

假设我有一个继承自Animal类的Dog类。这两行代码有什么区别?Animal*a=newDog();Dog*d=newDog();一种是指向基类的指针,另一种是指向派生类的指针。但这种区别何时会变得重要?对于多态性,两者的工作方式完全相同,对吧? 最佳答案 为了类型检查的所有目的,编译器对待a就好像它可以指向任何动物,即使你知道它指向一只狗:你不能通过a到一个期待Dog*的函数.你做不到a->fetchStick(),其中fetchStick是Dog的成员函数但不是Animal.Dog*d2=dynamic_cast(d)可能只是

c++ - 多重继承和unique_ptr销毁

我有经典的(可能有问题的)多重继承菱形方案。B继承了AC继承了AD继承了C和B我想要一个std::vector可以包含C或D对象,所以我将其设为std::vector这是D爸爸和它工作正常。但是当我使用:std::vector>然后我在破坏vector时出现段错误。**glibcdetected***./a.out:free():invalidpointer:0x0000000009948018***为什么会有差异?对我来说,即使是第一次实现也是有问题的。代码#include#include#includeclassA{public:A()=default;};classB:publi

c++ - 为什么 operator = 不从模板类继承

我有以下模板代码:classClassName{};templateclassTemplatePtr{public:voidoperator=(T*p){}};classTemplatePtr_ClassName:publicTemplateePtr{public:~TempaltePtr_ClassName();};voidTest(){TemplatePtr_ClassNamedata;data=newClassName;}但编译失败并显示错误消息(VS2008):errorC2679:binary'=':nooperatorfoundwhichtakesaright-handop

c++ - 如何编写 C++ 继承构造函数

我已经离开C++一段时间了,我在这个方面遇到了一些麻烦。我会为你省去我的错误代码——有人可以发布一个“模型答案”来说明如何为一个小类编写一个简单的头文件和源文件,该类的构造函数接受一些值,并将一些值传递给它的基础类构造函数?我担心我错误地做了一些内联的事情。谢谢。有时,最简单的答案却最难在互联网上找到清晰的示例。 最佳答案 //ExampleClass.h#ifndefExampleClass_H_#defineExampleClass_H_#include"ExampleBase.h"classExampleClass:publi

c++ - 类型a必须实现继承的纯虚方法b

我想使用抽象类在C++中模拟接口(interface)原型(prototype)。但在EclipseIDE中,我得到“此行有多个标记-'Handler'类型必须实现继承的纯虚方法'处理程序::设置下一步'"我的问题是为什么会这样?处理程序.hclassHandler{public:virtualvoidsetNext(Handler&next)=0;Handler();virtual~Handler();virtualvoidprocess()=0;public:Handler*nextInChain;};处理程序.cpp#include"Handler.h"Handler::Hand

c++ - 我可以只覆盖继承中的一种方法吗?

我的C++代码如下:#includeusingnamespacestd;classA{public:virtualvoidf(inti){cout在编译期间我得到:g++-std=c++11file.cppfile.cpp:Infunction‘intmain()’:file.cpp:29:9:error:nomatchingfunctionforcallto‘B::f(int,int)’file.cpp:29:9:note:candidateis:file.cpp:20:16:note:virtualvoidB::f(int)file.cpp:20:16:note:candidate