在说纯虚函数之前我们先说说虚函数,所谓的虚函数便是指当出现基类与派生类的同名操作时,需要给父类的函数标记上virtual,使之具有多态性。
语法:virtual 函数返回值类型 函数名(形参列表){函数实现}
此时要注意几个点:
1、虚函数是针对于非静态成员函数,因为静态成员函数属于类,是不能通过对象名访问的
2、对于类的构造函数也不能使用虚函数
3、虚函数是终身制的,父类使用virtual后,子类的同名函数不管加不加virtual,都是虚函数,一般建议大家加上
4、要多态调用虚函数,必须要有父类的指针或引用指向子类的对象
简单说完了虚函数,下面我们来说纯虚函数:
因为在父类中的虚函数的实现往往都是没有意义的,一般都是调用子类重写的函数,因此可以将虚函数改为纯虚函数
语法:virtual 返回值类型 函数名 (形参列表)=0;
当一个类只要有一个纯虚函数,这个类都称之为抽象类,同时如果大家把父类写为了抽象类但是又没有在子类中重写父类的虚函数的时候,此时子类也是一个抽象类,因为子类继承了父类的纯虚函数,相应的也就成了抽象类。
抽象类里的纯虚函数是可以有实现代码的,需要写在类的声明体外面。
抽象类的特点:
1、无法实例化对象
2、子类必须重写父类的纯虚函数,否则也无法实例化对象
#include <iostream>
using namespace std;
class father
{
public:
virtual void func()=0;
};
class son1:public father
{
public:
void func()
{
cout<<"son1-void func()"<<endl;
}
};
void test01()
{
//father f1; //此时父类是无法实例化对象的
father *f=new son1;
f->func();
}
int main()
{
test01();
cout << "Hello world!" << endl;
return 0;
}
原理还是一样的virtual指针,大家有疑问的可以参考之前的文章---------多态基本概念。