C++的三大特性:封裝、繼承和多態性的詳解


封裝

  所謂封裝就是將某些東西包裝盒隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是通過外部接口以及特定的訪問權限來使用類的成員。

  例如,下例中時一個動物類,我們把數據和功能封裝起來。  

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的父類”。繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼,在令子類繼承父類的同時,可以重新定義某些屬性,並重新某些方法,即覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。

  繼承是指一個對象直接使用另一個對象的屬性和方法,事實上我們遇到的很多事物都有繼承的含義,例如,若把動物看做一個實體,他可以分成很多個子實體,如:貓、狗、雞等等,這些字實體都具有動物的特性,因此,動物是它們的“父親”,而這些子實體則是動物的“孩子”。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM