1. 程式人生 > ><C++ - 拷貝構造> 2018-01-12

<C++ - 拷貝構造> 2018-01-12

spa pre 是否 ++ 1-1 div space c++ har

#include <iostream>
using namespace std;
/*
    回顧上節的內容:
        1.構造和析構
        2.new  delete
        3.delete[]

    新的知識

        1.拷貝構造 ->構造函數  函數名和類名相同  沒有返回值
            定義: 用拷貝的方式構造對象  調用拷貝構造
                參數為 該類對象的構造函數

        關於引用:
            1.拷貝構造  參數必須為引用
            2.加引用

*/ //========================================類函數====================================== class A { private: char *arr; // 指針 int x; public: A() // 參構造函數 沒有返回值 自動調用 { cout << "調用無參構造函數" << endl; this->arr = NULL; // 給對象中的arr賦值 this->x = 0; } A(
int x) { cout << "調用有參構造函數" << endl; this->arr = new char[x]; // 申請內存 this->x = x; } A(A & other) // 拷貝構造 { /** 參數是同類型的對象 other形參 -->相當是 sum shis指向當前對象相當於 (23)的fnu other拷貝的是sum --> 調用拷貝構造函數 所以必須加引用 拷貝 -->內容拷貝 直接用參數 定義一個新的形參 引用 取別名 不全定義新的形參
*/ cout << "拷貝構造函數" << endl; this->arr = other.arr; this->x = other.x; } ~A() // 析構函數 --> 沒有返回值 沒有參數 自動調用 { cout << "調用析構函數" << endl; if (arr != NULL) { delete[]arr; // 釋放內存 arr = NULL; } } void mamied(A other) { cout << "是否婚配" << endl; } }; /** new delete 申請對象的內存空間的時候 調用對象的構造/析構函數 delete[] 調用每個對象的析構函數 */ //==========================================新內容==================================== int main() { { A sum; // 定義一個對象sum 在棧區 (調用無參構造) A fnu(sum); // 調用拷貝構造 (23) sum.mamied(fnu); // 函數 傳參 實參 -->形參賦值 形參拷貝實參 } getchar(); return 0; }

<C++ - 拷貝構造> 2018-01-12