
當資料成員被宣告為 private 或 protected 的時候,他們就只能透過類別中的成員函數存取,如果要讓類別以外的地方設定或使用 private 或 protected 的資料成員,就得透過 public 的成員函數。
像這樣取得 private 或 protected 資料成員的函數叫做存取函數 (accessor) ,也是一般俗稱的 getter ,而設定 private 或 protected 資料成員的函數叫做修改函數 (mutator) ,也是一般俗稱的 setter ,舉例如下
| 001 | #include <iostream> |
| 002 | |
| 003 | class Demo { |
| 004 | public: |
| 005 | Demo(int pa, int pb) { |
| 006 | set_a(pa); |
| 007 | set_b(pb); |
| 008 | } |
| 009 | |
| 010 | int get_a() { |
| 011 | return a; |
| 012 | } |
| 013 | |
| 014 | int get_b() { |
| 015 | return b; |
| 016 | } |
| 017 | |
| 018 | void set_a(int pa) { |
| 019 | a = pa; |
| 020 | } |
| 021 | |
| 022 | void set_b(int pb) { |
| 023 | b = pb; |
| 024 | } |
| 025 | |
| 026 | private: |
| 027 | int a; |
| 028 | int b; |
| 029 | }; |
| 030 | |
| 031 | int main() { |
| 032 | Demo d(12, 10); |
| 033 | std::cout << d.get_a() + d.get_b() |
| 034 | << std::endl; |
| 035 | |
| 036 | return 0; |
| 037 | } |
| 038 | |
| 039 | /* Kaiching Chang |
| 040 | u0906.cpp |
| 041 | 2014-02 */ |
此例替兩個 private 資料成員分別設置存取函數與修改函數
| 010 | int get_a() { |
| 011 | return a; |
| 012 | } |
| 013 | |
| 014 | int get_b() { |
| 015 | return b; |
| 016 | } |
| 017 | |
| 018 | void set_a(int pa) { |
| 019 | a = pa; |
| 020 | } |
| 021 | |
| 022 | void set_b(int pb) { |
| 023 | b = pb; |
| 024 | } |
建構函數中改成用修改函數設定 a 與 b
| 005 | Demo(int pa, int pb) { |
| 006 | set_a(pa); |
| 007 | set_b(pb); |
| 008 | } |
在類別定義以外的 main() 中,利用存取函數得到 a 與 b 的值
| 033 | std::cout << d.get_a() + d.get_b() |
| 034 | << std::endl; |
編譯執行,結果如下
| $ g++ u0906.cpp |
| $ ./a.out |
| 22 |
| $ |
continue ...
沒有留言:
張貼留言