C++編程之構造函數

學習到了C++的構造函數了,之前上的課比較簡單加上自己也有一定的編程基礎,所以一直都沒覺得有什麼壓力,今天的課感覺有點難了~~


構造函數的作用

  • 在對象被創建時,使用特定的值構造對象,將對象初始化爲一個特定的初始狀態。
    例如:希望在構造一個Clock類對象時,將初始時間設爲0:0:0,就可以通過函數來設置。

構造函數的形式

  • 函數名與類名相同
  • 不能定義返回值類型,也不能有return語句
  • 可以有形式參數,也可以沒有形式參數
  • 可以是內聯函數
  • 可以重載
  • 可以帶默認參數值

構造函數的調用時機

在對象創建時被自動調用
例如:
Clock myClock(0, 0, 0)

默認構造函數

  • 調用時可以不需要實參
    1、參數表爲空的構造函數
    2、全部參數都有默認值的構造函數

下面兩個都是默認構造函數,如在類中同時出現,將產生編譯錯誤:
Clock();
Clock(int newH = 0, int newM = 0, int newS = 0);

隱含生成的構造函數

  • 如果程序中未定義構造函數,編譯器將自動生成一個默認構造函數
  • 參數列表爲空,部位數據成爲設置初始值;
  • 如果類內定義了成員的初始值,則使用內類定義的初始值;
  • 如果沒有定義類內的初始值,則以默認方式初始化;
  • 基本類型的數據默認初始化的值時不確定的

默認構造函數

舉例

  • 函數的普通定義方法:
#include <iostream>

using namespace std;

class Clock{
public:
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:
    int hour, minute, second;
};

void Clock::setTime(int newH, int newM, int newS){
    hour = newH;
    minute = newM;
    second = newS;
}

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock myClock;
    myClock.setTime(8, 30, 30);
    myClock.showTime();
    return 0;
}


  • 構造函數方法之一:
#include <iostream>

using namespace std;

class Clock{
public:
    Clock(int newH, int newM, int newS); // 構造函數
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:
    int hour, minute, second;
};

//構造函數的實現
Clock::Clock(int newH, int newM, int newS):
    hour(newH), minute(newM), second(newS){
    }

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock c(0, 0, 0); // 自動調用構造函數
    c.showTime();
    return 0;
}


  • 構造函數方法2——自動調用構造函數
#include <iostream>

using namespace std;

class Clock{
public:
    Clock(int newH, int newM, int newS); // 構造函數
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:
    int hour, minute, second;
};

//構造函數的實現
Clock::Clock(int newH, int newM, int newS):
    hour(newH), minute(newM), second(newS){
    }

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock c(0, 0, 0); // 自動調用構造函數
    c.showTime();
    return 0;
}
  • 構造函數方法3——包含默認構造函數和自動構造函數
#include <iostream>

using namespace std;

class Clock{
public: //外部接口,公有成員函數
    Clock(int newH, int newM, int newS); // 構造函數
    Clock();  // 默認構造函數
    void setTime(int newH = 0, int newM = 0, int newS = 0);
    void showTime();
private:  // 私有數據成員
    int hour, minute, second;
};

//時鐘類成員函數的具體實現,默認構造函數
Clock::Clock():
    hour(0), minute(0), second(0){
    }

Clock::Clock(int newH, int newM, int newS):
    hour(newH), minute(newM), second(newS){
    }

void Clock::showTime(){
    cout << hour << ":" << minute << ":" << second;
}

int main(){
    Clock c1(8, 10, 0); // 調用有參數的構造函數
    c1.showTime();

    Clock c2;
    c2.showTime();
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章