1.虚函数
虚函数是类中的一个函数成员,与其它函数成员的唯一区别是在子类中覆盖它。声明虚函数的方法很简单,只要在需要声明为虚函数的函数成员返回值类型之前加上virtual
关键字。如:
class A {
private:
int a;
public:
virtual void setA(int n) { //虚函数,需要在子类中将其覆盖
a = n;
}
};
对于虚函数,编译器完成的是动态连编,即对函数的调用是在运行时确定的,保证了子类覆盖虚函数之后运行的正确性。
2.纯虚函数
纯虚函数是一个函数成员,是一个在基类中说明的虚函数,并且没有具体的函数代码,各派生类可以根据自己的需要,分别覆盖它,从而实现正真意义上的多态性。函数覆盖和重载不能体现真正的多态性,只有虚函数才是多态性的表现。纯虚函数声明格式为:
virtual 函数返回值类型 函数名(形参列表) = 0;
基类不需要给出纯虚函数的实现代码,而又派生类给出。
3.抽象类
带有纯虚函数的类称为抽象类,它位于类的上层,不能定义抽象类的对象。
对于抽象类和纯虚函数需要注意一下要点:
- 如果一个类包含有纯虚函数,那么它就是抽象类,必须让其它类继承它。
- 基类中的纯虚函数没有代码。
- 不能定义抽象类的对象,即抽象类不能实例化。
- 必须在子类中覆盖基类中的纯虚函数。