c 拷貝建構函式小測

2022-03-27 12:50:29 字數 979 閱讀 8752

好久沒寫部落格了,部落格荒廢了,人也廢了,c++ primer果然經典,看了之後明白了許多之前不懂得細節。

當定義乙個新型別的時候,需要顯示或隱式地指定複製,賦值和撤銷該型別的物件時會發生什麼---這是通過定義特殊成員:複製建構函式、賦值操作符過載和析構函式來達到的。如果沒有顯示定義這些,編譯器會為我們實現。

之前學習c++語言時大家知道函式引數傳遞方式有兩種,值傳遞和引用傳遞。值傳遞開始自己理解為就是拷貝,但是執行的是什麼拷貝?=號函式還是拷貝建構函式,答案是拷貝建構函式。函式返回值時編譯器會創造乙個臨時變數,執行的也是拷貝建構函式。

view code

#include class

point

point(

int _x=0,int _y=0

):x(_x),y(_y){}

point(

const point &pt)

point& operator=(const point &pt)

void

print()

};point

global

;point foo_bar(point arg)

int main(void

)

結果截圖:

可以看到函式形參傳遞,返回值執行的都是拷貝建構函式。=號操作符函式什麼時候執行呢,答案是=號左邊物件早已存在時執行,否則依舊執行拷貝建構函式。

另外c++ 中的explicit 關鍵字可以限制編譯器的隱式轉換,據說是為了相容c的語法,函式傳參時,形參型別和實參不一致,會對實參執行乙個形參型別的建構函式,這個建構函式以這個形參為引數。

上列中的test=std::cin 就是這樣轉換的:

1.編譯器建立無名物件=point(std::cin)

2.test=無名物件

就是這麼乙個結果。

C 建構函式 拷貝建構函式

建構函式 class base private int m var 建構函式無返回值型別,函式名和型別相同。拷貝建構函式傳遞引數為引用。1 class base2 7 拷貝建構函式 8 base base ref m var ref m var 9 11 private 12 intm var 13...

C 拷貝構造小練習

標頭檔案 ifndef student h define student h 類 class weapon 角色類class gamer endif cpp檔案 define crt secure no warnings include include include include student...

C 拷貝建構函式

1 什麼時候會用到拷貝建構函式?當任何你想影印東西的時候,而不管東西被影印成什麼樣子。即任何你想利用乙個已有的類例項給另乙個類例項賦值時,這種賦值可能是顯式的,也可能是隱式的 顯式 classa 1 class 2 隱式 函式的形參有用到類物件卻沒有用引用或傳址技術時 函式的返回值是乙個物件也沒有應...