虚函数
虚函数的作用:
(1)是为了实现多态;
(2)虚函数可以让成员函数一般化,用基类指针指向派生类对象,当基类指针调用其虚函数的时候则会调用派生类重写的函数。
代码示例如下:
#include<iostream>
using namespace std;
class Father {
public:
virtual void talk()
{
cout << "爸爸在说话!" << endl;
};
};
class Son :public Father
{
public:
void talk()
{
cout << "儿子在说话!" << endl;
}
};
int main()
{
Father f1;
f1.talk();
Father* f2=new Son;
f2->talk();
return 0;
}
运行结果:
爸爸在说话!
儿子在说话!
(new要配合delete来使用,这里忘记delete了…)
父类指针指向子类的对象,然后调用了子类对象,当然在这样简单的代码段中也可以直接定义一个子类对象,不使用虚函数,但是在一些比较大的框架或者类库时我们不能随意更改源码,而且就算不是这样的情况我们在自己编程一些大的项目的时候使用虚函数使最方便的选择。
纯虚函数
纯虚函数的格式跟虚函数有一点点不同。
它的格式如下:(test是函数名)
virtual void test() = 0;
纯虚函数出现的原因:
(1)多态,在基类中定义纯虚函数,在派生类中对此函数进行重写;
(2)有些时候在基类中生成哪些对象并不是很合理,就会定义纯虚函数在派生类中生成;
声明了纯虚函数的类是一个抽象类,它不能创建类的实例,只能派生类通过重写创建实例,基类并不会关心派生类将实例重写成什么样子。
**注:**虚函数可以不在子类中重写,但是纯虚函数必须要在子类中重写。