C++的預設建構式(default constructor)為無參數的建構式。
當宣告類別未定義任何建構式,則編譯器會自動隱含產生一個無參數的預設建構式。
例如下面類別Car
未定義任何建構式,則編譯器隱含產生預設建構式Car()
。而建立無初始化物件時會調用預設建構式。
#include <iostream>
#include <string>
using namespace std;
class Car {
private:
// 屬性 attributes
string model;
int speed;
public:
// 方法 methodss
string GetModel() { return model; }
void SetModel(string model) { this->model = model; }
int GetSpeed() { return speed; }
void SetSpeed(int speed) { this->speed = speed; }
};
int main() {
Car car; // 調用預設建構式Car()
car.SetModel("MAZDA CX-30");
car.SetSpeed(60);
cout << car.GetModel() << endl; // MAZDA CX-30
cout << car.GetSpeed() << endl; // 60
return 0;
}
若類別已定義了有參數的建構式則不會產生隱含的預設建構式。例如下面Car
類別定義了建構式Car(string model)
則編譯器不會產生預設建構式Car()
,又建立未初始化物件時會調用無參數的建構式來建立物件,因此發生呼叫建構式錯誤。
main.cpp
#include <iostream>
#include <string>
using namespace std;
class Car {
private:
// 屬性 attributes
string model;
int speed;
public:
// 建構式 constructor
Car(string model) : model(model) {}
// 方法 methodss
string GetModel() { return model; }
void SetModel(string model) { this->model = model; }
int GetSpeed() { return speed; }
void SetSpeed(int speed) { this->speed = speed; }
};
int main() {
Car car1 = {"MAZDA CX-30"}; // ok
Car car2; // error: no matching constructor for initialization of 'Car'
return 0;
}
沒有留言:
張貼留言