不用指针或引用也能调用虚函数?

king_water 2009-09-03 08:55:53
class A
{
public:
/*virtual*/ void fun () { cout << "A"; }
void xxx ( void ) { fun(); }
};

class B: public A
{
public:
void fun () { cout << "B" ; }

}b;


void main()
{
b.xxx(); //虚函数时输出"B", 否则输出"A"

}

代码如上,书上不都是说只能指针,引用虚函数才起作用?
虚函数是不是还有别的作用
...全文
392 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天御剑流 2009-09-03
  • 打赏
  • 举报
回复
代码如上,书上不都是说只能指针,引用虚函数才起作用?
虚函数是不是还有别的作用
--------------------------------------------
很多书的确都用指针和引用来解释虚方法,但不可由此造成虚方法是用于指针或引用的,你只要记住,虚方法是根据对象的类型来选择的就行了。
taodm 2009-09-03
  • 打赏
  • 举报
回复
呃,多动动脑子,把多个知识点串起来。
再认真自己看看自己发的主标题。
king_water 2009-09-03
  • 打赏
  • 举报
回复
普通函数:

b.xxx()

xxx里面的this应该是B的吧,this->fun();应该是b啊
yaohua1210 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tugouxp 的回复:]
引用 3 楼 taodm 的回复:
呃,楼主看书实在实在实在实在不够认真。
都没看到在成员函数内部再调其它成员函数或者成员变量,都默认加有this指针。

对的。
[/Quote]
whg01 2009-09-03
  • 打赏
  • 举报
回复
3楼正解。
papaofdoudou 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 taodm 的回复:]
呃,楼主看书实在实在实在实在不够认真。
都没看到在成员函数内部再调其它成员函数或者成员变量,都默认加有this指针。
[/Quote]
对的。
rejoice914 2009-09-03
  • 打赏
  • 举报
回复
额,我回答错误了!答非所问!
taodm 2009-09-03
  • 打赏
  • 举报
回复
呃,楼主看书实在实在实在实在不够认真。
都没看到在成员函数内部再调其它成员函数或者成员变量,都默认加有this指针。
rejoice914 2009-09-03
  • 打赏
  • 举报
回复
如果没有virtual。实现的是函数的隐藏
b.xxx
调用A中的函数xxx,xxx实现的基类A中的fun

如果加了virtual。实现的是函数的多态,即覆盖
注意重载,覆盖,隐藏的区别!

下面是引用别人的!
1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。



fox000002 2009-09-03
  • 打赏
  • 举报
回复
书上不都是说只能指针,引用虚函数才起作用

lz 信错书了

找本标准点教材吧

64,654

社区成员

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

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