c 物件導向筆記

2021-08-10 19:40:45 字數 1861 閱讀 6356

繼承形式如下:

class derived-class: access-specifier base-class
當乙個類派生自基類,該基類可以被繼承為 public、protected 或 private 幾種型別。繼承型別是通過上面講解的訪問修飾符 access-specifier 來指定的。

我們幾乎不使用 protected 或 private 繼承,通常使用 public 繼承。當使用不同型別的繼承時,遵循以下幾個規則:

公有繼承(public):當乙個類派生自公有基類時,基類的公有成員也是派生類的公有成員,基類的保護成員也是派生類的保護成員,基類的私有成員不能直接被派生類訪問,但是可以通過呼叫基類的公有和保護成員來訪問。

保護繼承(protected): 當乙個類派生自保護基類時,基類的公有和保護成員將成為派生類的保護成員。

私有繼承(private):當乙個類派生自私有基類時,基類的公有和保護成員將成為派生類的私有成員。

大部分的過載運算子可被定義為普通的非成員函式或者被定義為類成員函式。

#include 

using

namespace

std;

class box

//box operator+(const box& box);

};box operator+(const box b1, const box b2)

//box box::operator+(const box& box)

int main()

多型主要是通過virtual實現的,如果基類中不加virtual,這就是所謂的靜態多型,或靜態鏈結,函式呼叫在程式執行前就準備好了,有時候這也被成為早繫結。如果加上virtual,會告訴編譯器不要靜態鏈結到該函式,我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被成為動態鏈結,或後期繫結。

#include 

using namespace std;

class shape

int area()

};class rectangle: public shape

int area()

};class ********: public shape

int area()

};int main()

輸出結果:

parent

class

area

parent

class

area

如果加上virtual:

#include 

using namespace std;

class shape

virtual

int area() = 0;

};class rectangle: public shape

int area()

};class ********: public shape

int area()

};int main()

輸出結果:

rectangle

class

area

********

class

area

當然這裡不一定是純虛函式,加上virtual就行,父類也可以有自己的實現。

當你在基類中不能對虛函式給出有意義的實現,這個時候就會用到純虛函式。=0告訴編譯器,函式沒有主體,上面的虛函式是純虛函式。

如果有乙個或者以上的純虛函式,那麼這個類就是抽象類,不能有自己的例項。

C 筆記 物件導向

c 物件導向的三大特性 封裝 繼承和多型。封裝 將資料和方法寫進類中,避免外界干擾和保護資料,使得 模組化。繼承 乙個類 派生類 繼承另乙個類 基類 的所有屬性和方法,同時它還可以有另乙個類不具備的方法和屬性 可拓展 多型 c 多型性是通過虛函式來實現的,虛函式允許子類重新定義成員函式 覆蓋或者稱為...

C C 筆記 C 物件導向

1 虛函式 定義虛函式的類稱為多型類,編譯器會為多型類自動生成乙個虛函式表vtable。vtable是乙個函式指標陣列,用來描述每個類的虛函式位址。多太類同時還有乙個指向虛函式表的指標,為類的物件訪問虛函式。vtable中還應包含typeinfo的資訊,用來做rtti。派生類的vtable應該相容其...

c 物件導向筆記(1)

偶然一次看到揚中科講的c 物件導向,覺得講得挺好的,很適合初學者,筆記一下 1,類成員 字段,方法,屬性 2,成員的訪問級別 封裝 public private internal protected public class person get net3.x 簡化了屬性語法set get,編譯器會...