[C++] classの機能: constructor

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