草庐IT

Inheritance

全部标签

C++ - 派生类中的 "Member function not declared"

我在MSVC++2008中遇到问题,其中VS2008抛出此编译错误:errorC2509:'render':memberfunctionnotdeclaredin'PlayerSpriteKasua'现在,令我困惑的是render()已定义,但在继承的类中。类定义是这样的:SpriteBase-InheritedBy->PlayerSpriteBase-InheritedBy->PlayerSpriteKasua因此,SpriteBase.h的简化版本如下:classSpriteBase{public://Variables===============================

链接时未定义 C++ 虚函数 - 为什么?

我在使用C++中的虚函数时遇到了一些麻烦,我可能在构造函数中误用了它们。问题是,当将一个组件库(由我编写)链接到我的最终可执行文件时,一个虚函数被标记为未定义,即使我已经为它编写了一个实现并链接了它。我有以下类(class):templateclassUdpConnection{public:UdpConnection(size_tdispatchCount):service(),listener(service),pool(dispatchCount),sysMsgHandlers(),bufferPool(),buffers(){assert(dispatchCount>0);in

c++ - 为他人写作

当我编写一个将被第三方继承的类时,我必须应用哪些主要和最重要的规则(优点和缺点)。谢谢。 最佳答案 基本规则是:MakeInterfacesEasytoUseCorrectlyandHardtoUseIncorrectly。它来自ScottMeyers的优秀著作第3版EffectiveC++。Here还有一些非常好的类设计指南。 关于c++-为他人写作,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - 从基指针向下转换为模板派生类型

我有以下层次结构:classbase{public:virtual~base(){}virtualvoidfoo(){}};templateclassderived1:publicbase{virtualvoidfoo(){};};templateclassderived2:publicbase{virtualvoidfoo(){};};现在给定一个指向基的指针,我想知道是否underlying是derived1或derived2。问题是derived1和derived2都可以专门用于许多不同的类型,使用dynamic_cast测试向下转换需要要知道的模板类型。我最终得到了一些困惑、无

C++:条件继承是否可能

我正在从事微处理器(Arduino)项目。我的库Foo继承自现有的库Basic。后来我将Basic的功能扩展到另一个类Advanced。但是,Advanced使硬件更加困难,使得其中一个已经制作的演示无法使用。我的想法如下:classFoo:#ifndefUSE_BASICpublicAdvanced#elsepublicBasic#endif{...}并将#defineUSE_BASIC放入我的演示代码中:#defineUSE_BASIC#include但是Foo没有继承自Basic。我在这里做错了吗?或者是否有其他方法可以解决这个问题? 最佳答案

c++ - 从没有默认构造函数的类继承的类

现在我有一个A类继承自B类,而B没有默认构造函数。我正在尝试为A创建一个构造函数,它具有与B的构造函数完全相同的参数structB{intn;B(inti):n(i){}};structA:B{A(inti){//...}};但我得到:error:nomatchingfunctionforcallto‘B::B()’note:candidatesare:B::B(int)我该如何解决这个错误? 最佳答案 构造函数应该是这样的:A(inti):B(i){}冒号后面的位表示“使用其int构造函数初始化该对象的B基类子对象,值为i”。我猜

c++ - 为什么虚函数需要通过指针而不是(对象的)值传递?

我想我理解虚拟方法和vtables的概念,但我不明白为什么将对象作为指针(或引用)传递和按值传递(哪种废弃vtable或什么?)为什么这样的东西会起作用:Material*m=newTexture;poly->setMaterial(m);//methodsfromTexturearecalledifIkeepcarryingthepointeraround而不是这个?Materialm=Texture();poly->setMaterial(m);//methodsfromMaterialarecalledifIpassthevaluearound 最佳答

C++ 为什么我不能将基类分配给子类?

我有这样的代码:classBase{public:voidoperator=(constBase&base_){}};classChild:publicBase{public:};voidfunc(){constBasebase;Childchild;child=base;}我的问题是:既然Child派生自Base(因此它应该继承Base的operator=),为什么当语句出现时child=base;被执行,我得到这样的编译器错误:>.\main.cpp(78):errorC2679:binary'=':nooperatorfoundwhichtakesaright-handopera

c++ - 继承成本是多少?

这是一个非常基本的问题,但我仍然不确定:如果我有一个将被实例化数百万次的类——是否建议不要从其他类派生它?换句话说,继承是否会带来一些我在实践中应该担心的成本(在构建或销毁对象的内存或运行时方面)?例子:classFoo:publicFooBase{//shouldIavoidderivingfromFooBase?//...};intmain(){//constructsmillionsofFooobjects...} 最佳答案 从类继承在运行时没有任何成本。如果基类中有变量,类实例当然会占用更多内存,但如果它们直接在派生类中并且

c++ - 静态多态的Strategy和CRTP有什么区别?

我想要一个具有多种可能实现的接口(interface),在编译时选择。我看到CRTP是实现它的首选习惯用法。这是为什么?另一种方法是策略模式,但我在任何地方都看不到这种技术的提及:templateclassStrategyInterface{public:voidInterface(){impl.Implementation();}voidBrokenInterface(){impl.BrokenImplementation();}private:Implimpl;};classStrategyImplementation{public:voidImplementation(){}};