1. 程式人生 > ><C++ - 構造和析構>

<C++ - 構造和析構>

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++ - 構造和析構>