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()
函數,從而實現接口繼承。