草庐IT

Inheritance

全部标签

c++ - 如何检查继承类的指针?

假设我们有两个类:多态类A和继承自类A的类B。如何检查类A的指针是否指向类B的对象? 最佳答案 假设runtimetypeinformation(RTTI)已启用,您可以使用dynamic_cast将指针转换为B*,然后查看是否返回非空值:A*ptr=...//somepointerif(dynamic_cast(ptr)){//ptrpointstoanobjectoftypeBoranytypederivedfromB.}另一种方法是使用typeid:if(typeid(*ptr)==typeid(B)){//ptrpoints

c++ - 如何在初始化时仅针对特定对象继承和更改类?

在Java中,可以在初始化时仅针对特定对象修改类结构:Carford=newCar(){publicfloatprice;};因此,ford对象获得了一个称为价格的新属性,而其他汽车则没有。有没有一种方法可以在C++中获得类似的功能,而无需创建整个子类?谢谢! 最佳答案 在C++中不可以,您不能按照您提到的方式进行操作。您可以使用匿名类来满足您的要求。classcar{public:voidtest(){coutLivecode 关于c++-如何在初始化时仅针对特定对象继承和更改类?,我

C++ 多重继承,基类派生自同一个类

我在尝试重用来自不同类的代码时偶然发现了一个问题。我把它贴在这里,希望你们中的一些人能够帮助我。我有一组类(B,C)派生自同一个类(A),它强制执行某些方法(foo,run)。B类实现了这些方法,B类和C类都提供了其他方法:#includetemplateclassA{public:A(){}virtual~A(){}virtualvoidfoo()const=0;//forceimplementationofthisfunctionvirtualvoidrun()const=0;//forceimplementationofthisfunction};templateclassB:p

c++ - 继承的构造函数不工作 | C++

我的基类位于Employee.h中,这是构造函数的代码。Employee(stringFname="FirstNamenotSet.",stringLname="LastNamenotSet.");这是Employee.cpp的代码Employee::Employee(stringFname="FirstNamenotSet.",stringLname="LastNamenotSet."):FirstName(Fname),LastName(Lname){}问题出在我的两个构造函数上,它说它们的参数有误,但我不确定它们出了什么问题。经理.hclassManager:publicEmpl

c++ - 派生自模板基类的模板构造函数

只是好奇,是否有可能从模板类继承并在派生类的构造函数中调用基类的构造函数,该基类也是模板化的并且没有参数可从中推断其类型?templatestructBase{templateBase(){//noargumentoftypeDtoinferfromstatic_assert(std::is_same::value,"");}};structDerived:Base{Derived():Base::Base(){}//isthereawaytowriteitcorrectly?};在我的特定情况下,我可以用模板方法替换模板构造函数,但这仍然是一个关于语言灵active的有趣问题。

c++ - 您是否需要从所有派生类调用虚拟基类构造函数?即使它们不是最衍生的?

我在多重继承和菱形问题上遇到了麻烦。出现问题是因为我的基类构造函数需要一个参数。编译器尝试为我的两个抽象类生成默认构造函数,但失败了,因为默认构造函数无法确定基类的参数。我不明白为什么我的抽象类要调用基本构造函数。我认为最派生的类是调用虚拟基类构造函数的类。这是重现我所说内容的代码:classVirtualBase{public:VirtualBase(intinitial):count(initial){}intgetCount()const{returncount;}voidincrement(){count++;}private:intcount;};classContractA

c++ - 模板继承和基本成员变量

我在尝试使用模板继承时遇到一个奇怪的错误。这是我的代码:templateclassA{public:inta{2};A(){};};templateclassB:publicA{public:B():A(){};voidtest(){std::cout这是错误:error:useofundeclaredidentifier'a';didyoumean'std::uniform_int_distribution::a'?voidtest(){std::cout如果它可能会影响某些东西,我会使用这些标志:-Wall-g-std=c++11我真的不知道哪里出了问题,因为与没有模板的纯类相同的

c++ - 强制接口(interface)的模板

是否可以创建一个模板来接受实现特定接口(interface)的类型?例如,我想对模板用户说:你可以在我的容器中存储任何东西,只要它实现了Init()和Destroy()方法。谢谢 最佳答案 BoostConceptChecklibrary提供了概念的C++0x功能的有限子集(有意但遗憾地被砍掉了)。.您可以通过创建conceptcheckclass来利用它用于您所需的界面。 关于c++-强制接口(interface)的模板,我们在StackOverflow上找到一个类似的问题:

c++ - 如何分配/检索基类?

假设我有:classFoo{...};classBar:publicFoo{...};Foofoo;Barbar;有没有办法做到以下几点:foo_part_of_bar(bar)=foo;foo=foo_part_of_bar(bar);?谢谢! 最佳答案 假设您的意思是classBar:publicFoo,下面的代码应该可以工作。对于foo_part_of_bar(bar)=foo;*(static_cast(&bar))=foo;对于foo=foo_part_of_bar(bar);foo=bar;

c++ - 在派生构造函数中访问基本成员时出现问题

给定以下类:classFoo{structBarBC{protected:BarBC(uint32_taKey):mKey(aKey)mOtherKey(0)public:constuint32_tmKey;constuint32_tmOtherKey;};structBar:publicBarBC{Bar(uint32_taKey,uint32_taOtherKey):BarBC(aKey),mOtherKey(aOtherKey)//Compileerrorhere};};我在指示的位置遇到编译错误:error:class`Foo::Bar'doesnothaveanyfieldn