【发布时间】:2014-08-13 13:41:05
【问题描述】:
试图了解如何制作赋值类运算符。成员变量constant_name 用于标识对象。成员变量changeable_name 用于在赋值期间获得影响。我需要这个来了解谁影响了谁以及结果是什么。每个对象在创建过程中都会获得唯一的constant_name。
class turbo
{
static string m;
public:
string changable_name ="";
string constant_name ="";
void nm()
{
m=m+"A";
changable_name=m;
constant_name=changable_name;
};
void printID()
{
printf("constant_name=%s changable_name=%s ",constant_name.c_str(),changable_name.c_str());
};
turbo() {
nm();
printID();
printf("default constructor \n");
};
turbo & operator = (turbo & value){ printID(); printf("= operator\n"); if (!(&value==this)) { changable_name = value.constant_name; } ; return *this; }
turbo (turbo&) {nm(); printID(); printf("copy constructor\n");}
};
string turbo::m;
int main( int argc, char ** argv )
{
turbo f;
turbo ff;
f=ff;
printf("--- result ---\n");
f.printID();
}
当= 运算符在顶部的代码中描述时,我有输出:
constant_name=A changable_name=A default constructor
constant_name=AA changable_name=AA default constructor
constant_name=A changable_name=A = operator
--- result ---
constant_name=A changable_name=AA
字段changable_name 已从AA 复制到A,这很好。
现在如果我删除 turbo value 中的参考符号:
turbo & operator = (turbo value){ printID(); printf("= operator\n"); if (!(&value==this)) { changable_name = value.constant_name; } ; return *this; }
我有以下输出:
constant_name=A changable_name=A default constructor
constant_name=AA changable_name=AA default constructor
constant_name=AAA changable_name=AAA copy constructor
constant_name=A changable_name=A = operator
--- result ---
constant_name=A changable_name=AAA
新对象AAA 已创建并分配给对象A。 AA 完全没有影响。为什么编译器决定激活复制构造函数然后赋值运算符?我想复制构造函数在“=”运算符的右侧被激活。
另一种情况。
现在,如果我删除 turbo operator 中的参考符号:
turbo operator = (turbo & value){ printID(); printf("= operator\n"); if (!(&value==this)) { changable_name = value.constant_name; } ; return *this; }
我有以下输出:
constant_name=A changable_name=A default constructor
constant_name=AA changable_name=AA default constructor
constant_name=A changable_name=A = operator
constant_name=AAA changable_name=AAA copy constructor
--- result ---
constant_name=A changable_name=AA
这完全让我感到困惑。我想AAA 是在= 的左侧创建的。 AAA 在分配中根本没有采取任何行动。结果A 被分配给AA。但是为什么需要创建 AAA 呢?
【问题讨论】:
-
编译代码,选择生成asm代码,你就知道了。
标签: c++