C++ 入門指南- 單元11 - 物件導向與封裝 - 程式語言教學誌

文章推薦指數: 80 %
投票人數:10人

本篇文章介紹C++ 的物件導向與如何定義封裝。

... 物件導向程式設計(object-oriented programming) 有三大基本特性,分別是封裝(encapsulation) 、繼承(inheritance) ... C++入門指南 單元11-物件導向與封裝 本書已有新版,請參考C++入門指南4.01-單元11-物件導向與封裝 物件導向程式設計(object-orientedprogramming)有三大基本特性,分別是封裝(encapsulation)、繼承(inheritance)及多型(polymorphism) 封裝⇄繼承⇄多型 繼承的目的是讓類別(class)具有像是親屬的垂直關係(父母子女),子類別(subclass)可以擁有父類別(superclass)的成員(member),而多型像是親屬的平行關係(兄弟姊妹),多個子類別繼承自單一父類別之時,這些子類別就可以用父類別代替,父類別如同家族裡的「姓」,子類別則是「名」。

繼承的英文原文inherit,中文意思泛指從什麼得到什麼,生物學上的遺傳也是用這個詞。

至於封裝的意思就是把資料(data)封在類別中,這還牽涉到程式設計中另一個重要的概念           資訊隱藏(informationhiding),主要就是不讓外界隨意存取類別的資料,也就是說,只讓類別的資料成員(datamember)給同個類別的成員函數(memberfunction)存取。

這就要用到private存取標籤(accesslabel)了,就是把成員變數放在private之後,而其他可供外界存取的成員函數放在public之後 classDemo{ //宣告public的成員 public: voidset_a(intn); voidset_b(intn); intget_a(); intget_b(); intDoSomething(); //宣告private的成員 private: inta; intb; }; 這裡a與b已經改放到private之後,也由於a與b都是private的,因此另外宣告public的set_a()與set_b()設定a與b之值,get_a()與get_b()取得a與b之值。

存取標籤後面要接一個冒號,之後的成員依縮排方式加入。

set_a()與set_b()為修改函數(mutator),就是俗稱的setter,至於get_a()與get_b()為存取函數(accessor),也就是是俗稱的getter。

因此set_a()、set_b()、get_a()、get_b()的實作很簡單,如下 //setter與getter成員函數 voidDemo::set_a(intn){ a=n; } voidDemo::set_b(intn){ b=n; } intDemo::get_a(){ returna; } intDemo::get_b(){ returnb; } 我們寫成一個完整範例,如下 #include usingnamespacestd; classDemo{ //宣告public的成員 public: voidset_a(intn); voidset_b(intn); intget_a(); intget_b(); intDoSomething(); //宣告private的成員 private: inta; intb; }; intDemo::DoSomething(){ //改成呼叫getter成員函數 returnget_a()+get_b(); } //setter與getter成員函數 voidDemo::set_a(intn){ a=n; } voidDemo::set_b(intn){ b=n; } intDemo::get_a(){ returna; } intDemo::get_b(){ returnb; } intmain(void){ Demot; //由呼叫setter設定成員變數 t.set_a(12); t.set_b(23); cout<



請為這篇文章評分?