C++ 支持接口繼承,但這種繼承方式與其他編程語言中的接口繼承有所不同。在 C++ 中,接口可以通過抽象類來實(shí)現(xiàn)。抽象類是一種特殊的類,它包含至少一個(gè)純虛函數(shù)。純虛函數(shù)是在基類中聲明的虛函數(shù),它在基類中沒有定義,而是用= 0
表示。派生類必須實(shí)現(xiàn)這些純虛函數(shù),否則它們也將成為抽象類。
以下是一個(gè)簡單的 C++ 抽象類示例:
#include <iostream>
// 抽象類 Shape
class Shape {
public:
// 虛析構(gòu)函數(shù),確保派生類的析構(gòu)函數(shù)被正確調(diào)用
virtual ~Shape() {}
// 純虛函數(shù),計(jì)算面積
virtual double area() const = 0;
};
// Circle 類繼承自 Shape
class Circle : public Shape {
public:
Circle(double radius) : radius_(radius) {}
// 實(shí)現(xiàn) area 函數(shù)
double area() const override {
return 3.14159 * radius_ * radius_;
}
private:
double radius_;
};
// Square 類繼承自 Shape
class Square : public Shape {
public:
Square(double side) : side_(side) {}
// 實(shí)現(xiàn) area 函數(shù)
double area() const override {
return side_ * side_;
}
private:
double side_;
};
int main() {
// 由于 Shape 是抽象類,不能實(shí)例化對象
// Shape shape; // 錯(cuò)誤
// 創(chuàng)建派生類對象
Circle circle(5.0);
Square square(4.0);
// 調(diào)用 area 函數(shù)
std::cout << "Circle area: " << circle.area() << std::endl;
std::cout << "Square area: " << square.area() << std::endl;
return 0;
}
在這個(gè)示例中,Shape
是一個(gè)抽象類,包含一個(gè)純虛函數(shù) area()
。Circle
和 Square
類繼承自 Shape
并實(shí)現(xiàn)了 area()
函數(shù)。這樣,我們可以通過 Shape
類型的指針或引用來調(diào)用派生類的 area()
函數(shù),從而實(shí)現(xiàn)接口繼承。