C++如何通过运算符重载实现多类型输入读取、类成员赋值及输出
C++ 重载>>/<<运算符实现多用户多类型数据读写方案
核心实现逻辑
你需要先定义存储用户数据的自定义类,将不同类型的用户数据声明为类成员,再通过友元全局函数重载>>(输入流提取运算符)和<<(输出流插入运算符),最后通过循环完成5名用户的输入读取和批量输出。
完整实现代码
#include <iostream> #include <string> #include <vector> using namespace std; // 自定义用户信息类,存储不同类型的用户数据 class UserInfo { // 声明运算符为友元,允许访问私有成员 friend istream& operator>>(istream& in, UserInfo& user); friend ostream& operator<<(ostream& out, const UserInfo& user); private: string name; // 字符串类型:用户名 int age; // 整型:年龄 double height; // 浮点型:身高(单位m) bool is_vip; // 布尔型:是否为会员 }; // 重载>>运算符:读取用户输入赋值给类成员 istream& operator>>(istream& in, UserInfo& user) { cout << "请依次输入用户姓名、年龄、身高、是否为会员(1是/0否),用空格/回车分隔:" << endl; in >> user.name >> user.age >> user.height >> user.is_vip; // 可自行添加输入合法性校验逻辑,比如年龄为正、身高范围合理等 return in; } // 重载<<运算符:格式化输出类的所有成员数据 ostream& operator<<(ostream& out, const UserInfo& user) { out << "姓名:" << user.name << ",年龄:" << user.age << ",身高:" << user.height << "m" << ",会员状态:" << (user.is_vip ? "是" : "否") << endl; return out; } int main() { const int USER_COUNT = 5; vector<UserInfo> users(USER_COUNT); // 读取5名用户的输入数据 for (int i = 0; i < USER_COUNT; i++) { cout << "=== 输入第" << i+1 << "名用户信息 ===" << endl; cin >> users[i]; } // 批量输出所有用户数据 cout << "\n=== 所有5名用户信息如下 ===" << endl; for (const auto& user : users) { cout << user; } return 0; }
注意事项
- 输入输出运算符必须重载为全局函数,不能作为类的成员函数:因为运算符的左操作数是流对象(
cin/cout),不是自定义类对象 - 如果类成员为私有属性,必须将两个重载运算符声明为类的友元,否则无法直接访问成员变量
- 可根据实际需求调整类的成员类型和数量,重载运算符内的读写逻辑对应修改即可
- 输入时如果出现类型不匹配的问题,可以自行添加流状态校验和错误处理逻辑,提升程序健壮性
内容的提问来源于stack exchange,提问作者Xhyer
相关产品推荐
相关产品推荐

