虚函数调用时一点注意,调用基类函数时调用派生类函数

虚函数演示
本文通过两个示例对比展示了虚函数在C++中如何实现多态。第一个示例中,派生类对象通过基类指针调用成员函数时,未使用虚函数导致调用了基类的实现;而在第二个示例中,通过将基类成员函数声明为虚函数,实现了运行时的多态,即调用了派生类的实现。

一般的认为,虚机制发生在对象调用时,其实不然,只要能用到之时,他便会出现!在调用基类函数的时候,如果基类调用了一个虚函数,同样虚机制也会产生效果!

看一个程序,没有virtual的情况:

#include<iostream>
usingnamespacestd;

classBase...{
public:
Base()
...{}
virtual~Base()...{}

public:
voidprint(void)...{
cout
<<"Base! ";
}

voidget(void)...{
print();
}

}
;

classdevined:publicBase...{
public:
devined()
...{}
~devined()...{}

public:
voidprint(void)...{
cout
<<"Devined! ";
}

}
;

intmain()
...{
devined
*a=newdevined;
a
->get();
return0;
}


明显输出调用基类的print()函数。结果:Base!

再看虚函数的使用!

#include<iostream>
usingnamespacestd;

classBase{
public:
Base(){}
virtual
~Base(){}

public:
virtualvoid
print(void){
cout
<<"Base! ";
}
voidget(void){
print();
}
};

classdevined:publicBase{
public:
devined(){}
~devined(){}

public:
virtualvoid
print(void){
cout
<<"Devined! ";
}
};

intmain()
{
devined
*a=newdevined;
a
->get();
return0;
}

即便是调用的基类函数,也还是回到派生类的函数调用!

输出:

Devined!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值