草庐IT

Inheritance

全部标签

c++ - 使用多重继承实现Entity-Component编程

我读过几篇关于实体组件编程风格的文章。常见的问题之一是如何表达组件之间的依赖关系,以及与同一实体相关的组件如何通信。在我看来,这个问题的一个简单解决方案是使每个依赖项成为其依赖项的虚拟基类。这样,当一个组件包含在一个实体中时(通过虚拟继承),所有依赖的组件都只包含一次。此外,组件所依赖的所有功能都将在其成员函数中可用。classC_RigidBody:publicvirtualC_Transform{publicvoidtick(floatdt);};classC_Explodes:publicvirtualC_Transform{publicvoidexplode();};class

c++:通过多级继承从模板子类调用基类的模板方法

我正在寻找从通过C::A和B::A继承它的子类D调用基类A的方法。templateclassA{public:templatevoidFunc(void){std::cout::Func"classB:publicA{};templateclassC:publicA{};classD:publicB,publicC{public:D(){static_cast*>(this)->A::Func();static_cast*>(this)->A::Func();}};这按预期工作,D在初始化时使用子类的模板参数调用B::A::Func和C::A::Func。但是,当D是模板类时,这似乎不

c++ - 将继承重构为组合,在 C++ 中保持多态能力

我将来可能会遇到问题,我希望今天能做好充分的准备。该问题涉及C++上下文中的继承、多态性和组合。我们如何将“继承代码重用”重构为组合,并且仍然能够保持多态方法?我在这里寻找的是关于这个问题的更多“实践”指导。我提供了一个非常简化的示例来向您展示,我相信您将能够阅读它并将其提炼成我需要的答案。classMultilingual_entity{public:enumclasst_languages{LAN_ENGLISH,LAN_RUSSIAN,LAN_CHINESE};private:std::maptexts;public:std::stringset_text(t_languaget

c++ - 非多态类型派生类型的虚拟基础

基到派生的转换需要通过static_cast或dynamic_cast进行显式转换。当基数是虚拟时,只有后者适用。此外,dynamic_cast只能用于多态类型。两者一起似乎表明,鉴于所涉及的类型不是多态的,将虚拟基础转换为派生实际上是不可能的。这是真的吗? 最佳答案 您对标准的解释似乎是正确的。但是我愿意争辩说这无关紧要,因为你假设的带有非虚拟析构函数的虚拟基础是一场灾难,当有人试图多态删除它并遇到未定义的行为时,它就会发生,因为析构函数是非-虚拟。 关于c++-非多态类型派生类型的虚

c++ - 以下代码在 VS 2013 Release/Debug 中产生不同的结果

这个问题在这里已经有了答案:Dodistinctfunctionshavedistinctaddresses?(4个答案)关闭7年前。这是VS2013编译器中的错误吗?以下代码在调试和发布时会产生不同的结果。在调试中结果符合预期,但在发布中它是“A”#includestructA{virtualvoid*getClass(){returnA::ID;};staticvoidID(){};};structB:publicA{virtualvoid*getClass(){returnB::ID;};staticvoidID(){};};structC:publicA{virtualvoid

c++ - 继承包含另一个派生类的 C++ 类

将下一个C++类作为问题的简化:structCar{virtualintget_price()=0;};structExpensiveCar:publicCar{intget_price(){/*..*/}voidapply_turbo(){/*..*/};};structCheapCar:publicCar{intget_price(){/*..*/}};structCarRetailer{virtualstd::vectorget_cars()=0;};structExpensiveCarsRetailer:publicCarRetailer{virtualstd::vectorg

c++ - 继承的构造函数和 "explicit is better than implicit"

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion良好编程风格的一个众所周知的原则是:“显式优于隐式”。继承的构造函数不是违背了这个原则吗?(包含基类的所有构造函数的单个using语句不是很明确,对吗?)

c++ - 如果基类包含数组成员,则派生类的构造函数不能是 constexpr

我想定义派生类型(SBar)的constexpr值,使用构造函数,其唯一参数是基类(SFoo)的变量,它仅用于初始化基类。当基类没有数组成员时,这很好用。但是,当我添加一个数组时,派生值不再是constexpr。不过,基类的简单拷贝确实会产生constexpr结果。为了安全起见,我已明确默认所有复制和移动构造函数。测试.cpp#defineUSE_ARRAYstructSFoo{constexprSFoo()=default;constexprSFoo(SFooconst&)=default;constexprSFoo(SFoo&)=default;constexprSFoo(SFoo

C++ - 更改对象的类型

简述:是否可以在建立后更改对象的类型?我尝试过的:例如给定设计:(编辑:澄清一下,这是一个策略设计模式的简化示例,ChangeData的作用并不重要,重要的是我们可以通过更改_interface来改变它的作用>)structMyClass{int_data;MyInterface*_interface;voidDoChangeData(){Interface->ChangeData(*this);}};MyClassx;x._interface=newDerivedClass1();x.DoChangeData();//dosomethingx._interface=newDerive

c++ - 我可以继承模板类并将类型设置为我当前尝试继承的类的模板化子类吗?

糟糕的标题,我知道。我将举例说明:templatestructMemMapFileHashTable:MemMapFileStructured::kvp>{structkvp{uint32_tkey;ValTypeval;};MemMapFileHashTable(constchar*fileName,boolwrite=false,int64_tchunkB=65536):MemMapFileStructured(fileName,write,chunkB){}};所以我的想法是,我创建一个具有特定ValType的哈希表,该哈希表又具有具有特定ValType的kvp。要使用我正在继承