當資料成員被宣告為 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 ...
沒有留言:
張貼留言