1. 程式人生 > >C++中的建構函式與建立物件的(簡單)過程

C++中的建構函式與建立物件的(簡單)過程

<pre name="code" class="cpp">//構造方法
#pragma  在做遊戲的公司裡面初始化的方法有兩種風格  一種是init這是本來做蘋果轉過來的  另外一種是在構造方法裡面初始化 (這本來就是做C++的)


#include <iostream>
using namespace std;

//類
class Time{
    //預設是私有的
    int hour;
    int min;
    int sec;
    
    //
    void dida(){
        sec++;
        if (60 == sec) {
            sec = 0;
            min++;
        }
        
        if (60 == min) {
            min = 0;
            hour++;
        }
        
        if (24 == hour) {
            hour = 0;
        }
    }
    
    
    
    
public:
#pragma  構造方法: 沒有返回值 ,方法名與類名相同。構造方法在建立物件的時候一定會被動的呼叫一次。如果我們自己沒有寫構造方法,編譯器會幫我們寫一個無參的構造方法
    //建構函式的引數可以給定預設值
    /*
    Time (int h = 0,int m = 0,int s = 0){
        cout << "Time (int h,int m,int s)在構造方法中初始化成員變數" << endl;
        //通常在構造方法裡面去初始化成員變數
        hour = h;
        min = m;
        sec = s;
    }
     */
    
#pragma 初始化列表給成員變數初始化
    //建構函式 可以用初始化列表 進行初始化
    //只需要在引數括號後面加單冒號後面的就是初始化列表
    Time (int h = 0,int m = 0,int s = 0):hour(h),min(m),sec(s){
        cout << "初始化列表給成員變數初始化" << endl;
       
    }
    
    
    //過載 建構函式
    /*
    
    Time() {
        hour = 0;
        min = 0;
        sec = 0;
        cout << "建立物件的時候如果沒有引數就預設找到這個無參的Time ()構造方法" << endl;
    }
     //如果把這個開啟註釋 main函式裡面Time t2;會出現報錯時因為上面的建構函式給定預設值了也可以不傳參 所以不知道用哪一個
     */
    
    
    
    //公開的初始化方法
    void init(int h,int m,int s){
        hour = h;
        min = m;
        sec = s;
    }
    
    
    //執行
    void run(){
        while (1) {
            
            show();
            dida();
            //代表一個時間
            time_t cur = time(0);//0是獲取當前系統的時間
            //注意理解
            while (cur == time(0)) {
                //死迴圈1秒鐘
            }
        }
    }
    
    //顯示
    void show(){
        cout << hour << "時" << min << "分" << sec << "秒" << endl;
    }
  
};

//主函式
int main(int argc, const char * argv[])
{
    
    //建立物件  並把引數傳進去給建構函式
    Time t(15,38,27);
    t.show();
    //t.run();//這個函式是死迴圈   下面的程式碼不會執行
    
    
#pragma 現在我希望這樣也不報錯,那該怎麼辦?
    Time t2;// 一.方法過載  二.有參的構造方法給定引數的預設值
    t2.run();
    
#pragma 在建立物件的時候  有引數的話就找到有參的建構函式。無引數的話就預設找到原來的無參的建構函式。
    return 0;
}