面向對象是C++編程語言的重要特徵, 也是C++與C語言顯著區別的重要標誌, 那什麼是面向對象呢?
什麼是面向對象
這裏的對象並不是指我們的男女朋友, 而是由"Object"所翻譯, 指的是具體的物體, 與之相對應的是抽象的類, 類和對象的關係就是物體的普遍性和特殊性的關係, 即一般與個別的關係, 把類轉換成對象的過程叫實例化
C++面向對象主要分成三個模塊,分別是封裝,繼承和多態
封裝
封裝就是把屬性和行為打包到類裏面, 其中屬性就是指成員變量, 行為就是指成員函數, 並通過private和public來確定訪問權限
其中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的類,其意思就是説這個類是矩形,這個矩形類裏面包含成員變量width和height,也叫屬性,分別表示這個這個矩形的寬和高這兩個屬性, 除了成員變量外還包含成員函數getWidth(),getHeight(),calculateArea(),calculatePerimeter(),也叫成員方法,分別表示讀取寬度,讀取高度,計算面積,計算周長的方法
那麼為什麼要這麼設計呢?為什麼要分開private和public呢?這就體現出封裝的魅力了。其中一個原因是保護數據的安全,不讓外部直接訪問這個類的屬性而造成數據的篡改,只能通過公有的接口來間接訪問屬性數據,例如以上代碼中是通過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給對象的width和height屬性賦值,然後通過getWidth()和getHeight()讀取其屬性信息,通過calculateArea()和calculatePerimeter()對屬性數據進行運算,得出以下結果:
上面的過程就是類轉化為對象的過程,也就是實例化
由於篇幅所限,本問主要簡述的是C++面向對象的封裝模塊,後續將會繼續簡述繼承和多態的內容
總結
本文主要講述了C++面向對象之封裝的主要內容,重點簡述了類和對象的主要關係,並通過代碼示例來展示類實例化對象的過程~
如果文章對你有幫助的話,歡迎點贊和收藏喲~