草庐IT

【C++】多态

全部标签

c++ - 散列多态类型的正确方法

我有一个使用HowardHinnant'smethod实现的哈希过程(基于hash_append重载的通用哈希)。该方法的目的是创建类的散列,以便“记住”计算结果(请参阅本答案的末尾),所以我遇到了一些问题。特别是,考虑以下可能需要散列的Input类:structA{virtualintdo_stuff()const=0;virtual~A();};structB:A{intdo_stuff()constoverride{return0;}};structC:A{constintu;intdo_stuff()constoverride{returnu;}};structInput{Ac

c++ - 我如何将多态属性与 boost::spirit::qi 解析器一起使用?

我希望我的基于boost::spirit的解析器能够解析文件,将解析的规则转换为不同的类型,并发出一个包含它找到的所有匹配项的vector。所有作为属性发出的类型都应该从基类型继承,例如:#include#include#include#includestructCommandBase{virtualvoidcommandAction(){std::coutvalueB;virtualvoidcommandAction(){std::coutlabelName;std::vector>commands;virtualvoidcommandAction(){std::coutc,comm

c++ - 防止实例化不是多态 C++ 的基类

我有一个非多态的基类,但我想阻止它被实例化。我应该给这个基类一个纯虚析构函数来防止它被实例化吗?但是给非多态基类一个虚析构函数是错误的还是不好的做法? 最佳答案 为防止基类被实例化,使所有构造函数都受到保护。 关于c++-防止实例化不是多态C++的基类,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/31537002/

c++ - 如果我需要多态性,我应该使用原始指针而不是 unique_ptr 吗?

如果我需要多态性,我应该使用原始指针而不是unique_ptr吗?我看到一些线程显示如何使用unique_ptr进行多态行为。我不确定这是否值得,我宁愿使用原始指针。您能否对此发表评论,您对这种情况下原始指针与智能指针的看法? 最佳答案 下面的简单代码表明std::unique_ptr从多态性的角度来看工作得很好,打印"HellofromDerived."。#include#includeusingstd::cout;structBase{virtual~Base(){}virtualvoidSayHello(){coutpBase

c++ - boost::变体和多态性

如果我将orignally指针指向派生类,我想从boost变体获取指向基类的指针。有什么办法可以做到这一点。以下代码不起作用。classA{public:virtual~A(){}};classB:publicA{};typedefboost::variantMyVar;MyVarvar=newB;A*a=boost::get(var);//thefollowinglinethrowsexception也许有人知道如何编写我自己的get函数,该函数将测试请求的类型是否是变体中存储类型的基类,然后进行适当的转换 最佳答案 您可以使用模

c++ - 如何覆盖多态性的运算符

任何人都可以向我解释我在这里做错了什么吗?structX{intx{};explicitX(intx):x(x){}virtualX&operator++()=0;};structOK:X{intok{};explicitOK(intok):X(ok),ok(ok){}X&operator++()override{ok+=10;return*this;}};structMU:X{intmu{};explicitMU(intmu):X(mu),mu(mu){}X&operator++()override{mu*=5;return*this;}};intmain(){X*x_base=ne

c++ - 多态性c++

有些书上写着声明或继承虚函数的类称为多态类。B类没有任何虚函数,但通过了多个is-a测试。C类有一个虚函数但不继承。classA{};classB:publicA{};classC{public:virtualvoidf(){}};B类还是C类是多态的? 最佳答案 2003:10.3/1明确指出:Aclassthatdeclaresorinheritsavirtualfunctioniscalledapolymorphicclass.你自己一个字一个字的说,所以我不太明白问题是什么。C(及其后代,如果添加的话)是多态的;A和B不是。

c++ - 数据成员的编译时多态性

在下面的代码中,initialize()说明了一种基于编译时多态性的方法。initialize()的版本编译依赖int2type和int2type,对于给定的模板参数,其中只有一个为真T.恰好数据成员T*m_datum;将适用于int2type和int2type.现在,我想更改int2type版本为std::vectorm_datum;,所以我的问题是,如何修改我的代码,以便数据成员m_datum在int2type上是多态的?注意:请忽略下面代码背后的基本原理-相反,我想专注于为数据成员实现编译时多态性的机制。#include#includeusingnamespacestd;temp

c++ - 成员变量多态性和引用参数

我是C++新手,对成员变量多态性有疑问。我有以下类定义-classCar{public:Car();virtualintgetNumberOfDoors(){return4;}};classThreeDoorCar:publicCar{public:ThreeDoorCar();intgetNumberOfDoors(){return3;}};classCarPrinter{public:CarPrinter(constCar&car);voidprintNumberOfDoors();protected:Carcar_;};和实现#include"Car.h"Car::Car(){}

c++ - 多态性和指向数组的指针

这个问题在这里已经有了答案:Whydoesthiscodecrashattheplacesmentioned?(7个答案)关闭8年前。我有一个A类:classA{public:virtualdoublegetValue()=0;}还有一个B类:classB:publicA{public:virtualdoublegetValue(){return0.0;}}然后在main()中我做:A*var;var=newB[100];std::cout如果我这样做:B*var;var=newB[100];std::cout一切都可以正常编译,但似乎我的多态性似乎有问题?我很困惑。