多态的三个条件
虚函数,重写,继承
#include <iostream>
using namespace std
;
class Parent
{
public
:
Parent(int a
= 0)
{
this
->a
= a
;
}
virtual
void print()
{
cout
<<"father"<<endl
;
}
private
:
int a
;
};
class Child
: public Parent
{
public
:
Child(int a
= 0, int b
= 0):Parent(a
)
{
this
->b
= b
;
}
void print()
{
cout
<<"son"<<endl
;
}
private
:
int b
;
};
void HowToPlay(Parent
*base
)
{
base
->print();
}
int main(int argc
,char ** argv
)
{
Parent p1
;
Child c1
;
HowToPlay(&p1
);
HowToPlay(&c1
);
return 0;
}
C++编译器根本不需要区分是子类对象还是父类对象,他就是区分,这个函数是不是虚函数. 不管是父类对象还是子类对象,分别有vptr指针,根据vptr指针去找虚函数表,根据虚函数表去找函数的入口地址. 实现了一个迟绑定的效果,运行的时候编译器才去判断