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

C++如何使用构造函数初始化对象数组并接收用户输入参数

实现方案

原代码存在3个需要修复的问题:

  • 类成员默认访问权限为private,当前写的构造函数、getInfo方法都无法被类外代码调用,需要手动指定为public
  • 标准C++不支持栈上变长数组(car c1[n]属于非标准的编译器扩展,兼容性差),推荐使用std::vector存储动态数量的对象
  • 输入车辆总数后需要清空cin的换行缓冲区,避免后续getline读入空内容

完整可运行代码如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class car{
// 指定公有访问权限,外部才可调用构造函数和成员方法
public:
    string owner;
    string car_num;
    string issue_date;

    car(string o, string cn, string id)
    {
        owner = o;
        car_num  = cn;
        issue_date = id;
    }

    void getInfo()
    {
        cout << "Car's Owner's Name : " << owner << endl;
        cout << "Car's Number : " << car_num << endl;
        cout << "Car's Issue Date : " << issue_date << endl;
    }
};

int main()
{
    int n;
    cout << "Enter total number of cars stored in your garage : \n";
    cin >> n;
    // 清空输入缓冲区残留的换行符,避免后续getline读取空行
    cin.ignore();
    
    // 用vector存储car对象,支持动态长度,无需手动管理内存
    vector<car> garage;
    garage.reserve(n); // 预分配空间,提升运行效率
    
    for(int i = 0; i < n; i++){
        string o, cn, id;
        cout << "\n===== 输入第" << i+1 << "辆车的信息 =====" << endl;
        cout << "输入车主姓名:";
        getline(cin, o);
        cout << "输入车牌号:";
        getline(cin, cn);
        cout << "输入注册日期:";
        getline(cin, id);
        // 构造car对象加入vector
        garage.emplace_back(o, cn, id);
    }
    
    // 测试打印所有车辆信息
    cout << "\n===== 所有车辆信息如下 =====" << endl;
    for(auto &item : garage){
        item.getInfo();
        cout << "--------------------------" << endl;
    }

    return 0;
}

如果你不想依赖std::vector需要用原生数组实现,需要注意:你自定义了带参构造函数后,编译器不会生成无参默认构造函数,无法直接申请car类型的动态数组,只能通过二级指针存储每个对象的指针,写法如下,注意使用完需要手动释放内存避免泄漏:

int main()
{
    int n;
    cout << "Enter total number of cars stored in your garage : \n";
    cin >> n;
    cin.ignore();
    
    car** garage = new car*[n];
    for(int i = 0; i < n; i++){
        string o, cn, id;
        cout << "\n===== 输入第" << i+1 << "辆车的信息 =====" << endl;
        cout << "输入车主姓名:";
        getline(cin, o);
        cout << "输入车牌号:";
        getline(cin, cn);
        cout << "输入注册日期:";
        getline(cin, id);
        garage[i] = new car(o, cn, id);
    }
    
    cout << "\n===== 所有车辆信息如下 =====" << endl;
    for(int i = 0; i < n; i++){
        garage[i]->getInfo();
        cout << "--------------------------" << endl;
    }

    // 手动释放内存
    for(int i = 0; i < n; i++){
        delete garage[i];
    }
    delete[] garage;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:24:04