lao_ba_ta_die 2023-03-27 12:07 采纳率: 0%
浏览 53

用重载后的+计算并返回链式结构后为啥不能用重载后的=赋值

这个是我重载的+

img


这是我的链式结构

img


这是我重载的=

img


这是主函数

img


这是报错

img

  • 写回答

2条回答 默认 最新

  • Bony- 2023-03-27 12:43
    关注

    在C++中,对于一个类的重载运算符,包括重载的"+"运算符,都可以返回一个值,但是这个返回值并不是一个左值。因此,对于链式结构,在重载后的"+"运算符中返回的是一个新的链式结构对象,而不是原始的对象本身。
    因此,不能直接使用重载后的"="运算符来赋值新的链式结构对象,因为在这种情况下,重载后的"="运算符期望的是左值,但是重载后的"+"运算符返回的是右值。
    为了解决这个问题,可以在链式结构类中定义一个特殊的函数,比如"copyFrom()"函数,来完成新对象的赋值。这个函数接受一个右值作为参数,并将其赋值给当前对象。例如:

    class LinkedList {
        // ...类定义...
    public:
        LinkedList& operator+(const LinkedList& other) const {
            LinkedList result = *this; // 创建一个新对象
            // 在新对象上执行加法操作
            // ...
            return result;
        }
        void copyFrom(const LinkedList& other) {
            // 执行深拷贝操作
            // ...
        }
    };
    
    

    然后,可以使用以下代码进行链式结构对象的赋值:

    LinkedList a, b, c;
    // 假设已经将元素添加到了 ab 中
    c.copyFrom(a + b); // 赋值新的链式结构对象
    
    

    这样,就可以通过在链式结构类中定义一个特殊的函数来解决赋值问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月27日

悬赏问题

  • ¥15 请问有会的吗,用MATLAB做
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 ARIMA模型时间序列预测用pathon解决
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序,怎么查看客户esp32板子上程序及烧录地址
  • ¥50 html2canvas超出滚动条不显示