You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Booking模板类代码运行时儿童姓名输出出现异常拼接问题

问题触发原因
  • 核心直接原因:输出姓名时错误拼接了冗余值。你在输出成人/儿童姓名的代码中,同时打印了数组存储的姓名a[i]/c[j]和obj2对象存储的姓名,而obj2只能存储单组成人+儿童姓名,循环赋值后最终存储的是最后一名儿童的姓名z,所以每个儿童姓名都会和z拼接,出现xz/yz/zz的异常输出。
  • 次要逻辑错误:
    1. 变量j未初始化就被使用:在成人输入的循环中调用obj2.setData(a[i],c[j])时,j还未赋值,属于未定义行为。
    2. 数组越界访问风险:成人输入循环结束后i的值为a1,在儿童输入循环中调用obj2.setData(a[i],c[j])时,a[i]访问了a数组的越界位置,读取到无效值。
    3. 模板类对象使用不符合预期:Booking<string, string>类型的obj2仅能存储单组姓名,你试图用它存储所有用户姓名的逻辑本身不成立。
修复方案

以下为最小改动方案,保留原有代码结构仅修正错误逻辑:

#include<iostream>
using namespace std;

template <typename A, typename C>
class Booking
{
    private:
        A adult;
        C child;
      
    public:
        void setData(A x, C y)
        {
            adult = x;
            child = y;
        }
        A getAdultData()
        {
            return adult;
        }
        C getChildData()
        {
            return child;
        }
};

int main()
{
    int a1,c1;
    
    string a[10];
    string c[10];

    Booking <int, int> obj1;

    cout<< "Enter the number of Adult : ";
    cin>>a1;
    cout<< "Enter the number of Child : ";
    cin>>c1;
    obj1.setData(a1,c1);
    cout<<"Name atleast one of the Adult and a Child"<<endl;

    // 输入成人姓名,移除无意义的obj2操作
    for(int i=0;i<a1;i++)
    {
        cout<< "Adult name : ";
        cin>>a[i];
    }

    // 输入儿童姓名,移除无意义的obj2操作
    for(int j=0;j<c1;j++)
    {
        cout<< "Child name : ";
        cin>>c[j];
    }
    cout<<"Number of Adult Customers : "<<obj1.getAdultData()<<endl;
    cout<<"Number of Child Customers : "<<obj1.getChildData()<<endl;

    // 输出时移除obj2的冗余拼接
    for(int i=0;i<a1;i++)
    {
        cout<<"Name of Adult "<<i+1<<" : "<<a[i]<<endl;
    }
    for(int j=0;j<c1;j++)
    {
        cout<<"Name of Child "<<j+1<<" : "<<c[j]<<endl;
    }
    
    return 0;
}

优化建议

  • 替换固定长度的字符串数组为vector<string>,避免人数超过10时的数组越界问题。
  • 如果需要用模板类存储所有姓名,可以声明Booking<string, string>类型的数组/vector,每个对象存储一组成人+儿童的绑定信息,适配业务需求。

内容的提问来源于stack exchange,提问作者Anish Dalvi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:57:02