C++ 通过关键字virtual 声明一个虚函数,在派生类里重写这个虚函数,从而实现通过父类指针调用子类函数的目的,以实现多态。下面通过代码验证:
#include <iostream>
class Base
{
public:
virtual void print()
{
std::cout<<"virtual base print"<<std::endl;
}
void non_print()
{
std::cout<<"non virtual base print"<<std::endl;
}
};
class Deprived1:public Base
{
public:
virtual void print()
{
std::cout<<"virtual deprived 1 print"<<std::endl;
}
void non_print() //同名隐藏基类non_print
{
std::cout<<"non virtual deprived 1 print"<<std::endl;
}
};
class Deprived2:public Base
{
public:
virtual void print()
{
std::cout<<"virtual deprived 2 print"<<std::endl;
}
void non_print() //同名隐藏基类non_print
{
std::cout<<"non virtual deprived 2 print"<<std::endl;
}
};
int main()
{
Deprived1* d1 = new Deprived1(); //Deprived1 的指针
Base *b =d1;
b->print(); // 调用Deprived1 的print
b->non_print(); // 调用 base 的print
Deprived2* d2 = new Deprived2(); //指向 |Deprived2 的指针
b = d2;
b->print(); //调用Deprived2 的print ,通过基类指针调用不同的派生类函数,体现了多态
Deprived1 d11;
Base b2 = d11;
b2.print(); //并没有实现多态,直接调用基类的print
getchar();
return 0;
}
注意:必须通过指针来调用虚函数,才能达到预期的效果。