草庐IT

C++:虚拟继承

全部标签

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

c++ - 为什么我得到 "Undefined symbols ... typeinfo ... vtable"与虚拟和具体类?

我正在重新学习C++(意思是:对我温柔一点!:)。我有一个父类(superclass)(Node),它有一个必须在子类(TestNode)中实现的抽象方法(step())。它编译没有错误,也没有任何警告,但链接它会导致:bash-3.2$g++-Wall-o./bin/t1src/t1.cppUndefinedsymbolsforarchitecturex86_64:"typeinfofortest::Node",referencedfrom:typeinfofortest::TestNodeint1-9f6e93.o"vtablefortest::Node",referencedfr

c++ - 为什么不继承 C++ 构造函数?

为什么在此代码中需要Child传递构造函数?我认为它不会,但是当我删除它时编译器(gcc和VS2010)会提示。有优雅的解决方法吗?必须将此垫片插入子类似乎毫无意义。classParent{public:Parent(inti){}};classChild:publicParent{public:Child(inti):Parent(i){}};intmain(){Childchild(4);return0;} 最佳答案 因为以下是完全有效的:classParent{public:Parent(inti){}};classChild

c++ - 用于遍历继承层次结构的 Static_cast 与 dynamic_cast

我看到一本关于C++的书提到使用静态转换在继承层次结构中导航比使用动态转换更有效。例子:#include#includeusingnamespacestd;classShape{public:virtual~Shape(){};};classCircle:publicShape{};classSquare:publicShape{};classOther{};intmain(){Circlec;Shape*s=&c;//Upcast:normalandOK//Moreexplicitbutunnecessary:s=static_cast(&c);//(Sinceupcastingis

c++ - 如果一个类可以被继承,那么每个函数都应该是虚拟的吗?

在C++中,编码人员不知道其他编码人员是否会继承他的类。他应该让那个类中的每个函数都虚拟吗?有什么缺点吗?还是根本无法接受? 最佳答案 在C++中,只有当您打算以多态方式使用某个类时,才应使该类可继承。在C++中处理多态对象的方式与处理其他对象的方式非常不同。您不倾向于将多态类放在堆栈上,或者按值传递它们或从函数返回它们,因为这会导致切片。多态对象往往是堆分配的,通​​过指针或引用等传递和返回。如果你把一个类设计成不能被继承,然后再继承它,就会导致各种各样的问题。如果析构函数未标记为虚拟,则无法在不导致未定义行为的情况下通过基类指针

c++ - 修复 C++ 多重继承不明确调用

我有三个结构如下的类:#includeusingnamespacestd;classKeyword{public:virtualfloatGetValue()=0;};classCharacterKeyword:publicKeyword{public:virtualfloatGetValue(){return_value;}private:float_value;};classMeasurementKeyword:publicKeyword{public:virtualfloatGetValue(){return_value;}private:float_value;};classA

c++ - 我们在A(派生类) "is a"B(基类)时使用继承。当A "can be"B或C时我们怎么办?

抱歉提出这个丑陋的问题,但我不知道该如何表达。我将举例说明我的意思:人类可以是法师也可以是战士,所以法师和战士可以继承人类。但是,如果Orc也可以兼而有之呢?我们不能说“人是战士”或“战士是人”。Orc和Human(或者一个父类,Humanoid)是否继承了所有的技能,然后选择使用什么?我不知道是否应该标记特定语言,因为这是关于oop的一般性问题,但由于不同的语言对同一问题可能有不同的方法,所以我更喜欢从C++的角度来回答。 最佳答案 改进您的建模抽象类种族,具体类人类、兽人等...抽象类Class,具体类Mage、Warrior等

c++ - 虚拟继承不会破坏静态组合?

过去5年我一直在假设虚拟继承打破了静态组合。但现在我发现,静态组合仍然存在,只是关于正确实例位置的附加信息。这样对吗? 最佳答案 非虚拟继承中的数据布局:classPoint2d{intx_,y_;};classPoint3d:publicPoint2d{intz_;};点2d:+--------------+|intx_|+--------------+|inty_|+--------------+Point3d:+--------------+--+|intx_||+--------------++--Point2dsubobj