2

我有以下代码:

class Sales_item {
     public:
     int ii;
         Sales_item& operator=(const Sales_item &item)
     {
        cout << "Inside assignment\n"; // Line 1
        ii = item.ii;
        return *this; // Line 2
     }
};

然后,我做了:(只是一个例子)

Sales_item s;
Sales_item s1 = s;

但是Line 1没有执行。如何“查看”重载赋值中的代码以执行?例如,可能有复杂的代码,我想调试?我试图在第 1 行设置断点,但程序没有跳转到该断点。

为什么Line 2退货*this?我试图改变void并得到相同的结果。有什么不同?

4

2 回答 2

5

您正在初始化s1,而不是分配给它。

Sales_item s1 = s;

调用编译器生成的复制构造函数。它相当于:

Sales_item s1(s);

你需要:

Sales_item s1;
s1 = s;

为什么Line 2退货*this?- 这是实现赋值运算符的惯用方式,我建议你坚持下去。它有助于方法和操作链接。

于 2012-05-03T13:57:34.533 回答
1

关于问题 2:您返回 *this 是为了启用链式分配,例如 s1 = s2 = s3 = ...

于 2012-05-03T13:59:59.553 回答