请教一个虚函数的问题

myjsy 2009-10-01 01:47:42
基类中有一个虚函数,与子类中的一个函数的名称,参数,个数全同,就是返回类型不同,子类是虚函数吗?
书上说,基类与子类中的函数只有类型与参数个数完全相同,子类的函数才是虚函数,但是我不知是否包括函数的返回类型。

比如基类:
virtual int fun(int,float);

子类:
float fun(int,float);

这种情况,子为是基类的虚函数吗?
...全文
85 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzx714 2009-10-01
  • 打赏
  • 举报
回复
gcc编译提示返回类型冲突
yzx714 2009-10-01
  • 打赏
  • 举报
回复
lz自己实验一下不就知道了?
gamedragon 2009-10-01
  • 打赏
  • 举报
回复
C++命名是结合了作用域,名字和参数,没有考虑返回值。
比如
int a(int m);
float a(int m);
那么当你这样使用的时候
double k = a(1);
这时编译器如何去判断到底是哪个函数被调用?

因此,一个函数作用域,名字和参数都一致就认为是同一个函数,如果返回值不同,编译器肯定会报错。

至于虚函数,如果父类有一个除了作用域,名字和参数都一致的虚函数,那么就认为子类的这个函数是虚函数。如果返回值不同,应该报错。
myjsy 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fox000002 的回复:]
这样的代码本身就是错的,再讨论也没多少意义
[/Quote]
我知道一般这样也没有意义,一般不会这么写的,我就是想了解一下,虚函数是如何规定的,
从理论上,这种情况算不算虚函数。
oyster2008 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 myjsy 的回复:]
基类中有一个虚函数,与子类中的一个函数的名称,参数,个数全同,就是返回类型不同,子类是虚函数吗?
书上说,基类与子类中的函数只有类型与参数个数完全相同,子类的函数才是虚函数,但是我不知是否包括函数的返回类型。

比如基类:
virtual int fun(int,float);

子类:
float fun(int,float);

这种情况,子为是基类的虚函数吗?
[/Quote]
你这个不算,只有在返回值类型是指向类对象的指针或者引用时,返回值参数才可以不一样
比如Base中定义函数
virtual Base*func();
而Derived中定义函数
Derived*func();
那么func就是改写了基类中的func
stjay 2009-10-01
  • 打赏
  • 举报
回复
严格来说虚函数要函数名,参数,返回类型都相同
但貌似C++标准 允许 返回类型可以不同
具体要编译器的支持
fox000002 2009-10-01
  • 打赏
  • 举报
回复
这样的代码本身就是错的,再讨论也没多少意义
myjsy 2009-10-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 woaichengdian 的回复:]
算吧
[/Quote]
确认吗?这两个函数的返回类型可是不同呀,一个是int,一个是float型,
我问的就是这个问题!
woaichengdian 2009-10-01
  • 打赏
  • 举报
回复
算吧

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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