拷貝構造函式呼叫時機
1.使用乙個已經建立完畢的物件來初始化乙個新物件
2.值傳遞的方式給函式引數傳值
3.以值方式返回區域性物件
class
person
~person()
person
(int age)
person
(const person &p)
}void
test1()
void
test2()
void
dowork
(person p)
void
test3()
person dowork2()
構造函式呼叫規則
預設情況下,c++編譯器至少給乙個類新增三個函式
1.預設建構函式(無參,函式體為空)
2.預設析構函式(無參,函式體為空)
3.預設拷貝建構函式,對屬性進行值拷貝
規則如下:
如果使用者定義有參建構函式,c++不再提供預設無參構造,但是會提供預設拷貝構造
如果使用者定義拷貝建構函式,c++不會再提供其他建構函式
深拷貝與淺拷貝
淺拷貝:簡單的賦值拷貝操作
深拷貝:在堆區重新申請空間,進行拷貝操作
class
person
person
(const person&p)
}void
test1()
void
test2()
//函式記憶體釋放時,先入後出原則
初始化列表
作用:c++提供了初始化列表語法,用來初始化屬性
語法:建構函式():屬性1(值1),屬性2(值2)…()
class
person
}//這樣構造時候不用傳參,也會有初始值
類物件作為類成員
c++類中的成員可以是另乙個類的物件,我們稱該成員為物件成員
class a{}
class b
重點在於析構函式的先後
class
phone
string p_name;
}class
person
string m_name;
phone m_phone;
}
當其他類物件作為本類成員,構造時候先構造類物件,再構造自身
析構的順序與構造的順序是相反的
靜態成員
靜態成員就是在成員變數和成員函式前加上關鍵字static,成為靜態成員
靜態成員分為:
靜態成員變數
1.所有成員共享乙份資料
2.在編譯階段分配記憶體
3.類內宣告,類外初始化
靜態成員函式:
1.所有成員共享乙個函式
2.靜態成員函式只能訪問靜態成員變數
class
person
int person::m_a =
100;
//類外初始化
void
test()
cout/也可以通過直接訪問變數進行訪問
靜態成員變數不屬於某乙個物件,所有物件共享乙個資料
靜態成員變數處於私有時,也無法外部訪問
class
person
static
int m_a;
int m_b;
}void
test1()
靜態成員函式也是有訪問許可權的 C 學習筆記 9
static 在c語言裡面 1 如果是靜態的全域性變數,就意味著這個變數只在這個.c檔案裡有效 2 靜態的本地變數具有持久儲存的作用,static的本地變數就是全域性變數,它就是放在全域性變數那個地方的 3 靜態的函式意味著只能在這個.c裡面訪問,在.c以外的是不能訪問的 在c static 的成員...
C 學習筆記9 模板
當編譯器遇到乙個模板定義時,它並不生成 只有當我們例項化出模板的乙個特定版本時,編譯器才會生成 普通的函式,函式的宣告和定義我們可以放在不同檔案中。對於模板則不同,為了生成乙個例項化版本,編譯器需要掌握函式模板或類模板成員函式的定義。因此,模板的標頭檔案通常既有包括宣告也包括定義。template ...
C語言學習筆記9
從程式流程的角度來看,程式可以分為三種基本結構,即順序結構 分支結構 迴圈結構。這三種基本結構可以組成所有的各種複雜程式。c語言程式設計教程 中會這樣來區分這結構,下面來說說分支結構程式和迴圈結構程式 1 分支結構程式 關係運算子和表示式 在程式中經常需要比較兩個量的大小關係,以決定程式下一步的工作...