高类层次结构在运行时有哪些缺点?我们将H称为层次结构的高度(即:从基类到叶子要遍历多少个类)。dynamic_cast会花费更多:花费O(H)。是否有其他运算符或语言功能受到影响? 最佳答案 主要问题是可维护性。很深的类层次结构可能没有正确建模。任何超过3-4级别的内容都会让您收到警报。您可能是从具体类派生的,这是您永远不应该做的事情(LiskovSubstitutionprinciple不允许这样做)。如果您的基类充斥着虚函数(我的意思是不纯函数),那么重构将很困难。将您的基类拆分为几个不同的接口(interface)(Inter
我正在使用GCC4.4.5。这是我的问题的重现:#includeclassTest{public:Test(inta,intb=42):m_a(a),m_b(b){}private:intm_a;intm_b;};typedefstd::vectorTestList;classTestMaster{public:TestMaster(TestListtests=TestList()):m_tests(tests){}private:TestListm_tests;};现在,这有效:intmain(){TestListtest_list={15,22,38};return0;}但这不能编
如果我们假设我们有这样的类层次结构:A1)如果我在B中实现了一个拷贝构造函数,是否一定要在B的实现中调用A的拷贝构造函数?2)C的默认复制构造函数会调用我在B中实现的复制构造函数吗? 最佳答案 不一定,但这是一种很好的做法。它不会被自动调用。您还可以调用一些其他构造函数(或不调用,在这种情况下调用默认构造函数)并执行任何您想做的事情,尽管调用基本复制构造函数是惯用的做法。是的,会的。 关于c++-默认复制构造函数和复杂的继承层次,我们在StackOverflow上找到一个类似的问题:
考虑一下:classFluffyThing{public:FluffyThing(){m_pMyFur=newFur;}virtual~FluffyThing();protected:Fur*m_pMyFur;};classClawedFluffyThing:publicFluffyThing{public:ClawedFluffyThing():FluffyThing(){m_pMyClaws=newClaws;}virtual~ClawedFluffyThing();protected:Claws*m_pMyClaws;};classScaryFluffyThing:publicC
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:PrioritywhenchoosingoverloadedtemplatefunctionsinC++模板化函数让我可以方便地对各种类型进行操作:templatevoiddestroy(T*obj){deleteobj;}但在某些时候我想对类层次结构进行一些专门化:classBase{virtualvoiddoSomething();};classDerived:publicBase{};voiddestroy(Base*obj){obj->doSomething();deleteobj;}如果我传递了确切
来自Wikipedia://TheCuriouslyRecurringTemplatePattern(CRTP)templatestructbase{//...};structderived:base{//...};现在如果我想要derived_from_derived,我可以写://TheCuriouslyRecurringTemplatePattern(CRTP)templatestructbase{//...};templatestructderived:base{//...};structderived_from_derived:derived{//...};现在假设我只想要一
我想将我所有的游戏对象组织成一个层次结构。我认为一棵树是最好的主意。我考虑过使用STD::Set来处理这个问题。这有任何意义吗?基本上,一个游戏对象可以容纳数量可变的其他游戏对象。如果我确实以这种方式处理它,那么处理访问树中对象的最佳方式是什么?通过ID访问它们是否足够快?我想我也可以通过指针访问它们,但是如果遇到有很多对象的情况,传递它们听起来有些危险和乏味。如果有任何影响,我也会显示此数据。例如:-Hierarchy-GameObject-GameObject-Gameobject-GameObject-GameObject-GameObject-GameObject我感谢任何输入
我写了下面的代码。#includeusingnamespacestd;classCI{public:virtualvoiddisplay()=0;};classInter:publicCI{public:intparseData(int);};Inter::parseData(intdata){coutdisplay();temp=obj->parseData(100);coutdisplay();temp=obj->parseData(200);}我的问题是:为什么我无法调用obj->parseData函数?。根据我的理解,因此类“Last”和“USB”派生自类“Inter”,它应该
我正在尝试编译ContractionHierarchiesImplementation由KIT提供。此软件已于2009年发布,此后显然没有得到维护。由于同时发生了一些变化(使用新的C++标准和编译器版本),代码不再编译现成的。README在编译说明方面不是很冗长,它说您应该只调用make。但是,使用make会出现以下错误:g++-Wall-W-Wno-unused-parameter-O6-c-omain.omain.cppInfileincludedfrom/usr/include/c++/4.8/ext/hash_map:60:0,fromcommand/../io/../data
文字描述(下面的代码):我有一个提供类集合的库。对于每组类,我们有两个具体类型,(ClassA_Partial,ClassA),(ClassB_Partial,ClassB)等。这些分别实现(Interface_Partial、Interface)。此外,Interface是一个Interface_Partial并且每个Class?是一个Class?_Partial-创建一个菱形继承模式,其中顶部是虚拟继承的。为什么在同时继承ClassA和ClassB时,Interface_Partial函数不明确?structInterface_Partial{virtual~Interface_P