《C 程式語言》10 類

2021-06-21 16:11:54 字數 2085 閱讀 6015

1、成員有const和引用的類必須顯示提供(預設)建構函式。

2、賦值運算子的一般性策略:防止自賦值、刪除那些老元素、初始化、複製那些新元素。通常非靜態的成員都必須複製。

table::table(const table &t) //複製建構函式 }

table& table::operator=(const table &t) //賦值

}return *this; }

3、成員的建構函式將在容器本身的建構函式體執行之前首先被執行。這些建構函式按照成員在類中宣告的順序執行,而不是按這些成員在初始式表中出現的順序。

如果某個類物件中包含著一些類物件,當該物件被時,它自己的析構函式將首先被執行,而後將按照與宣告相反的順序執行各個成員的析構。

4、構造時,初始式比賦值式往往更有效率上的優勢。

person::person(const string &n, const string &a) : name(n)

這裡的 name 用 n 的乙個副本進行初始化。而對 address 將先用乙個空串初始化,而後又用 a 的副本賦值。

5、成員常量

class curious;

//example:

static int f(int t)

class curious;

const int curious::c2 = f(3); //ok,編譯能通過

const float curious::c3 = 7.0; //ok,編譯能通過

6、區域性靜態儲存

對於區域性靜態物件,建構函式式在控制線程第一次通過該物件的定義時呼叫。

//example:

void f(int i) }

int main()

7、非區域性儲存

在所有函式之外定義的變數(即全域性變數、名字空間的變數,以及各個類的static變數)在main() 被啟用之前完成初始化,對於已經構造的所有這些變數,其析構函式將在退出main()之後呼叫。

在乙個編譯單位裡,對非區域性變數的構造將按照它們的定義順序進行。

//example:

class x;

table tbl;

table x::memtbl;

namespace z

構造順序:tbl -> x::memtbl -> z::tbl2.

注意:如在x裡的memtbl宣告一類的宣告(與定義不同)並不影響構造順序。

對於不同編譯單位裡的非區域性變數,其構造順序就沒***了,完全依賴於具體的實現。

8、臨時物件

a、完整表示式:那種不是其他表示式的子表示式的表示式稱為完整表示式。如下面的s1 + s2:

void f(string &s1,string &s2, string &s3)

}注意:為儲存是 s1 + s2將會產生乙個臨時物件,在表示式結束時,這個臨時物件將被刪除。繼續操作cs是危險的。

b、返回索引到區域性變數的引用也是錯誤的。

int &f()

9、物件的放置

void *operator new(size_t, void *p);

void *buf = reinterpret_cast(0xf00f);

x* p2 = new(buf)x; //在「buf」構造x時呼叫:operator new(sizeof(x),buf)

為operator new提供額外引數的new (buf) x的這種語法形式被稱做放置語法。注意,每個new總以物件的大小作為其第乙個引數,而被分配物件的大小是隱式提供的

示例:class newtest

newtest(int t)

private:

int narray[5];

}; int _tmain(int argc, _tchar* argv)

10、聯合

命名聯合的定義方式同struct,其中的每個成員將具有同樣的位址。聯合可以有成員函式,但卻不能有靜態成員。

一般來說,編譯器無法知道被使用的是聯合的哪個成員;也就是說,無法知道儲存在聯合中的物件的型別。因此,聯合就不能包含帶有建構函式或析構函式的成員,因為無法保護其中的物件以防止破壞,也不能保證在聯合離開作用域時能呼叫正確的析構函式。

C語言程式設計題目 實用經典 10

有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第乙個人大兩歲。最後 問第乙個人,他說是10歲。請問第五個人多大?include include int calage int n return calag...

C語言經典程式設計282例10

利用單條件單分支選擇語句判斷輸入的乙個整數是否偶數?輸入乙個字母,判斷是否為大寫字母,如果是,則提示 uppercase letter!否則提示 other letter!include include include include include main else printf n 要求使用者...

C語言中的類模擬(C 程式設計思想)

在物件導向 1 例項 下面先從乙個小例子看起 ifndef c class define c class struct endif c class a c class b void b f2 c class b bthis void a foo c class a athis void b foo ...