草庐IT

c++ - 苹果、橘子和指向最派生的 c++ 类的指针

假设我有一堆水果:classFruit{...};classApple:publicFruit{...};classOrange:publicFruit{...};以及一些对所述水果进行​​操作的多态函数:voidEat(Fruit*f,Pesticide*p){...}voidEat(Apple*f,Pesticide*p){ingest(f,p);}voidEat(Orange*f,Pesticide*p){peel(f,p);ingest(f,p);}好的,等等。停在那儿。请注意,任何理智的人都会将Eat()设为Fruit类的虚拟成员函数。但这不是一个选择,因为我不是一个理智的人

c++ - 从派生构造函数调用基类方法

classBase{public:Base(){}voidFoo(intx){...}};classDerived:publicBase{public:Derived(intargs){/*processargsinsomeway*/Foo(result);}};是否允许在派生类的构造函数中调用基类的方法?我想这很好,因为应该完全构造Base对象,但我想检查一下以防万一。 最佳答案 Isitallowedtocallamethodofthebaseclassintheconstructorofthederivedclass?是的。请

c++ - 如何使用 reinterpret_cast 转换为 C++ 中的派生类指针

这是我的测试示例:structbase{virtual~base(){}intx;};structderived:publicvirtualbase{base*clone(){returnnewderived;}derived():s("a"){}std::strings;};intmain(){derivedd;base*b=d.clone();derived*t=reinterpret_cast(b);std::couts它在我打印s的那一行崩溃了。由于“b”是指向派生类的指针,因此reinterpret_cast应该可以正常工作。我想知道为什么它会崩溃。同时,如果我用dynami

c++ - protected 成员在派生类中不可访问

为什么基类中的protected成员在派生类中无法访问?classClassA{public:intpublicmemberA;protected:intprotectedmemberA;private:intprivatememberA;ClassA();};classClassB:publicClassA{};intmain(){ClassBb;b.protectedmemberA;//thissaysitisnotaccesible,violation?//.....} 最佳答案 您可以访问protectedmemberAin

C++ - 实例化派生类并使用基类的构造函数

我有一个基类,它的构造函数需要一个参数(字符串)。然后我有一个派生类,它也有自己的构造函数。我想实例化派生类并能够设置基类的构造函数的参数。classBaseClass{public:BaseClass(stringa);};classDerivedClass:publicBaseClass{public:DerivedClass(stringb);};intmain(){DerivedClassabc("Hello");}调用派生类时不知道如何设置基类构造函数的参数。 最佳答案 您有两种可能性-内联:classDerivedCla

使用派生类的 C++ 模板转换

#includestructA{inta;};structB:publicA{charb;};intmain(){Bb;typedefstd::pairMyPair;std::vectorv;v.push_back(std::make_pair(&b,&b));//compilererrorshouldbehere(pair)return0;}我不明白为什么会这样编译(也许有人可以提供详细的解释?它与名称查找有关吗?顺便说一句,在Solaris上,SunStudio12无法编译:error:formalargumentxoftypeconststd::pair&incalltostd:

c++ - 空基类是否会影响派生类的布局?

C++标准(引用自n3242草案)关于子对象[intro.object]的说明如下:Unlessanobjectisabit-fieldorabaseclasssubobjectofzerosize,theaddressofthatobjectistheaddressofthefirstbyteitoccupies.Twodistinctobjectsthatareneitherbit-fieldsnorbaseclasssubobjectsofzerosizeshallhavedistinctaddresses.现在,给定以下片段:structempty{};structmember

c++ - 递增指向派生类的指针

我正在为指向派生类的指针编写一个程序。这是我的代码,#includeusingnamespacestd;classbase{inti;public:voidset_i(intnum){i=num;}intget_i(){returni;}};classderived:publicbase{intj;public:voidset_j(intnum){j=num;}intget_j(){returnj;}};intmain(){base*bp;derivedd[2];bp=d;d[0].set_i(1);d[1].set_i(2);coutget_i()get_i();return0;}程

c++ - 有没有一种方法可以在不创建该类实例的情况下获取 QObject 派生类的类名?

我正在寻找这样的东西:MyClass::metaObject()->className()这是行不通的,因为在执行这段代码的地方,不存在MyClass的实例化。如果这在某种程度上是可能的,是否有办法获取从MyClass派生的类的所有名称? 最佳答案 使用staticmetaobject:MyClass::staticMetaObject.className()有效! 关于c++-有没有一种方法可以在不创建该类实例的情况下获取QObject派生类的类名?,我们在StackOverflow上

C++基于变量向下转换为派生类

假设我有一个基类“Shape”和派生类“Triangle”、“Square”和“Circle”。“Shape”的成员是一个int“shapeType”。如果shapeType==1,则为三角形。如果shapeType==2,那么它就是一个正方形。如果shapeType==3,则为圆形。如果有一种方法可以通过使用shapeType值“动态”向下转换为正确的派生类,我很想知道我只有一个曾经是派生对象的“Shape”对象。我知道我可以写一个硬编码的switch语句,大致如下:Triangle*t;Square*s;Circle*c;switch(shape->shapeType){case1