博客 / 詳情

返回

每日一個C++知識點|面向對象之繼承

C++面向對象有三大特性:封裝, 繼承, 多態

上一篇文章我們主要講了C++面向對象的封裝特性, 瞭解了類和對象, 今天我們來講解繼承這個特性, 進一步瞭解類之間的關係

在現實生活中,兒子可以繼承父母的財產, 在編程世界裏, 有子類和父類, 子類可以繼承父類的特性, 這就是C++面向對象的特性之一繼承

父類和子類

父類, 也叫基類, 是被繼承的類
子類, 也叫派生類, 繼承父類的類

下面用簡單的圖形類代碼進行舉例:
父類圖形代碼如下:

// 父類:基礎圖形(Shape)- 封裝所有圖形的通用屬性和方法
class Shape {
public:
    // 通用屬性:所有圖形都有的基準座標、顏色
    int x;        // 基準點x座標(圓心/左上角)
    int y;        // 基準點y座標
    string color; // 圖形顏色

    // 通用方法:顯示圖形基礎信息(子類直接繼承使用)
    void showBaseInfo() {
        cout << "圖形位置:(" << x << "," << y << "),顏色:" << color << endl;
    }

    // 通用方法框架:計算面積(子類可直接用,也可補充自身邏輯)
    double calculateArea() {
        cout << "基礎圖形無具體面積計算邏輯" << endl;
        return 0.0;
    }

    // 通用方法框架:繪製圖形(子類可直接用,也可補充自身邏輯)
    void draw() {
        cout << "正在繪製基礎圖形" << endl;
    }
};

子類圓形代碼如下

// 子類:圓形(Circle)- 繼承基礎圖形,添加特有屬性和方法
class Circle : public Shape {
public:
    int radius; // 圓形特有屬性:半徑

    // 子類重寫:計算圓形面積(覆蓋父類的通用方法)
    double calculateArea() {
        return 3.14 * radius * radius; // 圓形專屬面積公式
    }

    // 子類重寫:繪製圓形(覆蓋父類的通用方法)
    void draw() {
        cout << "正在繪製圓形:半徑" << radius << ",";
        showBaseInfo(); // 調用父類繼承的方法
    }
};

子類矩形代碼如下:

// 子類:矩形(Rectangle)- 繼承基礎圖形,添加特有屬性和方法
class Rectangle : public Shape {
public:
    int width;  // 矩形特有屬性:寬
    int height; // 矩形特有屬性:高

    // 子類重寫:計算矩形面積(覆蓋父類的通用方法)
    double calculateArea() {
        return width * height; // 矩形專屬面積公式
    }

    // 子類重寫:繪製矩形(覆蓋父類的通用方法)
    void draw() {
        cout << "正在繪製矩形:寬" << width << "×高" << height << ",";
        showBaseInfo(); // 調用父類繼承的方法
    }
};

測試代碼:

// 測試代碼
int main() {
    // 測試圓形類
    Circle circle;
    circle.x = 100;      // 繼承自Shape的屬性
    circle.y = 200;      // 繼承自Shape的屬性
    circle.color = "紅色";// 繼承自Shape的屬性
    circle.radius = 50;  // 圓形特有屬性
    circle.draw();       // 調用子類重寫的繪製方法
    cout << "圓形面積:" << circle.calculateArea() << endl << endl;

    // 測試矩形類
    Rectangle rect;
    rect.x = 300;        // 繼承自Shape的屬性
    rect.y = 150;        // 繼承自Shape的屬性
    rect.color = "藍色";// 繼承自Shape的屬性
    rect.width = 80;     // 矩形特有屬性
    rect.height = 60;    // 矩形特有屬性
    rect.draw();         // 調用子類重寫的繪製方法
    cout << "矩形面積:" << rect.calculateArea() << endl << endl;

    // 測試父類本身(可選)
    Shape baseShape;
    baseShape.x = 50;
    baseShape.y = 50;
    baseShape.color = "黑色";
    cout << "測試基礎圖形:";
    baseShape.draw();
    baseShape.calculateArea();

    return 0;
}

運算結果如下:

根據上述的代碼得知,子類中的圓形類和矩形類繼承了父類圖形Shape中所有的 public 屬性和 public 方法,無需再重複定義即可直接使用

繼承的關鍵特性

子類能繼承父類的什麼?
✅ 公有成員(public):子類可直接訪問
✅ 保護成員(protected):子類內部可訪問,外部不可訪問
❌ 私有成員(private):子類無法直接訪問
❌ 構造函數 / 析構函數:不會被繼承,但子類構造時會先調用父類構造

總結

C++ 繼承的核心是代碼複用,用父類封裝通用屬性和方法, 子類專注於特有功能, 併為多態打下基礎,下一章我們就聊聊多態

如果這篇文章對你有用的話,歡迎點贊收藏哦~

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.