1.有继承关系。
2.子类要重写父类的虚函数,重写,函数返回值类型,函数名,参数列表要完全相同。
还有最重要易于忽视的第三点
3.父类(基类)的指针或引用指向子类
如何实现呢?
第一种
父类引用指向子类
Class Animal//父类
{
pubilc:
虚函数
virtual void speak()
{
cout<<动物在说话<<endl;
}
};
Class Cat:public Animal//子类
{
Public:
Void speak()
{
Cout<<小猫在说话<<endl;
}
}
Void doSpeak(Animal &animal) //Animal &animal= cat;//这一步实现了引用指向子类
{
Animal.speak();
}
第二种
父类指针指向子类
Class AbstractCalculator
{
public:
virtual int getResult()
{
return 0;
}
int m_Num1;
int m_Num2;
}
Class AddCalculator:public AbstractCalculator
{
int getresult()
{
Return m_Num1+m_Num2;
}
Void test02()
{
AbstractCalculator *abc=new AddCalculato;//实现了指针指向子类
Abc->m_Num1=10;
Abc->m_Num2=10;
用完记得销毁
Delete abc;
}