在沒有定義拷貝構造函數是,下圖代碼中main函數中實例化了 三個對象:
Student stu1;Student stu2=stu1;Student stu3(stu1);
并把stu1初始化stu2和stu3,結構運行時:只出現一個student,
#include<iostream>using namespace std;class Student{public: Student() { cout << "student" << endl;; }};int main(){ Student stu1; Student stu2=stu1; Student stu3(stu1);}當我們將拷貝構造函數定義時(如下代碼):運行結構出現了三個 student:#include<iostream>using namespace std;class Student{public: Student() { cout << "student" << endl;; } Student(const Student&stu)//拷貝構造函數 { cout << "student" << endl;; }};int main(){ Student stu1; Student stu2=stu1; Student stu3(stu1);}但是我們會發現,在我們實例化stu2,sut3時并沒有進行拷貝構造函數的定義 ,但是依然可以初始化。原因:在我們定義一個類時,如果沒有寫構造函數和拷貝構造函數,系統會自動為我們生成一個默認的構造函數和拷貝構造函數。當采用直接初始化或復制初始化時,系統會自動調用拷貝構造函數。在我們自定義后,系統將不會自動生成構造函數和拷貝構造函數。
注意:拷貝構造函數的定義形式:
Student(const Student&stu)。
新聞熱點
疑難解答
圖片精選