书上关于虚函数的这段话该怎么理解呢?

bfgr911 2013-08-21 02:40:09
如果声明了某个成员为虚函数。则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。
上面的都能明白,关键是下面这段话:
在以该类为基类的派生类中,也不能出现这种同名函数。---这是什么意思啊?
父类定义一个虚函数:
virtual void run(){cout<<"aaaa";}
在子类中不定义一个同名函数怎么实现多态性啊?
...全文
130 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2013-08-22
  • 打赏
  • 举报
回复
引用 楼主 bfgr911 的回复:
如果声明了某个成员为虚函数。则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。 上面的都能明白,关键是下面这段话: 在以该类为基类的派生类中,也不能出现这种同名函数。---这是什么意思啊? 父类定义一个虚函数: virtual void run(){cout<<"aaaa";} 在子类中不定义一个同名函数怎么实现多态性啊?
如果声明了某个成员为虚函数。则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。 感觉这句话完全是废话, 就算不是虚函数, 也不能定义同名同参同返回值的呀, 会引起重定义. 并且在派生类中, virtual关键字本来就可以省略掉, 只要在基类中, 有同名同参同反回值的虚函数, 那么派生类中的那个函数自然就是虚函数了, 不管其有没有virtual关键字.
ri_aje 2013-08-22
  • 打赏
  • 举报
回复
这书讲的是够晕的。子类中当然可以出现“成员函数同名并且返回值、参数个数、类型都相同的”的,因为这就是多态的实现方法啊。唯一需要注意的是,子类中这样的函数,无论是否声明为 virtual,都将视同为 virtual 的,override 基类的函数。
DoDoMouse 2013-08-21
  • 打赏
  • 举报
回复
这个同名函数指的是名字一样,但签名不一样的函数吧(比如参数不一样等),否则不能实现多态
kusanagiya 2013-08-21
  • 打赏
  • 举报
回复
子类中要定义相同函数签名的函数才能是多态,仅仅只是函数名相同的话会产生函数隐藏的问题
大尾巴猫 2013-08-21
  • 打赏
  • 举报
回复
如果声明了某个成员为虚函数。则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。 virtual void run(){cout<<"aaaa";} 在子类中不定义一个同名函数怎么实现多态性啊? ------------------------------- 所以你要定义一个同名同参同返回值的虚函数

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧