水上由岐~ 2024-04-24 09:02 采纳率: 76.9%
浏览 2
已结题

在有默认构造函数的类重载>>

img


如图,为什么cin>>p2 1,2,3后,cout<<p2还是(0,0,0)啊

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-04-24 09:02
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    图片内容

    图片中显示的是一个C++程序的代码片段,该程序定义了一个名为point的类,该类有三个浮点数成员变量xyz,以及一个带有默认参数的构造函数。此外,还有对输入和输出运算符的重载。代码中还包含了main函数,其中创建了两个point对象p1p2,尝试从cin读取p2的值,然后输出p1p2

    问题概括

    问题是,尽管尝试从标准输入读取p2对象的值(1,2,3),但当使用cout输出p2时,其值仍然是默认构造函数所设置的(0,0,0)。

    问题出现原因

    问题出现的原因是,尽管类point中重载了输入运算符operator>>,但是在main函数中,并没有正确地调用这个重载的运算符来为p2赋值。代码中cin >> p2;这一行是错误的,因为point类的对象不能直接通过cin以这种方式输入。

    问题解决方案

    为了解决这个问题,需要确保使用类中定义的重载的输入运算符来正确地为point对象赋值。

    提供代码

    以下是修改后的代码,它将正确地从cin读取p2的值:

    #include <iostream>
    using namespace std;
    
    class point {
    private:
        float x, y, z;
    public:
        // 默认构造函数
        point(float a = 0, float b = 0, float c = 0) : x(a), y(b), z(c) {}
        
        // 输入运算符重载
        friend istream& operator>>(istream& input, point& p) {
            cout << "x=";
            input >> p.x;
            cout << "y=";
            input >> p.y;
            cout << "z=";
            input >> p.z;
            return input;
        }
        
        // 输出运算符重载
        friend ostream& operator<<(ostream& output, const point& p) {
            output << "(" << p.x << ", " << p.y << ", " << p.z << ")";
            return output;
        }
    };
    
    int main() {
        point p1(4, 5, 6), p2;
        
        // 正确使用重载的输入运算符
        cin >> p2;
        
        // 输出p1和p2
        cout << p1 << endl;
        cout << p2 << endl;
        
        return 0;
    }
    

    示例代码运行方式

    运行这段代码,你需要一个支持C++的编译器。将代码复制到一个文本编辑器中,保存为.cpp文件,然后使用编译器编译并运行它。例如,如果你使用的是g++,你可以在命令行中使用以下命令:

    g++ -o point_program point_program.cpp
    ./point_program
    

    示例代码预期运行结果

    当你运行修改后的程序并输入1 2 3时,程序将输出:

    x=4
    y=5
    z=6
    (4, 5, 6)
    x=1
    y=2
    z=3
    (1, 2, 3)
    

    这表明p2已经被正确地赋值为(1,2,3)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 创建了问题 4月24日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价