<C++ - 構造和析構>
阿新 • • 發佈:2018-01-23
protected set 註意 print 並且 out 令行 指向 其他
/* 回顧上節的內容: 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++ - 構造和析構>