C++ 支持接口继承,但这种继承方式与其他编程语言中的接口继承有所不同。在 C++ 中,接口可以通过抽象类来实现。抽象类是一种特殊的类,它包含至少一个纯虚函数。纯虚函数是在基类中声明的虚函数,它在基类中没有定义,而是用= 0
表示。派生类必须实现这些纯虚函数,否则它们也将成为抽象类。
以下是一个简单的 C++ 抽象类示例:
#include <iostream>
// 抽象类 Shape
class Shape {
public:
// 虚析构函数,确保派生类的析构函数被正确调用
virtual ~Shape() {}
// 纯虚函数,计算面积
virtual double area() const = 0;
};
// Circle 类继承自 Shape
class Circle : public Shape {
public:
Circle(double radius) : radius_(radius) {}
// 实现 area 函数
double area() const override {
return 3.14159 * radius_ * radius_;
}
private:
double radius_;
};
// Square 类继承自 Shape
class Square : public Shape {
public:
Square(double side) : side_(side) {}
// 实现 area 函数
double area() const override {
return side_ * side_;
}
private:
double side_;
};
int main() {
// 由于 Shape 是抽象类,不能实例化对象
// Shape shape; // 错误
// 创建派生类对象
Circle circle(5.0);
Square square(4.0);
// 调用 area 函数
std::cout << "Circle area: " << circle.area() << std::endl;
std::cout << "Square area: " << square.area() << std::endl;
return 0;
}
在这个示例中,Shape
是一个抽象类,包含一个纯虚函数 area()
。Circle
和 Square
类继承自 Shape
并实现了 area()
函数。这样,我们可以通过 Shape
类型的指针或引用来调用派生类的 area()
函数,从而实现接口继承。