C++ 建構函式_拷貝建構函式

來源:互聯網
上載者:User

標籤: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++ 建構函式_拷貝建構函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.