1. 程式人生 > >C++面向物件程式設計——類和物件(個人整理)

C++面向物件程式設計——類和物件(個人整理)

物件: object 客觀世界中任何一個事物都可以看成一個物件,如自然物體(汽車,房子,班級...) 可以看到一個班級作為一個物件有兩個要素: 1、班級所屬系和專業,人數等靜態特徵(屬性); 2、班級的動態特徵,學習,開會等(行為); 在C++中,每個物件都是由資料和函式(即操作程式碼)這兩部分組成的。呼叫物件中的函式就是向該物件傳送一個訊息,要求該物件實現某一行為(功能)。 面向物件程式設計的特點:封裝、(抽象)、繼承、多型。 封裝與資訊隱蔽: 1、將有關的資料和操作程式碼封裝在一個物件中形成一個基本的單位,各個物件間相對獨立,互不干擾。 2、將物件中某些部分對外隱蔽,即隱蔽其細節只留下少量介面,以便與外界聯絡,接收外界訊息(即資訊隱蔽)。
抽象:抽象的作用是表示同一類事物的本質;類是物件的抽象,而物件則是類的特例(或者說是類的具體表現形式)。 繼承與重用:可以重用已有軟體中的一部分甚至大部分(軟體重用)。 多型性:由繼承而產生的相關的不同的類,其物件對同一訊息會作出不同的響應。 類:一組具有相同屬性和行為的物件的抽象和描述。類是物件的抽象,而物件是類的例項 在面向物件方法中: 物件:用資料(變數)來表示靜態的屬性,用方法(函式)來表示動態的行為 類:就是自己定義的一種新的資料型別,是對 物件的屬性和行為的抽象和描述;型別的變數,稱為物件 宣告類型別: 成員訪問限定符: private:只能被本類中的成員函式引用,類外不能呼叫(友元類除外),也
不能被它的派生類訪問。  public:既可以被本類中的成員函式所引用,也可以被類作用域內其他函式引用 protected:只能被本類中的成員函式引用,不能被類外成員訪問,但是可以被派生類的成員函式訪問 如果在類的定義中既不指定成員型別為private也不指定public,protected,則系統預設是為私有的private。 類和結構體型別的異同:用struct宣告的類,如果對其成員不做訪問限定符的宣告,系統將其預設為public公用的;而class定義的類則預設為private私有的。 內建(inline)成員函式: 在程式呼叫內建成員函式時並不是真正地執行函式的呼叫過程(如保留返回地址等處理),而是把函式程式碼嵌入到程式的呼叫點。
由於在類體中定義的成員函式的規模都很小,而系統呼叫函式的過程所花費的時間相對是比較大的,為了減少時間的開銷,如果在類體中定義的成員函式中不包含迴圈等控制結構,系統會自動將它們作為內建(inline)函式來處理。如果成員函式不在類體內定義,而在類體外定義,系統並不把它預設為內建函式,如果想將其作為內建函式,應當用inline作顯示宣告。 eg: class Student {      public:      inline void func(); } inline void Student::func() {      ...; } 注意: 如果在類體外定義inline函式,則必須將類定義和成員函式和定義都放到同一個檔案中,否則編譯時無法進行置換。 使用內建函式可以節省執行時間,但卻增加了目標程式的長度。 內建函式中不能包括複雜的控制語句,如迴圈和switch語句。 對函式做inline宣告只是程式設計者對編譯系統提出的一個建議,而非指令性的。 只有在類外定義的成員函式規模很小而且呼叫頻率較高時,才將此成員函式指定為內建函式。 巨集定義和行內函數的區別: 巨集是字串替換 巨集是在編譯器進行(預處理),行內函數是編譯後執行時程式碼嵌入 巨集的引數是不佔記憶體空間的 行內函數呼叫要消耗記憶體 行內函數可以除錯,編譯器會對行內函數的引數進行監察或者型別轉換 成員函式的儲存方式: 每個物件所佔用的儲存空間只是該物件的資料部分所佔用的儲存空間,而不包括成員函式程式碼所佔用的儲存空間。