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

C++类B继承类A仅显示int成员,string成员不显示的原因

问题原因及解决思路

核心原因1:友元函数无法访问继承来的protected成员

你重载的>>和<<运算符如果是类B的友元函数,它们只能直接访问B自身的成员,没法直接触碰从A继承来的protected成员(包括string和int类型)。那为什么int的age、ph_no能显示?大概率是你在类B里重复定义了这两个同名int成员,或者误打误撞通过其他方式(比如B的成员函数)给它们赋了值,而string类型的成员没被正确赋值,所以输出为空。

核心原因2:输入逻辑的字符分隔问题

如果你的输入用空格、换行符分隔字段,cin >> string会在遇到第一个空白字符时停止读取。比如输入Alice 2000-01-01 alice@xxx.com CS 20 1234567890 101,cin >> name只会读到Alice,后续的dob、email等string成员会被跳过;但int类型的读取会自动跳过空白字符,所以能正常读入,最终出现string为空、int正常显示的差异。

解决办法

  1. 让基类开放访问权限:在类A中把重载的>>和<<声明为友元,这样它们就能直接访问A的protected成员。
  2. 派生类提供接口:在类B中编写public的get/set函数,比如void set_name(const string& n) { name = n; },让重载的输入输出运算符通过这些函数操作继承来的成员。
  3. 修正输入逻辑:如果string包含空格,使用getline(cin, name)读取,但要注意先通过cin.ignore()处理cin残留的换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:41:32