C++ 输出错误(继承)
我试图使用继承运行程序,但在匹配所需输出时遇到问题。我将在下面发布所有内容 头文件:C++ 输出错误(继承),c++,debugging,C++,Debugging,我试图使用继承运行程序,但在匹配所需输出时遇到问题。我将在下面发布所有内容 头文件: class Vehicle { public: virtual void accelerate() = 0; virtual void brake() = 0; virtual std::ostream& display(std::ostream& ostr) const =0; }; cla
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 Car::速度(int值){
速度=数值;
如果(值>最大速度){
最大速度=数值;
}
else if(值<0){
速度=0;
}
}
int Car::maxSpeed()常量{
返回最大速度;
}
int Car::speed()常量{
返回速度;
}
汽车:汽车(整数米){
最大速度=m;
速度=0;
}
跑车::跑车(){
无乘客=1;
}
跑车::跑车(整速,整速):赛车(速度){
无乘客通行证;
}
void SportCar::accelerate(){
速度(速度()+40);
}
void跑车::制动器(){
速度(速度()-10);
}
标准::ostream&SportCar::显示(标准::ostream&os)常数{
如果(速度()>0){
os这些函数不输出新行:
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
}
void drive(汽车和cDrive)
{
cDrive.accelerate();
驱动制动器();
cDrive.display(cout);//<还应写入endl
}
无效停止(轿厢和cStop)
{
如果(cStop.speed()>0){
cStop.brake();
}
cStop.display(cout);//<还应写入endl
}
您可以看到。这些函数没有输出新行:
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
}
void drive(汽车和cDrive)
{
cDrive.accelerate();
驱动制动器();
cDrive.display(cout);//<还应写入endl
}
无效停止(轿厢和cStop)
{
如果(cStop.speed()>0){
cStop.brake();
}
cStop.display(cout);//<还应写入endl
}
您可以看到。您确定运行的是最新编译版本吗?跑车代码中的km/h
后没有句号。但是在“您的输出”中,有一个。我看不出代码有任何错误。如果ostream是通过引用传递并通过引用返回的,那么这应该可以正确地用endl
终止每一行。是的,我使用的是g++compielrI,我不明白是什么让它在正确的输出后在字符串上运行,也许这与newlineIn行有关输出的第5条:输出应该是:这辆跑车载着2名乘客,并且停着。但输出是:这辆跑车载着2名乘客,以20公里/小时的速度行驶。你确定你运行的是最新编译版本吗?在你的跑车代码中,km/h
后没有完全停止。但是在“你的产出",有一个。我看不出代码有任何错误。如果ostream是通过引用传递并通过引用返回的,那么这应该可以正确地用endl
终止每一行。是的,我使用的是g++compielrI,我不明白是什么让它在正确的输出后在字符串上运行,也许这与newlineIn行有关输出的第5条:输出应该是:这辆跑车载着2名乘客,并且停着。但是你的输出是:这辆跑车载着2名乘客,以20公里/小时的速度行驶。啊好的,我去了cpp文件,把新行放在显示屏后面().我现在收到的错误是:在输出的第5行中:输出应该是:这辆跑车载着2名乘客,并且停着。但是你的输出是:这辆跑车载着2名乘客,以20公里/小时的速度行驶。拜托,你现在把StackOverflow当作一种调试服务。很容易看出刹车的作用es不会将速度设置为零。我建议你花一点时间自己思考。突然出现了一个新问题。因此,好好想想。看看你的代码。使用调试器。所有这些都会帮助你成为一名更好的程序员。如果(cStop.speed()>0){cStop.brake();}我该如何设置brake()到0了吗?啊,好的,我去了cpp文件,把换行符放在显示屏后面().我现在收到的错误是:在输出的第5行中:输出应该是:这辆跑车载着2名乘客,并且停着。但是你的输出是:这辆跑车载着2名乘客,以20公里/小时的速度行驶。拜托,你现在把StackOverflow当作一种调试服务。很容易看出刹车的作用es不会将速度设置为零。我建议你花一点时间自己思考。突然出现了一个新问题。因此,好好想想。看看你的代码。使用调试器。所有这些都会帮助你成为一名更好的程序员。如果(cStop.speed()>0){cStop.brake();}我如何将brake()设置为0?