C++TRAIN类对象数组指针实现代码的正确性与要求问询
概念澄清:题目中“对不同列车使用对象数组指针”的含义
- 该要求的核心是用指针数组管理多列独立的TRAIN类对象:定义一个元素类型为
TRAIN*(TRAIN类指针)的数组,数组中的每一个元素指向一个独立的TRAIN实例,每个实例对应一列不同的列车。这种方式可以灵活动态分配每列列车的对象内存,不需要提前固定所有列车的存储结构。 - 你代码中写的
TRAIN* ptr[10]就是这个结构的基础形式,方向是对的,但整体实现没有满足题目对类结构、功能逻辑的要求。
现有代码的不符合项梳理
- 类成员的语义完全错位:题目要求
Arrival_Hr、Arrival_Min存储列车的计划到达时间(时、分),你在构造函数里直接把这两个成员赋值成了两个时间的差值,违背了成员的设计要求。 - 缺失题目强制要求的
TimeDiff()成员函数:题目明确要求时差计算逻辑封装在独立的TimeDiff()函数中,你把计算逻辑硬塞进了构造函数,结构完全不符合要求。 - 构造函数的参数设计逻辑错误:按照题目要求,构造函数应该只负责初始化列车的基础属性(车次、车名、计划到达时分),晚点的实际到达时间是调用
TimeDiff()时再传入的参数,不应该在构造对象时就传入两组时间做计算。 - 时间计算逻辑不严谨:你直接用“时减时、分减分”的方式算差值,没有处理分钟借位的场景,比如计划到达时间是2小时5分,实际到达是1小时40分,直接减分会得到负的分钟数,结果完全错误。
- 编译依赖不规范:代码中使用了
string类型但是没有显式引入<string>头文件,部分严格标准的编译环境下会直接报错,属于隐式依赖标准库的不规范写法。 - 存在内存泄漏:用
new创建的TRAIN对象在程序结束前没有通过delete释放,属于不规范的C++写法。
符合题目要求的参考实现
#include <iostream> #include <string> // 显式引入string头文件,符合编译规范 using namespace std; class TRAIN{ public: // 题目要求的类成员 int Train_Number; // 车次 string Train_Name; // 列车名称 int Arrival_Hr; // 计划到达小时 int Arrival_Min; // 计划到达分钟 // 构造函数:仅负责初始化列车基础属性 TRAIN(int num, string name, int planHr, int planMin) { Train_Number = num; Train_Name = name; Arrival_Hr = planHr; Arrival_Min = planMin; } // 题目要求的TimeDiff成员函数:传入实际到达的时、分,计算时差并输出 void TimeDiff(int actualHr, int actualMin) { // 统一转换为分钟计算,避免时分分开减的逻辑错误 int planTotalMin = Arrival_Hr * 60 + Arrival_Min; int actualTotalMin = actualHr * 60 + actualMin; int diff = actualTotalMin - planTotalMin; // 计算拆分后的时、分差 int diffHr = diff / 60; int diffMin = diff % 60; // 输出指定列车的计算结果 cout << "车次 " << Train_Number << "(" << Train_Name << "):"; if (diff > 0) { cout << "晚点 " << diffHr << " 小时 " << diffMin << " 分钟" << endl; } else if (diff < 0) { // 把负的时间差转回正常显示 cout << "早到 " << -diffHr << " 小时 " << -diffMin << " 分钟" << endl; } else { cout << "准点到达" << endl; } } }; int main() { // 按照题目要求定义对象指针数组,每个元素指向一列独立的TRAIN对象 const int TRAIN_COUNT = 2; // 演示2列列车的场景 TRAIN* trainPtrArr[TRAIN_COUNT]; // 给指针数组的每个元素赋值,指向不同的列车实例 trainPtrArr[0] = new TRAIN(100, "Jansadabti", 2, 30); trainPtrArr[1] = new TRAIN(200, "Rajdhani Express", 1, 20); // 针对每列列车,传入实际到达时间调用TimeDiff方法计算结果 trainPtrArr[0]->TimeDiff(4, 40); // 第0列列车实际4:40到达 trainPtrArr[1]->TimeDiff(5, 30); // 第1列列车实际5:30到达 // 补充释放动态申请的对象内存,避免泄漏 for (int i = 0; i < TRAIN_COUNT; i++) { delete trainPtrArr[i]; } return 0; }
上述代码的核心:用指针数组
trainPtrArr管理不同列车的对象,完全符合题目“对不同列车使用对象数组指针”的要求,类结构包含所有题目要求的成员和TimeDiff()函数,时间计算逻辑经过单位换算处理,没有时分错位的问题。
内容的提问来源于stack exchange,提问作者Cosmos396
相关产品推荐
相关产品推荐

