设计一个基类来描述火车票,然后由基类火车票类派生出高铁票和硬座票。用户输入火车票类型、位次类型及里程数,程序算出票价并输出,票价计算方法为某一种车票的单位里程票价乘以里程数。 参考数据: 其中:基类 (10 分)硬座票类(15分)高铁票类(15分)主函数测试(10分)
时间: 2024-01-13 20:02:32 浏览: 85
数据库课程设计 火车票
5星 · 资源好评率100%
下面是一个符合要求的实现:
```cpp
#include <iostream>
#include <string>
class TrainTicket {
public:
TrainTicket(double price_per_mile) : price_per_mile_(price_per_mile) {}
virtual double CalculatePrice(double miles) = 0;
protected:
double price_per_mile_; // 单位里程票价
};
class HardSeatTicket : public TrainTicket {
public:
HardSeatTicket(double price_per_mile) : TrainTicket(price_per_mile) {}
double CalculatePrice(double miles) override { return price_per_mile_ * miles; }
};
class HighSpeedRailwayTicket : public TrainTicket {
public:
HighSpeedRailwayTicket(double price_per_mile) : TrainTicket(price_per_mile) {}
double CalculatePrice(double miles) override { return price_per_mile_ * miles * 1.5; }
};
int main() {
double price_per_mile;
std::cout << "Please input the price per mile: ";
std::cin >> price_per_mile;
std::string ticket_type;
std::cout << "Please input the ticket type (HardSeatTicket/HighSpeedRailwayTicket): ";
std::cin >> ticket_type;
double miles;
std::cout << "Please input the miles: ";
std::cin >> miles;
TrainTicket* ticket = nullptr;
if (ticket_type == "HardSeatTicket") {
ticket = new HardSeatTicket(price_per_mile);
} else if (ticket_type == "HighSpeedRailwayTicket") {
ticket = new HighSpeedRailwayTicket(price_per_mile);
} else {
std::cerr << "Unknown ticket type: " << ticket_type << std::endl;
return 1;
}
double price = ticket->CalculatePrice(miles);
std::cout << "The price of " << ticket_type << " for " << miles << " miles is " << price << std::endl;
delete ticket;
return 0;
}
```
在这个实现中,TrainTicket类是一个抽象基类,它包含了单位里程票价,并定义了一个纯虚函数CalculatePrice来计算票价。HardSeatTicket和HighSpeedRailwayTicket两个派生类分别实现了CalculatePrice函数,并根据不同的车票类型计算票价。在CalculatePrice函数中,我们使用了多态性,以便根据实际对象的类型来调用相应的函数。
在main函数中,我们首先读取价格、车票类型和里程数。然后根据车票类型创建一个TrainTicket对象,并使用CalculatePrice函数来计算票价。最后输出计算结果,并释放动态分配的内存。
注意到在main函数中我们使用了一个基类指针来指向派生类对象,这是多态性的一种体现。由于派生类是基类的一种,因此可以通过基类指针来访问派生类对象的成员函数。同时,当基类指针指向派生类对象时,可以根据实际对象的类型来调用相应的函数,这就是多态性的具体应用。
阅读全文