博客 / 詳情

返回

每日一個C++知識點|面向對象之封裝

面向對象是C++編程語言的重要特徵, 也是C++與C語言顯著區別的重要標誌, 那什麼是面向對象呢?

什麼是面向對象

這裏的對象並不是指我們的男女朋友, 而是由"Object"所翻譯, 指的是具體的物體, 與之相對應的是抽象的類, 對象的關係就是物體的普遍性特殊性的關係, 即一般與個別的關係, 把類轉換成對象的過程叫實例化

C++面向對象主要分成三個模塊,分別是封裝,繼承多態

封裝

封裝就是把屬性行為打包到裏面, 其中屬性就是指成員變量, 行為就是指成員函數, 並通過privatepublic來確定訪問權限

其中private是常用的私有封裝修飾符,類的成員變量幾乎都用它修飾, 只能類內訪問

public公有封裝修飾符,一般用來修飾類的成員函數,可以允許外部訪問

下面舉一個關於封裝的使用例子

class Rectangle {
    // 私有屬性:寬度、高度(外部無法直接訪問)
    private:
        double width;  // 矩形寬度
        double height; // 矩形高度

    // 公有接口:對外提供訪問和操作的方法
    public:
        //讀取寬度
        double getWidth() const { 
            return width;
        }

        // 讀取高度
        double getHeight() const {
            return height;
        }
        //計算面積
        double calculateArea() const {
            return width * height;
        }
        //計算周長
        double calculatePerimeter() const {
            return 2 * (width + height);
        }
};

上面代碼描述的是一個名為Rectangle的類,其意思就是説這個類是矩形,這個矩形類裏面包含成員變量widthheight,也叫屬性,分別表示這個這個矩形的寬和高這兩個屬性, 除了成員變量外還包含成員函數getWidth(),getHeight(),calculateArea(),calculatePerimeter(),也叫成員方法,分別表示讀取寬度,讀取高度,計算面積,計算周長的方法

那麼為什麼要這麼設計呢?為什麼要分開privatepublic呢?這就體現出封裝的魅力了。其中一個原因是保護數據的安全,不讓外部直接訪問這個類的屬性而造成數據的篡改,只能通過公有的接口來間接訪問屬性數據,例如以上代碼中是通過getHeight()這個公有的方法來獲取width的數據的

實例化

以上是封裝類的過程,面向對象除了類的封裝外,還需要有對象的實例化, 什麼是實例化呢,就是把抽象的類轉變成具體的對象的過程,就是實例化

那麼怎麼把抽象的類轉變成具體的對象呢?下面我們將以一段代碼舉例説明

首先我們先完善上面的矩形類的代碼,對上述代碼添加了修改屬性的方法

#include <iostream>
using namespace std;

class Rectangle {
    // 私有屬性:寬度、高度(外部無法直接訪問)
    private:
        double width;  // 矩形寬度
        double height; // 矩形高度

    // 公有接口:對外提供訪問和操作的方法
    public:
        //讀取寬度(getter方法)
        double getWidth() const { 
            return width;
        }

        //讀取高度(getter方法)
        double getHeight() const {
            return height;
        }

        // 修改寬度
        void setWidth(double w) {
            width = w;
        }

        //修改高度
        void setHeight(double h) {
            height = h;   
        }

        //計算面積
        double calculateArea() const {
            return width * height;
        }

        //計算周長
        double calculatePerimeter() const {
            return 2 * (width + height);
        }
};

然後我們對類進行實例化

int main() {
    // 1. 實例化單個矩形對象(調用編譯器默認的空構造函數)
    Rectangle rect;

    // 2. 為對象的私有屬性賦值(寬4.0,高5.0,可自行修改數值)
    rect.setWidth(4.0);
    rect.setHeight(5.0);

    // 3. 調用方法,輸出對象的相關信息
    cout << "矩形的寬度:" << rect.getWidth() << endl;
    cout << "矩形的高度:" << rect.getHeight() << endl;
    cout << "矩形的面積:" << rect.calculateArea() << endl;
    cout << "矩形的周長:" << rect.calculatePerimeter() << endl;

    return 0;
}

通過成員方法setWidth()setHeight給對象的widthheight屬性賦值,然後通過getWidth()getHeight()讀取其屬性信息,通過calculateArea()calculatePerimeter()對屬性數據進行運算,得出以下結果:

上面的過程就是類轉化為對象的過程,也就是實例化

由於篇幅所限,本問主要簡述的是C++面向對象的封裝模塊,後續將會繼續簡述繼承多態的內容

總結

本文主要講述了C++面向對象之封裝的主要內容,重點簡述了類和對象的主要關係,並通過代碼示例來展示類實例化對象的過程~

如果文章對你有幫助的話,歡迎點贊和收藏喲~

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

發佈 評論

Some HTML is okay.