纯虚函数
如果不能在基类中给出有意义的虚函数的实现,但又必须让基类为派生类提供一个公共界面函数,这时可将其声明为纯虚函数。
纯虚函数的定义是在虚函数定义的基础上,再让函数等于0即可(这只是一种表示形式,不是说它的返回值是0)virtual double area() const=0;
,area()仅起到为派生类提供一个一致的接口作用
抽象函数
一个类可以说明多个纯虚函数,对于包含有纯虚函数的类被称为抽象类。
一个抽象类只能作为基类来派生新类,不能说明抽象类的对象。
Figure fig;//不能说明抽象类的对象
抽象类不能用作返回类型。
Figure func1();
抽象类不能用作参数类型。
int func2(Figure);
可以说明指向抽象类对象的指针(和引用)
void func&(Figure &p)
抽象类用来描述一组子类的共同的操作接口,它用作基类。
从一个抽象类派生的类必须覆盖纯虚函数,或在该派生类中仍将他说明为纯虚函数,否则出错。
纯虚函数的抽象类仍是抽象类,除非派生类覆盖了所有纯虚函数。
在成员函数内可以调用纯虚函数,但在构造函数和析构函数内调用一个纯虚函数将运行错误(因为没有为纯虚函数定义代码)
class Va
{
public:
virtual void func1()=0;
void func2(){func1();}//正确
Va(){func1();}//错误
};