gpt4 book ai didi

c++ - 错误的输出(继承)

转载 作者:太空宇宙 更新时间:2023-11-04 13:18:45 25 4
gpt4 key购买 nike

我正在尝试使用继承来运行程序,但在匹配所需输出时遇到了问题。我将在下面发布所有内容。

头文件:

    class Vehicle {
public:

virtual void accelerate() = 0;
virtual void brake() = 0;
virtual std::ostream& display(std::ostream& ostr) const =0;

};


class Car: public Vehicle {
int speed_;
int maxSpeed_;

protected:
void speed(int value);
int maxSpeed() const;
public:
int speed() const;
Car(int m = 100);

};


class SportCar: public Car{
int noOfPassengers_;

public:
SportCar();
SportCar(int speed, int pass);

// implementations of Vehicle's pure virtual methods
void accelerate();
void brake();
std::ostream& display(std::ostream& os) const;

};

class PickupTruck: public Car {
int loadAmount_;
char loadedMaterial_[31];

public:
PickupTruck();
void load(const char* loadedMaterial, int loadAmount);
void unload();
bool isEmpty()const;

// implementations of Vehicle's pure virtual methods
void accelerate();
void brake();
std::ostream& display(std::ostream& os) const;
};

CPP 文件:

void Car::speed(int value) {
speed_ = value;

if (value > maxSpeed_ ) {
maxSpeed_ = value;
}
else if (value < 0) {
speed_ = 0;
}
}

int Car::maxSpeed()const {
return maxSpeed_;
}

int Car::speed() const {
return speed_;
}

Car::Car(int m) {
maxSpeed_ = m;
speed_ = 0;

}





SportCar::SportCar() {
noOfPassengers_ = 1;
}

SportCar::SportCar(int speed, int pass): Car(speed) {

noOfPassengers_ = pass;
}

void SportCar::accelerate() {
speed(speed() + 40);
}

void SportCar::brake() {
speed(speed() - 10);
}

std::ostream& SportCar::display(std::ostream& os) const {
if (speed() > 0) {
os << "This sport car is carrying" << noOfPassengers_ << "passengers and is traveling at a speed of " << speed() << "km/h";
}
else {
os << "This sport car is carrying" << noOfPassengers_ << "passengers and is parked";
}
return os;
}



PickupTruck::PickupTruck() {
loadAmount_ = 0;
loadedMaterial_[0] = char(0);
}
bool PickupTruck::isEmpty()const {
return loadAmount_ == 0;
}
void PickupTruck::load(const char* loadedMaterial, int loadAmount) {
std::strcpy(loadedMaterial_, loadedMaterial);
loadAmount_ = loadAmount;
}
void PickupTruck::accelerate() {
speed(speed() + 20);
}
void PickupTruck::brake()
{
speed(speed() - 5);
}
void PickupTruck::unload() {
loadAmount_ = 0;
}
std::ostream& PickupTruck::display(std::ostream& os) const
{
os << "This pickup truck is ";
if (isEmpty()) {
os << "not carrying any load";
}
else {
os << "carrying " << loadAmount_ << " kgs of " << loadedMaterial_;
}
if (speed() > 0) {
os << ", traveling at the speed of " << speed() << " km/h.";
}
else {
os << " and is parked.";
}
return os;
}

主要(下面有所需的输出):

void drive(Car& cDrive) {
cDrive.accelerate();
cDrive.brake();
cDrive.display(cout);

}
void stop(Car& cStop) {

if (cStop.speed() > 0) {
cStop.brake();
}
cStop.display(cout);
}

int main()
{
SportCar Tesla(240, 2);
PickupTruck Ford;
Tesla.display(cout) << endl;
Ford.display(cout) << endl;
Ford.load("Bricks", 3500);
drive(Tesla);
drive(Ford);
stop(Tesla);
stop(Ford);
Ford.unload();
Tesla.display(cout) << endl;
Ford.display(cout) << endl;
return 0;
}
/* output
This sport car is carrying 2 passengers and is parked.
This pickup truck is not carrying any load and is parked.
This sport car is carrying 2 passengers and is traveling at a speed of 30 km/h.
This pickup truck is carrying 3500 kgs of Bricks, traveling at the speed of 15 km/h.
This sport car is carrying 2 passengers and is parked.
This pickup truck is carrying 3500 kgs of Bricks and is parked.
This sport car is carrying 2 passengers and is parked.
This pickup truck is not carrying any load and is parked.
*/

我得到的错误:

在输出的第 5 行:输出应该是:这辆跑车载有 2 名乘客并停在路边。但是你的输出是:这辆跑车载有 2 名乘客,并以 20 公里/小时的速度行驶。

我已经坚持了一段时间了,如果能在正确的方向上提供任何帮助,那将是非常好的。谢谢!

最佳答案

这些函数不输出新行:

void drive(Car& cDrive)
{
cDrive.accelerate();
cDrive.brake();
cDrive.display(cout); //< Should also write endl
}

void stop(Car& cStop)
{
if (cStop.speed() > 0) {
cStop.brake();
}
cStop.display(cout); //< Should also write endl
}

可以看到working code here .

关于c++ - 错误的输出(继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36145658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com