constructorは戻り値を持たない
constractorは className::className(引数)となる
class Car {
private:
int num;
double gas;
public:
Car();
void show();
};
Car::Car() {
num = 0;
gas = 0.0;
cout << "車を作成しました。\n";
}
void Car::show(){
cout << "車のナンバーは" << num << "です。\n";
cout << "ガソリン量は" << gas << "です。\n";
}
int main() {
Car car1;
car1.show();
return 0;
}
引数の数・型が異なっていれば、同じ名前の関数を複数定義できる。これをオーバーっロードという。
class Car {
private:
int num;
double gas;
public:
Car();
Car(int n, double g);
void show();
};
Car::Car() {
num = 0;
gas = 0.0;
cout << "車を作成しました。\n";
}
Car::Car(int n, double g){
num = n;
gas = g;
cout << "車のナンバーは" << num << "ガソリン量は" << gas << "の車を作成しました。\n";
}
void Car::show(){
cout << "車のナンバーは" << num << "です。\n";
cout << "ガソリン量は" << gas << "です。\n";
}
int main() {
Car car1;
Car car2(1234, 20.5);
return 0;
}
$ g++ -o sample sample.cpp && ./sample
車を作成しました。
車のナンバーは1234ガソリン量は20.5の車を作成しました。
### コンストラクタの応用
オブジェクtの配列を作成
int main() {
Car mycars[3] = {
Car(),
Car(1234, 25.5),
Car(4567, 52.2)
};
return 0;
}
$ g++ -o sample sample.cpp && ./sample
車を作成しました。
車のナンバーは1234ガソリン量は25.5の車を作成しました。
車のナンバーは4567ガソリン量は52.2の車を作成しました。
int main() {
Car cars[3];
return 0;
}
$ g++ -o sample sample.cpp && ./sample
車を作成しました。
車を作成しました。
車を作成しました。
class Car {
private:
int num;
double gas;
public:
Car(int n=0, double g=0);
void show();
};
//
int main() {
Car car1;
Car car2(1234, 20.5);
return 0;
}
オブジェクトに関連づけられないメンバを静的メンバという
関数の前にstaticを付与する
class Car {
private:
int num;
double gas;
public:
static int sum;
Car();
void setCar(int n, double g);
void show();
static void showSum();
};
Car::Car() {
num = 0;
gas = 0.0;
sum++;
cout << "車を作成しました。\n";
}
void Car::setCar(int n, double g){
num = n;
gas = g;
cout << "車のナンバーは" << num << "ガソリン量は" << gas << "の車を作成しました。\n";
}
void Car::showSum(){
cout << "車は全部で" << sum << "台あります。\n";
}
void Car::show(){
cout << "車のナンバーは" << num << "です。\n";
cout << "ガソリン量は" << gas << "です。\n";
}
int Car::sum = 0;
int main() {
Car::showSum();
Car car1;
car1.setCar(1234, 20.5);
Car::showSum();
Car car2;
car2.setCar(4567, 30.5);
Car::showSum();
return 0;
}