學習到了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;
}