C 物件導向(高階)

2021-09-25 09:45:56 字數 3078 閱讀 8267

1.**構造(委託)

乙個建構函式可以呼叫另外的建構函式

class aa(

int i):a

(i,0)a

(int i,

int j)

}

注:避免遞迴呼叫

例:

class aa(

int i):a

(i,0)a

(int i,

int j):a

()}

2.不可變物件和類(immutable object and class)
不可變物件:物件建立後,其內容不可改變,除非通過成員拷貝(例,setter設定器)

不可變類:不可變物件所屬的類

int

main()

上述的employee不是不可變類

不可變類的條件

所有資料域設定為"私有"屬性

沒有更改器函式

沒有能夠返回可變資料域物件的引用或者指標的訪問器

3.宣告或者定義靜態成員(declaration and definition of static member)

在類定義中,關鍵字static宣告不繫結到類例項的成員(該成員無需建立物件即可訪問)

靜態資料成員的定義

靜態存成員

靜態資料成員具有靜態儲存器(static storage duration)或者c++11執行緒儲存期特性
靜態存期

下實:統計例項個數

class square

square

(double side)};

//進行定義,初始化為0

int square:

:numberofobjects;

intmain()

,s2;

}

其中,numberofobjects位於靜態區,唯一的例項,所有物件共享。

物件銷毀的時候

析構函式不帶引數

析構函式不能過載

私有成員無法從類外訪問,有時候又需要授權某些可信的函式和類訪問這些私有成員

用關鍵字友元函式或者友元類,打破類的封裝

class date

,month

;int day

;public:

friend class kid;

//宣告

friend void

print

(const date& d);}

;//在外面定義

void

print

(const date& d)

class kid};

intmain()

拷貝構造:用以物件初始化另乙個同類的物件

class x

;x b

(a,0);

x c = b;

一般情況下,如果程式設計師不編寫拷貝建構函式,那麼編譯器會自動生成乙個

自動生成的拷貝函式叫做「 隱式宣告的拷貝建構函式」

一般情況下,隱式宣告的拷貝建構函式簡單地將作為引數的物件中每乙個資料域賦值到新的物件中

淺拷貝(shallow copy)

資料域是乙個指標,那麼只拷貝指標的位址,而非指標指向的內容

深拷貝

拷貝指標指向的內容

例:

class employee

;employee e1

;employee e3

;

其中,e1中的birthday = ox3100。

經過拷貝賦值後,e3中的birthday = ox3100.

此時,兩者的birthday指向同一位址。

淺拷貝

定製拷貝建構函式(customizing copy constructor)

如何深拷貝

1. 自行編寫拷貝建構函式

2.過載賦值運算子

例:

class employee;}

//...};

employee e1

;employee e2

;employee e3

;//cp ctor深拷貝

例:

vector<

int> iv

;for

(int i =

1; i <

10; i++

)

編碼規範:

跌代變數名應該用 i , j , k等。此外,變數名 j , k 應該只被用於巢狀迴圈
語法:

r"delimiter( raw_chatacters)delimiter"
#include

const

char

* s1 = r"(hello

wordl)";

//s1效果和s2 s3相同

const

char

* s2 =

"hello\nworld"

;const

char

* s3 = r"nouse

(hello

world)nouse";

只要能增加可讀性,你在編碼的時可以不遵守這些程式設計風格指南

一種後進先出的資料結構

stack類封裝了棧的儲存控制項並提供操作棧的函式

物件導向 高階

json方式的物件導向 json 把方法包在json裡 json物件導向 有人管他叫 命名空間 在公司裡 把同一類 的方法包在一起 拖拽和繼承 物件導向的拖拽 改寫原有的拖拽 繼承 asdf 拖拽 instanceof 檢視物件是某個類的例項 使用繼承 限制範圍的拖拽類 建構函式的偽裝 屬性的繼承 ...

物件導向高階

public class person public void print public class student extends person 重寫了父類方法 public void print public class demo public class demo 1.不能new這個類,只能靠...

物件導向高階

私有屬性,不能被子類繼承,在屬性的前面加上 就變為了私有屬性 私有方法,不能被子類繼承,在方法的前面加上 就變為了私有方法 只在前面加,後面不加,一般前後都有 的,屬於類當中自帶的方法或屬性 class class test1 str1 a 私有屬性 def init self pass def m...