草庐IT

c++ - 使用基类对象 C++ 初始化子类?

所以,标题可能有点困惑,但这是我的问题:我有一个父类(superclass)(我们称它为SupClass)和一个继承自SupClass的子类(我们称它为InhClass)。现在,我想为我的InhClass创建一个构造函数,它接收一个SupClass对象并用它初始化InhClass的“SupClass部分”。下面是一个代码示例,试图说明这一点:ClassSupClass{public:SupClass(){//InitializeSupClassobject}};ClassInhClass:privateSupClass{public:InhClass(SupClassobj){//In

c++ - 有没有办法指定或断言子类必须重新实现特定的非抽象虚方法?

这就是我的意思。我有一个类层次结构:classA{virtualintf()=0;};classB:publicA{intf()override{return5;}voiddoSpecificStuff(){}}B是一个自给自足的类,可以单独使用。但它也有很多后代:classC:publicB{intf()override{return171;}}有什么方法可以确保在子类化B时不会忘记重新实现f吗? 最佳答案 此解决方案的灵感来自@dyp的评论:你可以拆分B的两个职责,即“提供B风格的实现”和“可以被实例化”。classB_for_

c++ - 覆盖 QTextEdit 子类中的 keyPressEvent

我在Qt中有以下示例,其中我尝试覆盖QTextEdit子类的keyPressEvent,但给了我“txt::keyPressEvent(QKeyEvent*)的多重定义”,我无法弄清楚原因://txt.h#ifndefTXT_H#defineTXT_H#includeclasstxt:publicQTextEdit{Q_OBJECTpublic:txt(QWidget*parent=0);signals:voidkeyPressEvent(QKeyEvent*e);publicslots:};#endif//TXT_H//txt.cpp#include"txt.h"txt::txt(Q

c++ - 为什么必须将 "virtual"放入基类而不是仅在子类中使用 "override"?在 C++ 中

标题几乎说明了一切。为什么要在基类中定义以后可能重写的函数?如果您想从中派生出不同行为的版本,那么您必须修改基类,并且您还没有考虑过将基类中的特定函数标记为虚拟。据我所知,您通过使用override解决了java中的此类抽象定义,这对我来说似乎更自然(尽管到目前为止我只关注java)。c++中的这种扭曲是为了强制程序员提前思考,还是有技术原因导致它这样工作? 最佳答案 这样做是为了使成员函数成为虚函数的决定保留在基类中。决定将一个函数设为虚函数会对设计产生影响:如果你将一个函数设为虚函数,你必须考虑它执行不同操作的可能性。相反,您可

c++ - 函数需要抽象类型 A 的 C++ 对象。如何将 A 子类的 Lua 对象传递给它?

我想将派生自纯虚拟C++类的类的Lua对象传递给需要纯虚拟类的C++对象的函数。我该怎么做?我是lua和luabind的新手,请耐心等待。在C++中:structA{virtualvoidfoo()=0;};voiddo_something(A*a){a->foo();}在Lua中:class'MyA'(A)....functionMyA:foo()print('hi')end再次在C++中:...//somehowcreateaninstanceofMyAclassandnamedmyA//How?//Maybetheresultofacallto"MyA()"?do_somethi

c++ - 在 C++ 中是否可以遍历抽象类的所有子类?

我在C++中有一个带有多个子类的抽象类。是否可以通过宏或模板元编程以某种方式做这样的事情:foreachsubclassofBase:mymap[subclass::SOME_CONSTANT]=newsubclass(); 最佳答案 不,你不能。显然,您想要的是一个工厂(或者可能是抽象工厂)。在C++中,您设置工厂类并注册构建器。classFooFactory{public:typedefstd::functionBuilder;///returnstrueiftheregistrationsucceeded,falseother

c++ - std::runtime_error 子类的 "call to deleted constructor of"编译器错误

我从std::runtime_error派生了一个异常类,以便添加对异常流的支持。我收到一个奇怪的编译器错误输出,我不确定如何解决?clang++-std=c++11-stdlib=libc++-g-Wall-I../-I/usr/local/includeMain.cpp-cMain.cpp:43:19:error:calltodeletedconstructorof'EarthException'throwEarthException(__FILE__,__LINE__)^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~../EarthExce

c++ - gdb 打印命令中自静态包含字符串子类的递归输出

各位我正在使用OpenFOAM,它制作了自己的Foam::string和Foam::word类型,如下所示:(gdb)ptypeFoam::wordtype=classFoam::word:publicFoam::string{public:staticpointertypeName;staticintdebug;staticconstFoam::wordnull;private:voidstripInvalid(void);public:word(void);word(constFoam::word&);word(pointer,bool);word(pointer,size_typ

c++ - C++ 子类是否可以共享相同的模板?

子类是否可以共享同一个模板?例如:templateclassA{private:T_aObj;public:classB{public:T_bObj;};};A和B中都可以使用T的地方?当我尝试这样做时,出现以下错误:error:A::Bisnotatemplate 最佳答案 是的,工作正常(在符合标准的编译器上)。为什么这是合乎逻辑的一种思考方式是因为B不仅仅是A的一部分,它是A的一部分!T不仅是A类型的一部分,也为B(它的正确名称是A::B。) 关于c++-C++子类是否可以共享相同

C++ 从父类(super class)调用子类方法

我有以下风格的代码:classSubClass;classSuperClass;classSuperClass{private:voidbar(){SubClass().foo();}};classSubClass:SuperClass{public:voidfoo(){};};所以基本上我有一个父类(superclass),我想从中调用子类的方法foo()。VS2012给我以下错误:错误1​​errorC2514:'SubClass':类没有构造函数。错误2errorC2228:'.foo'的左侧必须有类/结构/union。我想做的事情的正确结构是什么?