[英]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.