標籤:main 通過 變數 namespace bubuko string std 建立對象 public
拷貝建構函式
系統自動產生的函數:
普通建構函式
拷貝建構函式
如果自己定義了普通建構函式,系統不會再自動產生普通建構函式;
如果自己定義了拷貝建構函式,系統不會再自動產生拷貝建構函式。
***如果沒有自訂的拷貝建構函式則系統自動產生一個預設的拷貝建構函式。
***當採用直接初始化或者複製初始化執行個體對象時,系統自動調用拷貝建構函式。
拷貝建構函式是一種特殊的建構函式,它在建立對象時,是使用同一類中之前建立的對象來初始化新建立的對象。拷貝建構函式通常用於:
-
通過使用另一個同類型的對象來初始化新建立的對象。
-
複製對象把它作為參數傳遞給函數。
-
複製對象,並從函數返回這個對象。
如果在類中沒有定義拷貝建構函式,編譯器會自行定義一個。如果類帶有指標變數,並有動態記憶體分配,則它必須有一個拷貝建構函式。拷貝建構函式的最常見形式如下:
classname (const classname &obj) { // 建構函式的主體}定義格式
類名(const 類名& 變數名)
class Student{public: Student(){m_strName = "jim";} // 普通建構函式 Student(const Student& stu){} // 拷貝建構函式private: string m_strName;}
程式碼範例:
demo.cpp
#include <iostream>#include <stdlib.h>#include <string>#include "Teacher.h"using namespace std;/*************************************************************************Teacher類 自訂拷貝建構函式資料成員: 姓名 年齡成員函數: 資料成員的封裝函數*************************************************************************/void test(Teacher t){}int main(void){ Teacher t1; // 調用普通函數 test(t1); // 調用拷貝建構函式 Teacher t2 = t1; // 調用拷貝建構函式 Teacher t3(t1); // 調用拷貝建構函式 system("pause"); return 0;}
Teacher.h
#include<string>using namespace std;class Teacher{public: // 聲明建構函式,參數給定預設值 Teacher(string name = "cjj",int age = 22); // 聲明拷貝建構函式 Teacher(const Teacher &tea); // 聲明成員函數,把所有的成員函數都羅列出來 void setName(string _name); string getName(); void setAge(int _age); int getAge();private: string m_strName; int m_iAge; };
Teacher.cpp
#include"Teacher.h"#include<iostream>using namespace std;// 定義建構函式,使用初始化列表,初始化建構函式的參數//m_iMax(m)為常量,只能使用初始化列表進行初始化Teacher::Teacher(string name,int age):m_strName(name),m_iAge(age){ cout << "Teacher(string name,int age)" << endl;}// 定義拷貝建構函式Teacher::Teacher(const Teacher &tea){ cout<<"Teacher::Teacher(const Teacher &tea)"<<endl;}// 類外定義,寫出成員函數的函數體void Teacher::setName(string _name){ m_strName = _name;}string Teacher::getName(){ return m_strName;}void Teacher::setAge(int _age){ m_iAge = _age;}int Teacher::getAge(){ return m_iAge;}
運行結果:
C++ 建構函式_拷貝建構函式