C 學習 類和物件

2021-10-16 13:23:35 字數 4226 閱讀 3676

10.2.1 建構函式

建構函式就是建立乙個物件,完成對其的初始化工作,賦值操作就在初始化中完成。

class cperson

};int main()

cperson即為建構函式

10.2.2 複製建構函式

複製建構函式就是用乙個已經初始化的物件生成乙個一模一樣的物件。

class cperson

cperson(cperson ©person)

};int main()

10.3.1 析構函式

構造函是用來物件建立時,給物件中的一些資料成員賦值,主要目的是初始化物件,而析構函式的功能就是釋放物件。

class cperson

;cperson::cperson()

cperson::~cperson()

int main()

自動變數的作用域是某個模組,當此模組被啟用時,自動變數呼叫析構函式,當退出此模組時,會呼叫析構函式。

10.4.1 訪問類成員

3種類成員為:

public屬性的成員對外可見,對內可見。

privite屬性的成員對外不可見,對內可見。

protected屬性的成員對外不可見,對內可見,且派生類是可見的。

類定義沒有加關鍵字的話,預設狀態類成員都在private區域。

10.4.2 內聯成員函式

內聯函式可以理解成乙個安全的巨集定義,他就是乙個真正的函式,只是不用壓棧出棧,速度快,而且比巨集定義安全,所以利用 短且頻率 比較高的函式可以寫成內聯函式inline。 內聯函式在編譯時,會將此內聯函式**直接編譯到呼叫函式之處。減少了一次函式呼叫時的跳轉、資料壓棧等操作。所以相比呼叫行數,內聯函式的執行效率要相對高點。不過也正因為如此,所以最終生成的程式檔案要稍微大點。

1.內聯函式可減少cpu的系統開銷,並且提高整體程式的速度,但當內聯函式很大時,會有相反的作用,因此一般比較小的函式才使用內聯函式。

2.有兩種內聯函式的宣告方法,一種是在函式前使用inline關鍵字;另一種是在類的內部定義函式的**,這樣的函式將自動轉換為內聯函式,而且沒必要將inline放在函式前面。

class cperson

};

setage()預設為內聯函式

class cperson

;inline void cprson::setage()

10.4.3 靜態類成員
class cbook

;unsigned int cbook::m_prince = 10;

1.在定義靜態資料成員時,通常需要在類外部對靜態資料成員初始化。

2.對於靜態成員來說,不僅可以通過物件訪問,還可以直接使用類名訪問。

3.在乙個類中,靜態成員是被所有的類物件共享的,這就意味著無論定義多少個類物件,類的靜態資料成員只有乙份,同時,如果某乙個物件修改了靜態資料成員,其他物件的靜態資料成員也將改變。

10.4.4 隱藏的this指標

呼叫共享的成員函式通過this指標找到自己的資料成員

class cperson

;public:

cnode m_node;

void init()

};int main()

對於main函式來說,巢狀類cnode是不可以見的,但是可以通過使用外圍的類域作為限定符來定義cnode物件。

10.4.6 區域性類

類的定義放在函式中,這樣的類被稱為區域性類。

void localclass()

int getpages()

};cbook book;

book.setpages(300);

cout << book.getpages() << endl;

}

對於區域性類cbook,在函式之外是不能被訪問的,因為區域性類被封裝在了函式的區域性作用域。

10.5.1 友元概述

有時候,類會允許一些特殊的函式直接讀寫其私有資料成員。使用friend關鍵字可以讓特定的函式或者別的類的所有成員對私有資料成員進行讀寫。

class crectangle

void setrectangle(int height, int width)

protected:

int m_height;

int m_width;

friend int computerrectarea(crectangle& myrect);

};int computerrectarea(crectangle& myrect)

int main()

computerrectarea被定義為友元函式,可以直接訪問私有資料。

10.5.2 友元類

對於類的私有方法,只有在該類中允許訪問,其他的類不允許訪問。如果兩個類的耦合度比較緊密,可以在當前類中將另乙個類作為自己的友元類,這樣在另乙個類中就可以訪問當前類的私有成員了。

class citem

;class clist

};

clist類作為citem類的友元類,在clist類中可以直接訪問citem的私有成員。

10.5.3 友元函式

友元函式不是當前類的成員函式,它既可以是乙個不屬於任何類的一般函式,也可以是另外乙個類的函式。將乙個函式宣告為乙個類的友元函式後,它不但可以通過物件名訪問類的公有成員,而且可以通過物件名訪問類的私有成員和保護成員。

class date

;void setday(date& date, int d)

int main()

當友元函式在另外乙個類中時,友元函式的定義不能在類內。

class date;   //需要提前宣告

class time

;class date

;void time::display(date& date)

void time::setdate(date& date, int d)

int main()

10.6.1 使用命名空間

在乙個應用程式中會存在同名的全域性變數,這樣會導致程式的鏈結錯誤,使用命名空間可以消除命名衝突。

namespace myname1

;namespace myname2

;int main()

總而言之,命名空間就是乙個命名的範圍區域,程式設計師在這個特定的範圍內建立的所有識別符號都是唯一的。

10.6.2 在多個檔案中定義命名空間

在定義命名空間時,通常在標頭檔案中宣告命名空間中的函式,在原始檔中定義命名空間的函式,將程式的宣告與實現分開。

在標頭檔案中宣告命名空間函式

namespace output

在原始檔中定義函式

void output::demo()

在主函式中呼叫函式

void output::demo()

10.6.3 定義巢狀的命名空間

命名空間可以定義在其他的命名空間中。

namespace output

namespace myname }

}int main()

C 學習 類和物件

1 類的訪問控制有哪些?公有成員 以關鍵字public指明。私有成員 以關鍵字private指明。保護成員 以關鍵字protected指明。2 拷貝建構函式的作用是什麼?用乙個已經存在的物件初始化本類的新物件。3 友元函式和友元類的作用是什麼?友元提供了不同類或物件的成員函式之間 類的成員函式與一般...

C 類和物件 類和物件

c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...

c 學習 類和物件 1

這裡同樣以課本p101樣例為示例來說明。p101 樣例 時鐘類 class clock 1 最最基本的結構class clock 花括號下邊界乙個類的宣告當中最基本的部分 class為類的關鍵字,宣告乙個類,也表示下面要寫乙個類。clock為類名,是這個類的名字。上下花括號將類的各個類的成員放入這個...