草庐IT

c++ - 通过引用 C++ 中的基类循环遍历派生类

不好意思,如果之前有人问过这个问题,刚学C++,搜索了一下,不知道关键字是什么。可以这样做吗?classCar{public:voidaddColor(stringc){color=c;}private:stringcolor;}classHonda:publicCar{}classToyota:publicCar{}intmain(){vectorv;Honda*car1=newHonda();car1.addColor("green");Toyota*car2=newToyota();car2.addColor("blue");v.push_back(car1);v.push_ba

C++如何访问派生类中的基类静态成员?

我是C++静态变量的新手。我不知道如何从派生类成员函数访问base的静态成员。示例#includeclassbase//baseclass{protected:staticintvalue;};intbase::value=0;//staticvariableinitalizationclassderived:publicbase{public:get_variable();};我知道静态变量是一个类变量。我们只能使用未与对象绑定(bind)的类名来访问(如果我错了请纠正我)。我的问题是如何在成员函数中访问静态变量派生类get_varible访问静态变量?

c++ - 为什么抽象派生类需要初始化一个虚基类?

这个问题在这里已经有了答案:Inanabstractclassconstructor,whyIdoneedtocallaconstructorofavirtualbasethatwillnevertocalled?(1个回答)关闭7年前。请看下面的代码:structObject;structComponent{Component(Object*obj){}};structRenderable:publicvirtualComponent{virtualvoidRender()=0;};structAnimationRenderer:publicRenderable{AnimationR

c++ - 当派生类中存在另一个重载时无法调用基类的方法

编译以下代码时出现编译器错误“函数不接受0个参数”。classA{public:intFoo(){return1;}protected:virtualvoidFoo(int&n){n+=1;}};classB:publicA{protected://OverrideofAvoidFoo(int&n){n+=2;}};intmain(intargc,char*argv[]){Bb;intn=b.Foo();returnn;}看起来编译器坚持调用重载B::Foo(int&)而不是A::Foo()。我一定在这里遗漏了一些明显的东西。任何指向解释编译器行为的C++标准的指针都将受到赞赏。我确实

c++ - 使用模板基类的模板函数声明

我想使用基类的模板函数,像这样:structA{templatestaticautof(){\*code*\}};templatestructB:publicA_type{usingA_type::f;voidg(){auton=f();}};但是这不会编译。error:expected'('forfunction-stylecastortypeconstructionvoidg(){auton=f();}~~~^error:expectedexpressionvoidg(){auton=f();}但是直接引用基类而不是模板是可行的:structA{templatestaticauto

C++ - 替代基类函数指针调用

我发现很多帖子都非常清楚地说明派生类函数不能被分配给基类函数指针。所以我想知道如何处理和解决以下情况:假设我有以下基类classbase{protected:typedefvoid(base::*base_fp)();typedefstd::maparray;arrayassociativeArray;};这个类的主要目的是拥有一个“associative-arrayoffunctions”属性。所以我想要的是每个派生的child都能够将他们的方法添加到“associativeArray”this->associativeArray["Method"]=&child::method;/

c++ - 将信号连接到基类构造函数中的纯虚拟插槽是否安全?

我问自己下面的代码是否安全:#include#include#include#includeclassBase:publicQObject{Q_OBJECTpublic:Base(){//isitsafetodothat?connect(this,SIGNAL(signal1()),this,SLOT(slot1()));}virtual~Base(){}signals:voidsignal1();publicslots:virtualvoidslot1()=0;//couldbeonlyvirtual};classDerived:publicBase{Q_OBJECTpublicsl

c++ - VC++ 构建 directshow 基类

我是DirectXSDK、PlatfromSDK和DirectShow的新手。我下载了最新的PlatformSDK和DirectXSDKAugust'09。我试图在文件夹中构建示例项目:MicrosoftPlatformSDK\Samples\Multimedia\DirectShow\Capture\PlayCap\并且有以下构建错误:LINK:fatalerrorLNK1181:cannotopeninputfile'D:\ProgramFiles\MicrosoftPlatformSDK\samples\multimedia\directshow\baseclasses\WIN2

c++ - 使用引用基类成员模板的声明。

谁能解释一下"Ausing-declarationinaderivedclasscannotrefertoaspecializationofatemplateconversionfunctioninabaseclass."它来自ISOC++标准..14.5.2,第7点 最佳答案 这意味着这是错误的:structA{templateoperatorT();};structB:A{usingA::operatorint;};//ill-formed:referstospecialization同样适用于其他函数模板特化(不仅是转换函数)

c++ - C++ 中的通用访问者基类模板 - 重载问题

我认为编写通用访问者基类模板会是一个简单的练习。目标是能够写typedefvisitormy_visitor;...然后让my_visitor成为功能上等同于的类型structmy_visitor{virtualvoidvisit(some_base&){}virtualvoidvisit(some_derived1&){}virtualvoidvisit(some_derived2&){}};我可以继承该类型层次结构的实际有用的派生访问者类,它根据需要覆盖不同的visit()版本。我希望它适用于具有任何继承关系的任意数量的类型,并且我不想使用任何使用type_info比较重新实现虚函