C++ 中的 Getter 和 Setter

Muhammad Husnain 2023年10月12日
  1. 什麼是封裝
  2. C++ 中的 Getter 和 Setter
  3. まとめ
C++ 中的 Getter 和 Setter

這個小指南將首先簡要介紹物件導向程式設計中的封裝和資料隱藏的概念。然後將繼續使用 C++ 中的 getter 和 setter。

什麼是封裝

封裝是將所有相關事物繫結在一起的概念。C++ 中的一個類可以將所有相關資料組合到一個膠囊中。

例如,假設我們有一個帶有一些屬性和屬性的物件或實體 Rectangle。我們可以將它的所有屬性和屬性組合在一個類中。

因此,眾所周知,封裝將相關資料和方法組合在一個類中。它經常與資料隱藏的概念相混淆。

資料隱藏是一個概念,屬於一個類的屬性不應該被類外的每個人訪問。這是因為它違反了資料安全性。

如果將一個類的資料成員設為私有,則該類外的任何使用者都無法訪問它,因此我們可以實現資料安全。

通過這樣做,雖然我們無法從類外部設定或獲取資料成員的值,但我們可以建立可用於訪問成員的方法,這些方法可以確保一些不需要的資料不會放在資料成員中.

這種設定或獲取資料成員值的方法稱為 gettersetter

C++ 中的 Getter 和 Setter

這是一個很好的程式設計實踐,可以將類的資料成員設為私有,這樣就不能將無效資料分配給類的資料成員。有了這個,你可以在將資料儲存在資料成員中之前檢查資料成員中的資料。

例如,我們有一個類 Shape。任何形狀的長度屬性都不能為負數。

因此,在設定長度的值時,我們會檢查提供的值是否大於零。

同樣,如果我們有一個 Employee 類,它的屬性是 salary。該屬性既沒有負值也沒有很大的正值。

因此,必須在設定 salary 的值之前放置一個驗證器。讓我們看看下面的例子。

class Emp {
 private:
  int empSalary;

 public:
  void setEmpSalary(int sal) {
    if (sal > 0 and sal < 10000000) empSalary = sal;
  }
  int getEmpSalary() { return empSalary; }
};

在這個程式碼片段中,我們有資料成員 salary,它是私有的,用於實現資料隱藏。此外,我們為此資料成員提供了一個 getter 和 setter,以便在需要時可以設定和檢索值。

在 setter 函式中,我們還建立了一個檢查來控制在 salary 資料成員中輸入的無效值。這是為你需要的任何資料成員建立 setter 和 getter 的方法。

讓我們看一下上面示例的完整程式碼。

#include <iostream>
#include <string>
using namespace std;
class Emp {
 private:
  int empSalary;
  string empName;

 public:
  Emp(string n, int s) {
    setEmpName(n);
    setEmpSalary(s);
  }
  void setEmpName(string s) { empName = s; }
  string getEmpName() { return empName; }
  void setEmpSalary(int sal) {
    if (sal > 0 and sal < 10000000) empSalary = sal;
  }
  int getEmpSalary() { return empSalary; }
};
int main() {
  Emp e("John", 50000);
  cout << "Name: " << e.getEmpName() << endl;
  cout << "Salary: " << e.getEmpSalary() << endl;
}

輸出:

Name: John
Salary: 50000

まとめ

向類介面新增 getter 和 setter 方法至關重要。因為類的成員變數將被宣告為私有的,所以你的類的使用者將需要一種方法來檢索和設定他們的值。

因為 setter 方法可以包含資料驗證程式碼以確保將成員變數設定為合法值,所以 getter 和 setter 函式可以安全地啟用此訪問。

當然,有時你不想為類的所有成員變數提供 getter、setter 或這兩種方法。只讀成員變數是可以獲取但不能更改的變數。

一個這樣的例子可以是一些靜態資料成員,也可以是一些只讀資料成員;對於這樣的成員,我們需要一個 getter 函式,而不是一個 setter 函式。

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn