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 ...