草庐IT

c++ - 这是对多态性的适当使用吗?

考虑这个语法正确(?)的伪代码:classEvent{public:virtualintgetID()const=0;virtualintgetSize()=0;virtualvoid*getData()=0;virtualvoidsetData()=0;//(Icannotdefinedataatthislevel'cosIdon'tknowwhatitisyet)}classSpecialEvent:classEvent{public:virtualintgetPGNID()const=0;intgetSourceAddress(){returnsource_address;}in

c++ - 比较优化构建与 switch case 和多态性

我需要对两种解决方案进行性能测试-一种使用多态来执行类型切换,另一种使用switchcase来选择要执行的某些函数。我真的需要优化这段代码。我写了下面的测试用例(你可以简单地复制粘贴代码,用g++-std=c++14-O3编译它并用echo1|./a.out运行它!)如果你读了它,代码真的很简单!#include#include#include#include#include#include#includeusingnamespacestd;structprofiler{std::stringname;std::chrono::high_resolution_clock::time_p

C++多态/继承问题: Redefinition of base functions vs virtual functions

我知道派生类可以简单地“重新定义”基类成员函数,并且当派生类对象的函数是被调用,派生类中定义的函数被使用,但是......这不会使“virtual”关键字变得多余吗?我读过这两种情况之间存在一些明显的显着差异(即:如果你有一个指向派生类的基类指针,你调用一个函数,如果它是虚拟的,则派生类函数将是调用,但如果不调用,将调用基类函数)。换句话说,能够重新定义成员的目的是什么用作非虚拟函数,这是一个常用的练习?就我个人而言,这似乎会变得非常困惑。谢谢! 最佳答案 对于最常见的OOP语言(Java、SmallTalk、Python等),最常

C++ 结合静态和动态多态性来创建 "Hyper Polymorphism"?

通过混合静态和动态多态(模板和继承),我遇到了一种奇怪的技术,其功能类似于C++中的常规静态多态,除了子类的成员在创建新对象后仍然可见。考虑以下示例:基础.h:#includeclassBase{public:virtual~Base(){}virtualvoidsay_hello(){std::coutClass1.h:#include"Base.h"#includeclassClass1:publicBase{public:virtualvoidsay_hello(){std::coutClass2.h:#include"Base.h"#includeclassClass2:pub

C++ dynamic_cast - 多态要求和向下转型

在下面的代码中,同时构造obj在情况1中,我们构造一个derived类对象也是,但其成员函数无法访问obj.因此,在向下转换时(即情况2),使用obj作为来源,我们有构建的derived已经在里面了。为什么obj需要多态吗?如果我上面的描述让你感到困惑,为什么不obj向上转型时需要多态,但向下转型时确实在使用dynamic_cast时需要多态?classbase{public:base(){cout(newderived);//case1:explicitlyupcastingderived*OBJ=dynamic_cast(obj);//case2:error

c++ - 为什么说C++不支持参数多态?

根据ParametricPolymorphism的维基百科页面:Someimplementationsoftypepolymorphismaresuperficiallysimilartoparametricpolymorphismwhilealsointroducingadhocaspects.OneexampleisC++templatespecialization.问题:为什么说C++只实现表面上类似于参数化多态的东西?特别是,模板不就是完全参数化多态性的一个例子吗? 最佳答案 您链接到的文章解释了这一点。您引用的文本实际上给

c++ - 具有 boost 变体的静态多态性单访问者与多访问者与动态多态性

我正在比较以下C++多态性方法的性能:方法[1]。使用boost变体的静态多态性,每个方法都有一个单独的访问者方法[2]。使用boost变体的静态多态性,单个访问者使用方法重载调用不同的方法方法[3]。普通的旧动态多态性平台:-Intelx8664位RedHat现代多核处理器,32GBRAM-gcc(GCC)4.8.1与-O2优化-boost1.6.0一些发现:方法[1]似乎明显优于方法[2]和[3]大多数时候方法[3]优于方法[2]我的问题是,为什么方法[2]在我使用访问者但使用方法重载调用正确方法的地方比虚拟方法性能差。我希望静态多态性比动态多态性表现得更好。我知道在方法[2]中传

c++ - 按值传递的返回类型多态性

我不确定问题标题是否准确...让我先解释一下我最初的简单场景,然后继续解释我想做什么,但不能做什么。最初,我有类似的东西:classOperand;OperandgenOperandA(){...;returnOperand();}OperandgenOperandB(){...;returnOperand();}...//moreoperand-generationfunctionstypedefOperand(*OpGen)();//TableoffunctionpointersstaticconstOpGengenerators[]={genOperandA,genOperand

C++ 多态性和默认参数

我有这些类(class):classBase{public:virtualvoidfoo(intx=0){printf("X=%d",x);}};classDerived:publicBase{public:virtualvoidfoo(intx=1){printf("X=%d",x);}};当我有:Base*bar=newDerived();bar->foo();我的输出是“X=0”,即使foo是从Derived调用的,但是当我有:Derived*bar=newDerived();bar->foo();我的输出是“X=1”。这种行为是否正确?(从声明类型中选择默认参数值,而不是从实际

c++ - 多重继承和多态问题

考虑这个C++代码:#includeusingnamespacestd;structB{virtualintf(){return1;}intg(){return2;}};structD1:publicB{//(*)intg(){return3;}};structD2:publicB{//(*)virtualintf(){return4;}};structM:publicD1,publicD2{intg(){return5;}};intmain(){Mm;D1*d1=&m;coutf()(m).g()(d1)->g()它打印1225.如果我们进行虚拟继承,即添加virtual之前publ