gpt4 book ai didi

c++ - 在C++中调用重写的方法后得到错误的输出

转载 作者:行者123 更新时间:2023-12-02 09:48:14 25 4
gpt4 key购买 nike

我正在编写一个包含基类RentedVehicle及其派生类FuelVehicle和FuelVehicle派生类作为Car类的程序。我的代码是:

#include<iostream>
using namespace std;

class RentedVehicle {
private:
double baseFee;
public:
RentedVehicle() {};
RentedVehicle(int a): baseFee(a) {
};

virtual double getCost() {
return baseFee;
}

};

class FuelVehicle: public RentedVehicle {
private:
double kms;
public:
int mileageFees = 0;
FuelVehicle() {};
FuelVehicle(double a, int b): RentedVehicle(a) {
kms = b;
};

double getMileageFees() {

if (kms < 100) {
mileageFees = 0.2*kms;
} else if (kms >= 100 && kms <= 400) {
mileageFees = 0.3*kms;
} else if (kms > 400) {
double x = (kms - 400);
mileageFees = (0.3*kms) + (0.5*x);
}
return mileageFees;
}

double getKms() {
return kms;
}
};

class Car: public FuelVehicle {
private:
int seats;
public:
Car() {};
Car(int a, double b, double c): FuelVehicle(b, c) {
seats = a;
};
double bF = getCost();
double mF = getMileageFees();
double getCost() {
double cost = mF + (bF*seats);
return cost;
}
int getSeats() {
return seats;
}
};


int main() {
Car c1(5, 500, 20);
double y = c1.getCost();
cout << "cost is: " << y << endl;
return 0;
}

当我调用重写的getCost()方法时,它显示的 成本是:4 。但是,对我给定的参数而言,费用应为 2504
怎么了

最佳答案

在这行上:

double bF = getCost();
Car类中,您正在调用 getCost的最派生版本。但是这个功能:
double getCost() {
double cost = mF + (bF*seats);
return cost;
}
将调用未定义的行为,因为在初始化之前在此函数中使用 bF
相反,您可以使用 getCost的基类版本,如下所示:
double bF = FuelVehicle::getCost();
打印出期望值2504。
这是 demo

关于c++ - 在C++中调用重写的方法后得到错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63079627/

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