C 物件導向以及STL雜談

2021-10-19 22:35:42 字數 3528 閱讀 7621

繼承多型

動態多型

模板stl

關聯容器

封裝是什麼

隱藏物件的屬性和實現細節,僅對外公開介面和物件進行互動,將資料和運算元據的方法進行有機結合(c++語言中,強化了c語言的封裝特性,對內開放資料,對外遮蔽資料、提供介面)

函式是封裝的一種形式:函式所執行的細節行為被封裝在函式本身這個更大的實體中,被封裝的元素隱藏了它們的實現細節–可以呼叫乙個函式但是不能夠訪問函式所執行的語句

訪問限定符

public(共有)

protected(保護)

private(私有)

(1)public成員可以在類外直接訪問

(2)protected和private成員在類外(在繼承有區別)不能夠訪問

(3)它們的作用域從該訪問限定符出現的位置開始直到下乙個訪問限定符出現時為止

(4)class和struct不同

舉個栗子

class  complex

complex& operator += (const complex&);

double real () const

double imag () const

private:

double re, im;

friend complex& __doapl (complex*, const complex&);

};

不能訪問private中的資料,以下栗子為錯誤的

但可以通過類提供的對外介面獲取資料,以下栗子為正確的

this指標

在 c++ 中,成員函式在呼叫時會隱式地增加 this指標,指向呼叫它的物件,從而使用該物件的成員。this指標是所有成員函式的隱含引數,在編譯階段由編譯器默默地將它新增到引數列表中。this只能用在類的內部,通過 this 可以訪問類的所有成員,包括 private、protected、public 屬性的。

class box

double volume()

int compare(box box)

private:

double length; // length of a box

double breadth; // breadth of a box

double height; // height of a box

};

;

// 類名,繼承方式,基類

class student :public person

;

1.派生物件可以賦值給基類物件

2.基類對向不能賦給派生類物件

繼承方式/基類成員public成員protected成員

private成員

public繼承public

protected

不可見protected繼承protected

protected

不可見private繼承private

private

不可見多繼承

class d: public a, private b, protected c
虛繼承

虛基類的建構函式有最新派生出的類的構造函式呼叫

虛基類的建構函式優先非虛基類的建構函式執行

多型按字面的意思就是多種形態,相同的方法呼叫,但是有不同的實現方式。多型性可以簡單地概括為「乙個介面,多種實現」

靜態多型
隱式介面,編譯階段

靜態多型,將同乙個介面進行不同的實現,根據傳入不同的引數(個數或型別不同)呼叫不同的實現

對於相關的物件型別,直接實現它們各自的定義,不需要共有基類,甚至可以沒有任何關係。只需要各個具體類的實現中要求相同的介面宣告,這裡的介面稱之為隱式介面。客戶端把操作這些物件的函式定義為模板,當需要操作什麼型別的物件時,直接對模板指定該型別實參即可

動態多型

顯示介面,執行階段

動態多型,則不論傳遞過來的哪個類的物件,函式都能夠通過同乙個介面呼叫到各自物件實現的方法。

對於相關的物件型別,確定它們之間的乙個共同功能集,然後在基類中,把這些共同的功能宣告為多個公共的虛函式介面。各個子類重寫這些虛函式,以完成具體的功能。客戶端的**(操作函式)通過指向基類的引用或指標來操作這些物件,對虛函式的呼叫會自動繫結到實際提供的子類物件上去。

條件:

class shape 

virtual int area()

在使用基類指標或引用指向子類物件時,呼叫的函式是子類中重寫的函式,這樣就實現了執行時函式位址的動態繫結,即動態聯編。動態多型是通過「繼承+虛函式」來實現的,只有在程式執行期間(非編譯期)才能判斷所引用物件的實際型別,根據其實際型別呼叫相應的方法。具體格式就是使用virtual關鍵字修飾類的成員函式時,指明該函式為虛函式,並且派生類需要重新實現該成員函式,編譯器將實現動態繫結。

template class  complex

complex& operator += (const complex&);

t real () const

t imag () const

private:

t re, im;

friend complex& __doapl (complex*, const complex&);

};

vector

vector容器表示乙個在必要時可自動增加容量的陣列。只能在向量容器的末尾新增新元素

優點:

缺點:

list

list容器是乙個雙向鍊錶

優點:

缺點:

vector && list 區別

deque

deque容器實現乙個雙端佇列。它等價於乙個向量,不過增加了向容器開頭新增元素的能力

優點:

缺點:

map && unordered_map

map是乙個關聯容器,對映中的每個鍵的值必須唯一

multimap容器,對映中的每個鍵的值不需要唯一

PHP物件導向雜談

php5.0還沒有命名空間的概念,所以通常類檔案的載入都是通過require,require once,include,include once.include 和require 語句的不同在於它們如何處理錯誤。使用require 呼叫檔案發生錯誤時,將會停止整個程式 呼叫include 時遇到相同...

java 物件導向雜談

1.this在構造器中的應用 在不同的構造器中使用到相同的其它構造器內所有的因素,可以通過this呼叫。原因 便於維護 this.name name this.color color this name,color this.weight weight 2.過載 同乙個類中的帶有不同參的構造器。重寫...

C 程式設計雜談之三 物件導向(續)

class fighter 上面的類可以清楚的抽象出我們所需要表達的資料型別之一,這裡也許你已經發現了一些問題 成員函式hit用來處理戰鬥事件,但是我們有不同的角色,fighter不可能只跟自己同樣的對手作戰,我們希望它能和任何角色戰鬥,當然,使用模板函式可以簡單的解決這個問題。另外,我們必須去實現...