C++ 入門指南- 單元11 - 物件導向與封裝 - 程式語言教學誌
文章推薦指數: 80 %
本篇文章介紹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
延伸文章資訊
- 1C++物件導向及增進效率程式技巧
C++物件導向程式技巧. 1. Classes (類別). 類別是將資料以及函數組織在同一個結構的方法。類別的關鍵字為class,功能. 與C 語言的struct 類似,不過C 語言中的stru...
- 2C++物件導向程式設計實務與進階活用技術 - 博客來
書名:C++物件導向程式設計實務與進階活用技術,語言:繁體中文,ISBN:9786263331204,頁數:560,出版社:博碩,作者:胡昭民,ZCT,出版日期:2022/06/23, ...
- 3【Day25】:從struct進化成class的物件導向技巧(上) - iT 邦幫忙
為什麼學長一看到這一行就知道我寫C++呢?以及這樣寫哪裡好呢?這就要提到物件導向對於大程式的種種好處了! 物件導向OOP(Object-oriented ...
- 4物件與類別物件(object)是什麼? 物件(object)是什麼? 視窗物件
C++物件導向程式設計(Object-. Oriented Programming)是以類別物件. 為主的程式設計。 宣告類別名稱. ▫ class 類別名稱. { private: //定義私...
- 5[C 語言] 程式設計教學:物件導向程式入門| 開源技術教學網
Stroustrup 博士在做cfront (C++ 轉C 的轉譯器) 時應該也想過類似的問題,當時的答案就是做出一個保留C 特性的新語言,也就是廣人熟知的C++。 為什麼要寫物件導向C? 那麼...