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; }