
抽象类的定义
在C++中规定,含有纯虚函数的类称为抽象类。抽象类的特性如下:
- 抽象类不能被实例化,不能定义抽象类的对象;
- 可以定义抽象类的指针和引用,目的是可以通过指针或引用对其子类进行操作;
- 抽象类的子类如果没有实现其全部纯虚函数,则该子类依旧是抽象类;
抽象类不能实例化是有实际含义的,比如Animal和其子类Duck中,显然不能给Animal类定义具体对象。
抽象类的作用
根据前面的定义可知,抽象类本身不能实例化所以没有直接作用。
抽象类的作用是声明类族对外的接口,抽象类本身并不提供纯虚函数的实现。当使用抽象类作为父类时,其子类如果实现了全部纯虚函数,就可以对子类进行实例化。
最重要的是,通过定义抽象类的指针和引用,可以对子类对象进行操作,实现运行时的多态。
例子
(1)抽象类与子类
下面定义了抽象类Animal,及其子类Duck。抽象类含有纯虚函数eat(),子类中给出了eat()的具体实现。
class Animal {
public:
Animal() {};
virtual void eat() =0;
};
class Duck :public Animal {
public:
Duck() {};
virtual void eat() { printf("Duck eating! n"); }
};
(2)用父类指针处理子类对象
void eat(Animal *animal) {
animal->eat();
}
(3)调用
Duck duck;
eat(&duck);