我写了一个程序,它使用虚函数来实现多态性。我有一个主要的User类,它盲目地调用它认为是通用对象的方法(尽管它们实际上应该是专门的)。这些对象来自覆盖其基类中的纯虚函数的类。以下改编代码应演示我的设置:BaseConfig.h中的泛型类(BaseConfig):classBaseConfig{public:...virtualvoiddisplay()const=0;...}SpecialConfig.h中上述泛型类(SpecialConfig)的专用版本:classSpecialConfig:publicBaseConfig{public:...voiddisplay()const;
我是ObjectiveC的新手,我想更清楚地理解protocol的概念。@protocolprotocolName@optional@required@end我可以将@optional部分与virtualfunction和@required部分与C++的purevirtualfunction相关联吗?@protocol是Objective-C创建接口(interface)和抽象类的方式吗? 最佳答案 Is@protocoliswayofObjective-Ctocreateinterfaceandabstractclass?没错。C
为什么这段代码structThingComparator{...}staticvoidBlah(set&things){...}...setthings;Blah(things);编译失败并出现以下错误(VisualStudio2010):errorC2664:'Blah':cannotconvertparameter1from'std::set'to'std::set&'我的C++知识显然是有限的,但我希望听到喇叭声宣布多态骑士骑在他可信赖的骏马上,但我只能听到马屁和悲伤的长号:-( 最佳答案 std::set声明asfollow
我从未使用过多重继承,但在最近阅读它时,我开始思考如何在我的代码中实际使用它。当我正常使用多态性时,我通常通过创建声明为基类指针的新派生实例来使用它,例如BaseClass*pObject=newDerivedClass();这样我在派生类上调用虚函数时就能得到正确的多态行为。通过这种方式,我可以拥有不同多态类型的集合,这些类型通过它们的虚函数来管理自己的行为。在考虑使用多重继承时,我在考虑相同的方法,但如果我有以下层次结构,我会怎么做classA{virtualvoidfoo()=0;};classB:publicA{virtualvoidfoo(){//implementation
一个简单的C++问题:是否可以根据指针的运行时类型调用一个或另一个函数?例如我有一个类A,类B是A的子类。我想写一个函数f这样f(A*a){//dosomething}f(B*b){//dosomethingelse}//callf()A*a=newA();A*b=newB();f(a);//dosomethingf(b);//dosomething,butI'dlikeitto"dosomethingelse"额外的精度:A和B是在我的代码中定义和实例化的,所以我不能在A和B上使用带有虚函数的常规多态...我知道你可以使用一些RTTI,但有没有更优雅的解决方案?
简单地说,您如何在C++中为单级继承创建接口(interface)(出于简单性和教学原因)?我看到一些代码没有使用多态性,但是基类包含一个虚拟抽象方法(virtualvoidTheMethod()=0)。现在用纯虚方法从这个抽象类派生出一个类,但是在后面的代码中,使用派生类的实例完全没有动态分配。这是正确的做法吗?使用多态设计推断出的开销又如何呢?我认为这是不可能的。这看起来更像是隐藏/重影基本方法,即使该方法是纯虚拟方法也是如此。稍后编辑:感谢所有设法提供一些好的答案的人,我想强调一个严重的错误,该错误是由于使用“动态分配”而引起的,其含义是强调这一点对象创建的可能性是唯一与多态性兼
我想在子类中存储静态字符串,这样它们就不会在内存中重复。可以这样做吗?我希望能够实例化两个IBM,但只将字符串“IBM”放入内存中一次。classCompany{staticconststd::stringcompany_name;}classCocaColaCompany:publicCompany{staticconststd::stringcompany_name="CocaCola";}classIBM:publicCompany{staticconststd::stringcompany_name="IBM";}或者在多态基类中使用静态成员有问题吗?
自从几年前我发现了CRTP以来,我在很多地方都使用它来为非常密集的面向计算的代码实现编译时多态性。当一个人关心运行时的通用性和最大性能时,以通用方式将成员函数“注入(inject)”到类中是很棒的。我在conceptslite上阅读/观看了几件事这将是(我希望)下一个C++标准的一部分。以更抽象和通用的方式设计功能绝对很棒,避免了我目前使用的SFINAE/std::enable_if的糟糕行。我还没有测试过实现概念的g++分支来玩弄它们,并以一种新的方式研究我喜欢的元编程方法。但也许你们中的一些人有。我的第一个想法是概念不会解决静态多态性的问题,但由于这类事情可能严重依赖技巧,我可能是
如果我想在C++中克隆一个多态对象(即从其他类B派生的类A的实例),最简单的方法似乎是给B一个虚拟克隆成员函数,它必须被覆盖A看起来像这样A*clone(){returnnewA(*this);}我的问题是,我发现这种不必要的样板代码,因为如果想使用C++的运行时多态特性,这几乎总是需要的。如何规避?谢谢为什么我需要这个:我的用例可以抽象为以下示例:我有一个classIntegral,它计算某个函数的积分。这样做,他们有一个成员,它是指向classMathFunction的指针。这个抽象类包含一个纯虚函数evaluate,它接受一个参数。我想实现幂函数,我将创建一个classPowFu
多态性和运算符重载混合在一起了吗?没有指针就无法实现多态性,如thisanswer中所述。而且你不能像解释的那样用指针重载运算符here.所以真的没有办法做到这一点,对吧? 最佳答案 是的。您没有正确阅读答案。这是一个简短的演示:#includeusingnamespacestd;structX{intvalue;virtualvoidoperator+=(intx){value+=x;}};structY:X{virtualvoidoperator+=(intx){value*=x;}};voiddo_stuff(X&x){x+=