在C++中,接口通常通过抽象类来实现。抽象类是一个包含至少一个纯虚函数的类,它不能被实例化,但可以作为其他类的基类,从而定义了一组接口方法,子类必须实现这些接口方法。
接口(抽象类)的实现:
抽象类通常用于定义一组接口方法,子类必须实现这些方法才能被实例化。在C++中,可以通过纯虚函数来实现抽象类。
示例:
#include <iostream>
// 抽象类 Shape
class Shape {
public:
// 纯虚函数,定义接口
virtual double area() const = 0;
virtual void printInfo() const = 0;
};
// 子类 Circle
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override {
return 3.14159 * radius * radius;
}
void printInfo() const override {
std::cout << "Circle with radius " << radius << std::endl;
}
};
// 子类 Rectangle
class Rectangle : public Shape {
private:
double length;
double width;
public:
Rectangle(double l, double w) : length(l), width(w) {}
double area() const override {
return length * width;
}
void printInfo() const override {
std::cout << "Rectangle with length " << length << " and width " << width << std::endl;
}
};
int main() {
Circle circle(5.0);
Rectangle rectangle(4.0, 6.0);
Shape* shapes[] = {&circle, &rectangle};
for (const auto& shape : shapes) {
shape->printInfo();
std::cout << "Area: " << shape->area() << std::endl;
}
return 0;
}
在上面的示例中,Shape
是一个抽象类,定义了两个纯虚函数area
和printInfo
作为接口。Circle
和Rectangle
是Shape
的子类,必须实现area
和printInfo
方法才能被实例化。
优点:
「接口定义」:抽象类定义了一组接口方法,规范了子类的实现。
「多态性」:通过抽象类,可以实现多态性,即不同子类对象可以通过统一的接口进行操作。
「灵活性」:抽象类提供了一种灵活的设计方式,允许在不同子类中实现相同的接口方法,从而实现不同的行为。