我正在编写一个包含基类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/