多态:
父类指针或引用指向子类
动态多态:
当子类转换为父类(引用或指针)后,调用的仍是子类重写的方法。
利用虚函数用来完成此功能
来维护虚函数表,根据传入的子类跳到相应的子类的函数地址(晚绑定)
#include<iostream>
#include<cstdio>
using namespace std;
class A{
public:
// 虚函数
virtual void func(){
cout<<"A的func()"<<endl;
}
};
class B:public A{
public:
void func(){
cout<<"B的func()"<<endl;
}
};
// 地址晚绑定 (在运行时确定函数地址)
void f(A &a){
a.func(); // 向上转化 子类默认向父类转化
}
int main(){
B b = B();
f(b); // 子类的引用 调用 父类的方法
B b2 = B();
A *p_b2 = &b2; // 父类指针 指向 子类 (其虚函数指针仍然指向了B::func)
p_b2->func();
cout<<sizeof(A)<<endl; // 虚函数指针(指向了自己的虚函数表::A::func)
cout<<sizeof(B)<<endl; // 虚函数指针(指向了自己的虚函数表::B::func)
int a;
int *p = &a;
cout<<sizeof(p)<<endl; // 指针的大小
return 0;
}