溫馨提示×

C++封裝性支持接口繼承嗎

c++
小樊
81
2024-11-09 00:17:27
欄目: 編程語言

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()。CircleSquare 類繼承自 Shape 并實(shí)現(xiàn)了 area() 函數(shù)。這樣,我們可以通過 Shape 類型的指針或引用來調(diào)用派生類的 area() 函數(shù),從而實(shí)現(xiàn)接口繼承。

0