一般的认为,虚机制发生在对象调用时,其实不然,只要能用到之时,他便会出现!在调用基类函数的时候,如果基类调用了一个虚函数,同样虚机制也会产生效果!
看一个程序,没有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:
virtualvoidprint(void){
cout<<"Base! ";
}
voidget(void){
print();
}
};
classdevined:publicBase{
public:
devined(){}
~devined(){}
public:
virtualvoidprint(void){
cout<<"Devined! ";
}
};
intmain()
{
devined*a=newdevined;
a->get();
return0;
}
即便是调用的基类函数,也还是回到派生类的函数调用!
输出:
Devined!
虚函数演示
本文通过两个示例对比展示了虚函数在C++中如何实现多态。第一个示例中,派生类对象通过基类指针调用成员函数时,未使用虚函数导致调用了基类的实现;而在第二个示例中,通过将基类成员函数声明为虚函数,实现了运行时的多态,即调用了派生类的实现。
597

被折叠的 条评论
为什么被折叠?



