抽象类
一个类至少有一个纯虚函数,那么就称该类为抽象类
对于抽象类的使用有以下几点规定:
1.由于抽象类中至少包含一个没有定义功能的纯虚函数。因此,抽象类只能作为其他类的基类来使用,不能实例化抽象类对象。
但是可以声明指向抽象类的指针或引用,此指针可以指向它的派生类,进而实现多态性。
2.抽象类派生出子类,那么在子类中必须实现所有的纯虚函数
如果有一个没有实现,则该子类也是抽象类
3.不允许从具体类派生出抽象类。所谓具体类,就是不包含纯虚函数的普通类。
4.抽象类不能用作函数的参数类型、函数的返回类型或是显式转换的类型。
5.如果派生类中没有定义纯虚函数的实现,而派生类中只是继承基类的纯虚函数,则这个派生类仍然是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体类了。
例
#include <iostream>
using namespace std;
// 抽象基类
class Animal {
public:
// 纯虚函数
virtual void makeSound() const = 0;
};
// 派生类
class Cat : public Animal {
public:
void makeSound() const override {
cout << "Meow!" << endl;
}
};
// 派生类
class Dog : public Animal {
public:
void makeSound() const override {
cout << "Woof!" << endl;
}
};
int main() {
Animal* animal1 = new Cat();
Animal* animal2 = new Dog();
animal1->makeSound();
animal2->makeSound();
delete animal1;
delete animal2;
return 0;
}