草庐IT

polymorphism

全部标签

c++ - 继承和多态性——易用性与纯粹性

在一个项目中,我们的团队正在使用对象列表对应该以类似方式处理的数据集执行大量操作。特别是,不同的对象在理想情况下会表现出相同的行为,这很容易通过多态性来实现。我遇到的问题是继承意味着是一种关系,而不是具有关系。例如,几个对象有一个伤害计数器,但为了使其易于在对象列表中使用,可以使用多态性——除非这意味着一个是一个关系不会是真的。(人不是伤害计数器。)我能想到的唯一解决方案是让类的成员在隐式转换时返回正确的对象类型,而不是依赖继承。放弃是一个/有一个的理想以换取编程的便利会更好吗?编辑:更具体地说,我正在使用C++,因此使用多态性将允许不同的对象在派生类可以驻留在单个列表中并由基类的虚函

java - 什么是泛型的 C++ 等价物?

假设我正在实现一个可以接受任何类型数据的多态树数据结构...TreeorTreeorTree但我正在用C++实现它....我如何指定树可以包含类似于Java中的泛型的任意类型还有C++中Java的Object对象的等价物,C++中的所有对象都继承Object 最佳答案 与Java的泛型最接近的等价物是C++中的模板。如果严格来说,它本身并不等同。但这就是你在C++中所拥有的。因此,为了满足您的需要,您需要做一些工作,以便可以用C++编写等效代码。以下是一些比较C++模板与Java泛型的文章的链接:JavaGenericsandC++

c++ - 没有任何功能的 C++ 多态类是否可能?

我正在尝试创建一些只包含数据成员(没有函数)的类,但我希望它们是多态的——我的意思是我将通过指向基类的指针来传递对象,我需要将它们dynamic_cast为特定派生类型的能力(如果实例不是给定类型,则结果值为NULL。)例如,我有一个项目:structItem{intx,y;}我还有一个移动的项目,另一个包含文本的项目:structMovingItem:virtualpublicItem{intspeedX,speedY;}structTextItem:virtualpublicItem{std::stringtext;}大概我必须在上面使用虚拟继承,因为我还想要一个可以移动并有文本的

c++ - 专业面试的意外答案

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion这是一个100%的理论问题,可能基于观点。在一次专业面试中,我得到了一个打印页面,其中包含两个类的大量编写糟糕且格式不正确的代码,以便在演讲中逐行分析它们。我们称这些数据结构为A和B。没有关于预期行为的问题陈述或任何信息。但是他们的一个问题真的让我很生气。在识别出算法的可疑行为以及许多潜在和实际错误后,他们让我再识别一个错误。我发现了其他几个明显的问题,但我没有弄清楚他们想从我这里得到什么

c++ - 是否可以拥有来自同一基类的不同对象的数组?

我正在尝试为游戏设计武器类别。这是我为满足我的需要而编写的一些代码:classweapon{public:intfireRate;intbulletDamage;intrange;ofImagesprite;ofImagebulletSprite;bulletbullets[50];intactiveBullet;public:voidfire();};classmachineGun:publicweapon{public:voidfire();};classflamer:publicweapon{public:voidfire();};然后我想像这样定义一个武器数组://Weapon

c++ - C++ 中的编译时多态性与运行时多态性的优点/缺点

在C++中,当可以使用运行时(子类、虚函数)或编译时(模板、函数重载)多态性实现相同的功能时,您为什么要选择其中之一?我认为编译时多态性的编译代码会更大(为模板类型创建更多方法/类定义),并且编译时会给你更多的灵active,而运行时会给你“更安全”的多态性(即更难被意外错误使用)。我的假设是否正确?还有其他优点/缺点吗?谁能举一个具体的例子,说明两者都是可行的选择,但其中一个显然是更好的选择?此外,编译时多态性是否会产生更快的代码,因为不必通过vtable调用函数,或者这是否会被编译器优化掉?例子:classBase{virtualvoidprint()=0;}classDerive

c++ - 多态性和 shared_ptr 成员

测试多态性&虚函数&shared_ptr,我试图理解以下最小示例描述的情况。classB{public://DefinitionofclassBvirtualvoidsomeBMethod(){//Makeaburger};};classC:publicB{public://DefinitionofclassCvoidsomeBMethod(){//Makeapizza};};classA{public:A(B&SomeB):Member(std::make_shared(SomeB)){};std::shared_ptrMember;};现在,我们基本上可以拥有intmain(){C

C++ 虚拟类 : interesting point

请告诉我为什么以下程序的输出如下所示。我没有得到C++中的虚拟类。观察下面的代码:classB{public:B(charc='a'):m_c(c){}public:charget_c()const{returnm_c;}voidset_c(charc){m_c=c;}private:charm_c;};classC:publicB{};classD:publicB{};classE:publicC,publicD{};intmain(){Ee;C&c=e;D&d=e;std::coutO/P:aa我希望输出是ab。获得“aa”的原因是什么?如果我有c.set_c('b')而不是d.s

c++ - CRTP 静态多态性 : Using the Base Class to Call Derived Methods

C++中virtual的主要好处之一是能够使用基类(指针或引用)调用派生方法。我正在阅读usingCRTPtoimplementstaticpolymorphism,但我不明白如何使用这种技术实现上面提到的内容,因为当需要模板时,我无法将函数声明为采用Base类型。在我看来,文章中描述的内容可以通过简单地使用函数重载来实现,所以我确信这种技术一定有更多。(PS:在对thisquestion的回答的评论中提到了这个确切的问题,但不幸的是没有人回复它:“vtables真正提供的是使用基类(指针或引用)来调用派生方法。你应该在这里展示它是如何用CRTP完成的。”)这是我的最小代码,它给出了错

c++ - 确定多态 C++ 类的大小

使用sizeof运算符,我可以确定任何类型的大小——但我如何在运行时动态确定多态类的大小?例如,我有一个指向Animal的指针,我想得到它指向的实际对象的大小,如果它是Cat就会不同或Dog.有没有一种简单的方法可以做到这一点,而不是创建一个虚拟方法Animal::size并重载它以返回sizeof每种特定类型? 最佳答案 如果您知道可能的类型集,则可以使用RTTI通过执行dynamic_cast找出动态类型。如果不这样做,唯一的方法就是通过虚函数。 关于c++-确定多态C++类的大小,