首页 / 知识
关于继承:C ++派生类问题
2023-04-16 21:48:00

C++ Derived Class problems我正在用C ++进行游戏,派生类遇到了问题。 我有一个称为GameScreen的基类,该基类具有无声明的虚空draw()函数。 我也有一个名为MenuScreen的派生类,它也有一个虚拟的void draw()函数,还有一个从MenuScreen的名为TestMenu的派生类,它也有一个虚空的draw()函数。 在我的程序中,我有一个GameScreens列表,我有一个GameScreen迭代器通过调用每个GameScreens draw()函数来传递。 问题是我已经在GameScreen列表上放置了一个TestMenu对象。 代替迭代器调用TestMenu的draw()函数,而是调用GameScreen类的draw()函数。 有谁知道我怎么能调用TestMenu的draw()函数而不是GameScreen中的那个。 这是函数:
这是我的课程的副本:
如果gsScreens是对象列表而不是指针列表(如代码所示),那么您将不会存储您认为存储在其中的内容。 发生的事情是-您实际上是在使用编译器生成的复制构造函数构造一个新的MenuScreen并将此MenuScreen放入列表中,而不是将TestMenu放入列表中。 C ++通过指针是多态的,因此,如果没有指针,您将不会得到多态的行为。
为了获得您要遵循的多态行为,同时使用 例如:
Boost(www.boost.org,我建议使用C ++进行编码的任何人都建议使用的库)提供了一个不可复制的基类,可以做到这一点。您不需要那种丑陋的宏。 Curt是绝对正确的,但是我想向它提供更多信息。 这个问题(存储基类对象,而不是指针)有时被称为"切片"。 另外,我倾向于使用以下宏:
然后将其放在类定义中的某个位置:
如果另一个类尝试复制该对象,则会出现编译器错误(因为方法被声明为私有)。如果类本身尝试复制对象,则会收到链接器错误(因为这些方法没有实现)。 |
最新内容
相关内容
linux调用函数的命令?
linux调用函数的命令?,系统,代码,策略,上调,时间,设计,通信,网络,设备,项目,如何在Linux内核里增加一个系统调用?在一个进程中创建3个线程,名字linux命令和库函数?
linux命令和库函数?,系统,标准,管理,地址,服务,库函数,环境,平台,第一,状态,1.linux系统调用和库函数调用的区别系统调用和库函数在执行的效果linux查看函数命令?
linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,linux下有没有像查看函数那样直接使用man命令来查看结构体的命令?这调用函数命令linux?
调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎么调用system函数,使用Android的linux命令1、int system(const chlinux查询函数命令?
linux查询函数命令?,系统,信息,名称,标准,函数,百度,代码,名字,最新,实时,Linux下查找一个函数在哪个库文件中1、默认状态下,gcc并不搜索数学库深入理解python函数传参机制
深入理解python函数传参机制,培训,对象,函数,变量,类型,复本,下面,操作,机制,内存,首先需要申明的一点是,python里是没有像C和C++里那样按值传Python中的匿名函数lambda
Python中的匿名函数lambda,代码,地方,名字,主体,名称,培训,函数,表达式,赋值,语句,简述除了def语句之外,Python还提供了一种生成函数对象的表Python有哪些常用函数?
Python有哪些常用函数?,数据,函数,地址,数字,培训,工作,网络,位置,字符串,字符,Python常用函数有哪些?我想大家都比较好奇这个问题,今天小编特python的filter,lambda函数表达式
python的filter,lambda函数表达式,代码,函数,名称,培训,列表,参数,知识点,表达式,约数,元素,filter(functionorNone,sequence),其中sequence可python字符串处理函数大总结
python字符串处理函数大总结,位置,数字,异常,培训,字符串,空格,长度,两边,字母,函数,str=pythonStringfunction生成字符串变量str=pythonStriPython列表操作的函数和方法
Python列表操作的函数和方法,位置,培训,列表,元素,操作,函数,末尾,方法,对象,以下,·Python列表操作包含以下函数:1、cmp(list1,list2):比较两python中文件操作的一些函数
python中文件操作的一些函数,培训,文件,函数,模式,操作,序列,二进制文件,标识符,列表,括号,文件操作的所有函数:注意python2与3有些函数的用法