標籤:turn 預設建構函式 ace 知識 getc 參數 include 重載 protect
/* 回顧上節的內容: 1.實現中的事情 物 ->類 <屬性 -> 成員變數> <行為 -> 成員函數> 2.存取權限 public private (protected:受保護的) 函數 公有 成員 私人 公有可以在類外訪問 私人 只能類內訪問 3.struct 和class區別: 結構體就是公有的類 類就是私人的結構體 -->this 指標 指向對象本身 在成員函數中 可以在成員函數中訪問成員變數或者是調用其他成員函數(在類外不能使用) 新知識點: 1.構造 解構函式 1.1 建構函式 成員變數 私人 只能用類裡面的函數賦值 建構函式 定義一個對象的時候 同時給他初始化 建構函式有時候也叫做: 構造器 函數名和類名相同 沒有傳回值 也不需要要調用(對象定義的時候自動調用 並且只調用一次) 建構函式 可以重載 可以預設(注意二義性) 構造自己調用 定義對象 對象後面沒有() -->無參構造 對象後面有() 調用有參構造 定義對象的時候同時會調用建構函式 不寫建構函式的時候 定義對象的時候會不會調用建構函式 (會調用) 沒寫 編譯器會給一個預設構造(沒有參數 沒有執行任何功能)不做任何事情 如果說你寫了一個建構函式 編譯器就不會給這個構造 2.new delete 3.命令列參數*/#include <iostream>using namespace std;//====================================類函數========================================class sunmer{private: // 私人成員不能在類外訪問 int x; // 只是說明類中有哪些成員 不賦值 double y;public: // 無參數構造 sunmer() // 可以有參數 也可以沒有參數 可以重載 { cout << "調用的是無參建構函式" << endl; x = 0; y = 0; } sunmer(int x, double y) // 有參數構造 { cout << "調用的是有參建構函式2" << endl; this->x = x; this->y = y; } sunmer(double y, int x = 0) // 預設的建構函式 { cout << "調用的是預設函數" << endl; this->x = x; this->y = y; } void play() { cout << "play well" << endl; } void setSummer() { //cin >> x >> y; cin >> this->x >> this->y; } void setSummer(sunmer&temp) // 這個傳遞一個參數 (2) { temp.x = 2; this->x = 3; } void print() { cout << x << "\t" << y << endl; }};/** 類 -->抽象 成員賦值方式: 1.建構函式 定義對象的時候給他賦值 2.定義其他函數 後面用對象調用給他賦值*/class student{ int x;public: student(int x) // 有參數 { this->x = x; } /*student() { }*/};int main(){#if 0 sunmer seven,six; // 定義一個seven對象 sunmer ou(3, 2.15); // 調用有參數構造 參數可以是變數 sunmer danny(2); // 調用預設建構函式 ou.print(); getchar(); seven.setSummer(six); // 調用(2)行的函數 /** temp.x ->相當等於: six.x thix->x ->相對等於: seven.x */ seven.play(); //函數調用的時候記得加括弧 seven.setSummer(); // 輸入資料 seven.print(); // 列印資料#else //student bug; // 不寫() 調用預設(無參)構造 // 錯誤 不存在預設建構函式 解決方案1 自己寫一個沒有參數的建構函式 // 解決方案2 調用有參建構函式 寫參數 //student arr[10]; // 定義類數組 對象沒辦法傳遞參數 -->調用無參構造 // 用堆記憶體申請類的動態數組 #endif getchar(); return 0;}
<C++ - 構造和析構>