全部的 C++ 程序都有如下兩個基本要素:ios
封裝是面向對象編程中的把數據和操做數據的函數綁定在一塊兒的一個概念,這樣能避免受到外界的干擾和誤用,從而確保了安全。數據封裝引伸出了另外一個重要的 OOP 概念,即數據隱藏。編程
數據封裝是一種把數據和操做數據的函數捆綁在一塊兒的機制,數據抽象是一種僅向用戶暴露接口而把具體的實現細節隱藏起來的機制。安全
C++ 經過建立類來支持封裝和數據隱藏(public、protected、private)。咱們已經知道,類包含私有成員(private)、保護成員(protected)和公有成員(public)成員。默認狀況下,在類中定義的全部項目都是私有的。例如:網絡
class Box { public: double getVolume(void) { return length * breadth * height; } private: double length; // 長度 double breadth; // 寬度 double height; // 高度 };
變量 length、breadth 和 height 都是私有的(private)。這意味着它們只能被 Box 類中的其餘成員訪問,而不能被程序中其餘部分訪問。這是實現封裝的一種方式。函數
爲了使類中的成員變成公有的(即,程序中的其餘部分也能訪問),必須在這些成員前使用 public 關鍵字進行聲明。全部定義在 public 標識符後邊的變量或函數能夠被程序中全部其餘的函數訪問。spa
把一個類定義爲另外一個類的友元類,會暴露實現細節,從而下降了封裝性。理想的作法是儘量地對外隱藏每一個類的實現細節。設計
C++ 程序中,任何帶有公有和私有成員的類均可以做爲數據封裝和數據抽象的實例。請看下面的實例:code
#include <iostream> using namespace std; class Adder{ public: // 構造函數 Adder(int i = 0) { total = i; } // 對外的接口 void addNum(int number) { total += number; } // 對外的接口 int getTotal() { return total; }; private: // 對外隱藏的數據 int total; }; int main( ) { Adder a; a.addNum(10); a.addNum(20); a.addNum(30); cout << "Total " << a.getTotal() <<endl; return 0; }
當上面的代碼被編譯和執行時,它會產生下列結果:對象
Total60
上面的類把數字相加,並返回總和。公有成員 addNum 和 getTotal 是對外的接口,用戶須要知道它們以便使用類。私有成員 total 是對外隱藏的,用戶不須要了解它,但它又是類能正常工做所必需的。接口
一般狀況下,咱們都會設置類成員狀態爲私有(private),除非咱們真的須要將其暴露,這樣才能保證良好的封裝性。
這一般應用於數據成員,但它一樣適用於全部成員,包括虛函數。
若是你對C/C++感興趣,想學編程,小編推薦一個C/C++技術交流羣【點擊進入】!
涉及到了:編程入門、遊戲編程、網絡編程、Windows編程、Linux編程、Qt界面開發、黑客等等......