静态多态和动态多态以及纯虚函数和抽象类
静态多态就是函数重载
动态多态是使用虚函数来实现的。如下面的demo中虽然test()方法是以A&类型接收的参数,但是还是会调用子类的func()。这是由虚函数实现的。如果父类中的函数没有加virtual,那么用父类指针接收到子类对象也仅是把子类中父类的部分单独看成了一个父类对象,调用的还是父类对象的成员函数。
如果把父类中的虚函数写成 virtual void func()=0;这个语法就是纯虚函数。如果类中存在纯虚函数,这个类就是抽象类,就无法创建对象了。抽象类的子类必须重写纯虚函数,否则也是个抽象类。
class A {
public:
virtual void func(){
cout<<"父类方法"<<endl;
}
};
class B:public A{
public:
void func(){
cout<<"子类方法"<<endl;
}
};
void test(A& a){
a.func();
}
int main(){
B b;
test(b);
return 0;
}