浏览 54
扫码
抽象类和接口是面向对象编程中非常重要的概念,它们可以帮助我们实现多态性和封装性。在C++中,通过抽象类和接口可以定义一种规范,让派生类必须实现这些规范。
1. 抽象类
抽象类是一种包含至少一个纯虚函数的类,纯虚函数是在基类中声明但没有实现的虚函数。一个类只要包含了一个纯虚函数,就成为抽象类,无法实例化对象。抽象类主要用于定义接口规范,让派生类去实现具体的功能。
class Shape {
public:
virtual double getArea() const = 0; // 纯虚函数
virtual double getPerimeter() const = 0; // 纯虚函数
};
class Circle : public Shape {
public:
double getArea() const override {
return 3.14 * radius * radius;
}
double getPerimeter() const override {
return 2 * 3.14 * radius;
}
private:
double radius;
};
2. 接口
接口是一种只包含纯虚函数的抽象类,接口中的所有成员函数都是纯虚函数,没有成员变量或实现代码。接口定义了一组方法的规范,派生类必须实现这些方法。
class Printable {
public:
virtual void print() const = 0; // 纯虚函数
};
class Book : public Printable {
public:
void print() const override {
cout << "This is a book." << endl;
}
};
class Magazine : public Printable {
public:
void print() const override {
cout << "This is a magazine." << endl;
}
};
3. 区别和联系
- 抽象类是一种可以包含非纯虚函数和成员变量的类,派生类必须实现纯虚函数;接口是一种只包含纯虚函数的抽象类,用于定义规范。
- 抽象类用于表示一种抽象概念的基类,通常包含一些通用的方法和属性;接口用于定义一组方法的规范,让不同的类实现这些方法。
- 一个类可以继承多个接口,但只能继承一个抽象类。
通过抽象类和接口,可以实现更灵活的设计和更好的封装性,提高代码的可维护性和扩展性。在实际应用中,根据需求选择使用抽象类或接口来实现多态性和规范性。