多态的三个条件
 
虚函数,重写,继承
 
#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指针去找虚函数表,根据虚函数表去找函数的入口地址. 实现了一个迟绑定的效果,运行的时候编译器才去判断