You need to enable JavaScript to run this app. C++TRAIN类对象数组指针实现代码的正确性与要求问询
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 05:54:05