繁体   English   中英

如何为子类声明默认构造函数?

[英]How to declare a default constructor for subclass?

最近,我开始全日制学习 C++。

我的理解是 C++ 中的构造函数不被子类继承,因此必须在子类中声明。

下面,我有一个程序,它有一个基础 class Car和一个默认构造函数,使用 3 个变量的默认值,然后我有一个子类SportsCar ,它应该从基础 class 调用默认构造函数。

我的问题是我无法找到一种方法来将子类构造函数的新变量acceleration初始化为诸如-2的值。

这是我的.h文件

#include <iostream>
#include <string>
using namespace std;

#ifndef CAR_H_
#define CAR_H_

class Car {
public:
    Car();
    void SetName(string carName);
    void SetMPH(int carMPH);
    void SetPrice(double carPrice);

    string GetName() const;
    int GetMPH() const;
    double GetPrice() const;
    virtual void display() {
        cout << "Car Information: " << endl;
        cout << "Model Name: " << name << endl;
        cout << "Top Speed: " << mph << " miles per hour" << endl;
        cout << "Sales Price: $" << price << endl;
    }

    void SetInfo(string theName, int theMPH, double thePrice) {
        name = theName;
        mph = theMPH;
        price = thePrice;
    }

    virtual ~Car() {
        cout << "deletion complete" << endl;
    }

private:
    string name;
    int mph;
    double price;
};

Car::Car() {
    name = "NoName";
    mph = -1;
    price = 0.0;
}

void Car::SetName(string carName) {
    name = carName;
}

void Car::SetMPH(int carMPH) {
    mph = carMPH;
}

void Car::SetPrice(double carPrice) {
    price = carPrice;
}

string Car::GetName() const {
    return name;
}

int Car::GetMPH() const {
    return mph;
}

double Car::GetPrice() const {
    return price;
}

class SportsCar : public Car {
public:
    void SetAcceleration(double carAcceleration) {
        acceleration = carAcceleration;
    }

    double GetAcceleration() const {
        return acceleration;
    }

    void display() override {
        Car::display();
        cout << "0-60mph Acceleration: " << acceleration << endl;
    }

private:
    double acceleration;
};

#endif /* CAR_H_ */

这是我的.cpp 文件:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

#include "Car.h"

int main() {

    Car* nullCar;
    Car* regularCar1;
    Car* regularCar2;
    SportsCar* nullSportsCar;

    vector<Car*> carsList;
    unsigned int i;

    nullCar = new Car();
    carsList.push_back(nullCar);

    regularCar1 = new Car();
    regularCar1->SetName("2022 Honda Civic");
    regularCar1->SetMPH(140);
    regularCar1->SetPrice(22550.79);
    carsList.push_back(regularCar1);

    regularCar2 = new Car();
    regularCar2->SetInfo("2022 Nissan Altima", 130, 24900.49);
    carsList.push_back(regularCar2);

    nullSportsCar = new SportsCar();
    carsList.push_back(nullSportsCar);

    for (i = 0; i < carsList.size(); i++) {
        carsList.at(i)->display();
        cout << endl;
    }

    return 0;
}

这是 output:

Car Information: 
Model Name: NoName
Top Speed: -1 miles per hour
Sales Price: $0

Car Information: 
Model Name: 2022 Honda Civic
Top Speed: 140 miles per hour
Sales Price: $22550.8

Car Information: 
Model Name: 2022 Nissan Altima
Top Speed: 130 miles per hour
Sales Price: $24900.5

Car Information: 
Model Name: NoName
Top Speed: -1 miles per hour
Sales Price: $0
0-60mph Acceleration: 0

它工作正常,但我希望最后一个 output "0-60mph Acceleration"读取-2而不是0 我只是不知道如何为子类声明一个默认构造函数来做到这一点。

你的意思是:

class SportsCar : public Car {
    public:
        SportsCar()
            : Car()                // Parent Init
               // Preferrer using initializer list for members
               // After Parents come members
            , acceleration(-2)     
        {}
        ....
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM