標籤:names ret 實參 post 關於 釋放記憶體 etc 指標 body
#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