父类指针指向子类地址
父类指针指向子类空间时如果不做处理,只能访问子类空间中父类的成员方法(函数)
可用虚函数解决,在父类函数前加virtual,即可通过父类的指针访问子类同名的函数
只有成员函数能定义为虚函数,若派生类中重新用virtual关键字定义了与基类同名的虚函数,则该虚函数不会进行重载,而是会隐藏基类的虚函数 进行重写。
Class animal //定义animal类
{
Public:
Virtual void speak ( ) //将父类成员函数speak定义为虚函数
{ cout<<动物叫; //定义animal的成员函数speak
}
};
Class cat : public animal //定义继承animal类的cat类
{
Public:
Void speak ( )
{ cout<<猫在叫; //定义cat的成员函数speak
}
};
Void dospeak ( animal &animal ) //用父类animal指针或引用作为参数调用成员函数
{ animal .speak ( ) ; }
当给dospeak函数传入cat对象的引用或指针时,如果animal类的成员函数speak没有定义为虚函数,则只会调用animal类的speak函数(动物在叫),但我们希望的是调用cat的成员函数(猫在叫)。
重写
当父类成员函数定义为虚函数时,子类可以重写该成员函数,重写函数时,子类和父类的函数名,返回值类型,参数个数、类型和顺序都必须一致。