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
相关产品推荐
相关产品推荐

