草庐IT

继承权

全部标签

C++多重继承函数合并

我有:classXILightSource{public:virtualXVec2position()const=0;};classXLightSprite:publicXSprite,publicXILightSource{};问题是XSprite已经有相同的函数position。我怎么能告诉编译器,我想使用XSprite::position函数作为XILightSource::position()的实现? 最佳答案 覆盖它并调用XILightSource::position():classXLightSprite:publicX

c++ - 构造函数和析构函数继承

我认为基类中的构造函数和析构函数不能被基类的派生类继承。我的理解对吗? 最佳答案 你的理解是正确的。例如,如果您有classBase{Base(inti){}};classDerived:publicBase{};Derivedd(3);这不会编译,因为Base构造函数不是继承的。请注意,如果可能,默认构造函数和复制构造函数由编译器创建,并调用基类的相应构造函数,因此对于这些构造函数,看起来好像它们是继承的。 关于c++-构造函数和析构函数继承,我们在StackOverflow上找到一个

c++ - 多重继承 : size of class for virtual pointers?

给定代码:classA{};classB:publicvirtualA{};classC:publicvirtualA{};classD:publicB,publicC{};intmain(){cout输出:sizeof(D)8每个类都包含自己的虚指针,但不包含其任何基类的虚指针,那么,为什么class(D)的Size是8? 最佳答案 这取决于编译器的实现。我的编译器是VisualStdioC++2005。代码如下:intmain(){cout会输出sizeof(B):4sizeof(C):4sizeof(D):8B类只有一个虚指针

c++ - 多重继承解决抽象类

假设我有4个类:classI{public:virtualvoidX()=0;};classA:publicvirtualI{public:virtualvoidX(){}};classB:publicI{};classC:publicA,publicB{};I,B和C是抽象的,其中A不是。如果我简单地添加virtual继承I对于B,然后A::X()解决I::X()在C.但是,我无法更改B的来源.我的问题:我能得到A::X()吗?解决I::X对于C无法更改B?我试过声明A和B虚拟到C无济于事。我试图没有冗余代码(例如让C声明X(){A::X();})。有什么巧妙的技巧吗?另外-有几个问

c++ - 如何将项目依赖项/引用从一个项目继承到 Visual Studio 中的依赖项目

我的项目1依赖于Boost和GLM。对于Boost和GLM,我指定了“附加包含目录”来引用每个目录的C++文件。项目1创建为静态库项目。当我构建项目1时,一切都很好。项目2通过引用管理器引用项目1,但是当我构建项目2时,我得到了fatalerrorC1083:无法打开包含文件:'boost/something/etc.项目1中的文件。为什么在构建项目2时会出现有关项目1的错误?项目1还使用了Boost中的正则表达式库,必须在使用前将其构建到.lib中。如何让我的Project1静态库将内置的Boost正则表达式库和GLM包含文件合并到其中?仅供引用,项目2是项目1的测试项目。我想要这样

c++ - 如何在多重继承中实现同名虚函数

这个问题在这里已经有了答案:Inheritinterfaceswhichshareamethodname(5个答案)关闭9年前。代码如下//AhasavirtualfunctionF().classA{public:virtualvoidF(){};};//ThesameforB.classB{public:virtualvoidF(){};};//CinheritsAandB.classC:publicA,publicB{public://Howtoimplementthe2virtualfunctionswiththesamenamebutfrom//differentbasecl

c++ - 为什么 std 智能指针类型析构函数不继承指向对象的 noexcept dtor 状态

在C++11中,我的理解是默认情况下析构函数是隐式的noexcept(true),除了:如果我有一个类C有一个显式标记为noexcept(false)的析构函数(大概是因为它出于某种奇怪的原因抛出,我知道你不应该,为什么)然后是派生自C的任何类的析构函数或包含C类型的成员也变成noexcept(false).但是,一个包含std::shared_ptr的类显然不会自动将其析构函数切换为noexcept(false),包含std::weak_ptr也是如此,std::unique_ptr等这是一个完整的例子:#include#includestructNormal{~Normal(){}

c++ - 具有独占继承构造函数的类的值初始化

根据cppreference没有任何用户提供的构造函数的非union类类型将在构造之前被零初始化:IfTisannon-unionclasstypewithoutanyuser-providedconstructors,thentheobjectiszero-initializedandthentheimplicitly-declareddefaultconstructoriscalled(unlessit'strivial)我不确定在使用c++11继承的构造函数时会发生什么,因为引文明确提到了隐式声明默认构造函数。给定以下示例:#includestructA{inta;A(){}A(

c++ - 我在这里滥用继承吗?什么是最佳实践替代方案/模式?

大编辑因此,在收集了大家的一些反馈并思考了XYproblem之后正如Zack所建议的,我决定添加另一个代码示例来准确说明我要完成的任务(即“X”),而不是询问我的“Y”。现在我们正在处理汽车,我添加了5个抽象类:ICar、ICarFeatures、ICarParts、ICarMaker,ICarFixer。所有这些接口(interface)都将包装或使用第三方库提供的技术特定的复杂对象,具体取决于接口(interface)背后的派生类。这些接口(interface)将智能地管理复杂库对象的生命周期。我的用例是FordCar类。在此示例中,我使用Ford库访问类FordFeatureIm

c++ - 需要一个例子来说明默认构造函数没有被继承

我知道默认构造函数不是继承的,如n3337中所述.还有一个例子:structB2{B2(int=13,int=42);};structD2:B2{usingB2::B2;};很好的解释:ThecandidatesetofinheritedconstructorsinD2forB2is...—B2(int=13,int=42)—B2(int=13)—B2()最重要的是:ThesetofconstructorspresentinD2is—D2(),implicitly-declareddefaultconstructor,notinherited对我来说,这个例子并没有显示出区别,从某种意