封裝
所謂封裝就是將某些東西包裝盒隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是通過外部接口以及特定的訪問權限來使用類的成員。
例如,下例中時一個動物類,我們把數據和功能封裝起來。
1 class Animal 2 { 3 public: //這就是公共成員,外部的接口 4 void SetAnimalName(string strname); 5 void ShowAnimalName(); 6 private: //這是私有成員,外部是無法訪問到的 7 string m_strName; 8 };
我們可以通過封裝使一部分成員充當類與外部的接口,而將其它的成員隱藏起來,這樣就限制了外部對成員的訪問,也使不同類之間的相互影響度降低
多態
多態可以使我們以相同的方式處理不同類型的對象,我們可以使用一段代碼處理不同類型的對象,只要他們繼承/實現了相同的類型。這樣我們沒有必要為每一種類型的對象編寫相同的邏輯,極大的提高了代碼的重用。其實,用簡單的一句話來形容就是:多態性,允許將子類類型的指針賦值給父類類型的指針,多態性在C++中是通過虛函數實現的。虛函數就是允許被其子類重新定義的成員函數。而子類重新定義父類虛函數的做法,稱為“覆蓋”,或者稱為“重寫”。子類重寫父類中虛函數時,即使不用virtual聲明,該重載函數也是虛函數。
1 #include "stdafx.h" 2 #include <iostream> 3 #include <stdlib.h> 4 using namespace std; 5 6 class Father 7 { 8 public: 9 void Face() 10 { 11 cout << "Father's face" << endl; 12 } 13 14 virtual void Say() 15 { 16 cout << "Father say hello" << endl; 17 } 18 }; 19 20 21 class Son:public Father 22 { 23 public: 24 void Say() 25 { 26 cout << "Son say hello" << endl; 27 } 28 }; 29 30 void main() 31 { 32 Son son; 33 Father *pFather=&son; // 隱式類型轉換 34 pFather->Say(); 35 }
猜猜此時的輸出結果是什么?對於剛開始學習C++語言的童鞋來說:可能認為輸出的是"Father say hello"
輸出的結果為:
繼承
繼承是面向對象的一個重要概念,如果一個類B繼承自另一個類A,就把這個類B稱為“A的子類”,而把A稱為“B的父類”。繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼,在令子類繼承父類的同時,可以重新定義某些屬性,並重新某些方法,即覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。
繼承是指一個對象直接使用另一個對象的屬性和方法,事實上我們遇到的很多事物都有繼承的含義,例如,若把動物看做一個實體,他可以分成很多個子實體,如:貓、狗、雞等等,這些字實體都具有動物的特性,因此,動物是它們的“父親”,而這些子實體則是動物的“孩子”。