多态和虚函数
引用:
[1]C语言中文网
1. 多态和虚函数
前提:
类型转化(向上转型):当把派生类对象指针赋值给基类对象指针后,基类对象指针只能访问派生类的成员变量,但是不能访问派生类的成员函数。因为,编译器会根据指针类型来调用对应类型的成员函数。
引入问题:
这样就会限制灵活性,我们想要向上转型后,基类对象指针既可以调用派生类的成员变量,又可以调用派生类的成员函数。此时就可以通过虚函数来实现多态。
虚函数就是在需要多态的函数前加上virtual声明。只有虚函数声明后的成员函数(同名)才能多态。
多态:基类对象指针既可以调用自己的成员(成员变量和成员函数),又可以调用直接派生类或间接派生类的成员(成员变量和成员函数)。这种灵活的调用的形式就是多态。
C++中,虚函数就是为了多态而存在的。
class A{
public:
int m_a;
virtual void display(){
cout<<"class A: m_a="<<m_a<<endl;}
A(int a);
};
A::A(int a):m_a(a){
}
class B: public A{
public:
int m_b;
void display(){
cout<<"class B: m_a="<<m_a<<", m_b="<<m_b<<endl;};
void show(){
cout<<"class B"<<endl;};
B(int a, int b);
};
B::B(int a, int b):A(a), m_b(b){
}
int main() {
A *pa = new A(10);
B *pb = new B(1, 2);
pa = pb;
pa->display()