【发布时间】:2014-03-04 04:55:51
【问题描述】:
我正在尝试实现一个复制构造函数和一个重载的赋值构造函数。 我有一个 Employee 类,它有三个数据成员。 1-姓名 2-职称 3-薪水。
Employee::Employee(const Employee &emp)
{
name = emp.name;
title = emp.title;
salary = emp.salary;
cout << "\nOverloaded copy constructor called\n";
}
Employee Employee::operator = (const Employee &emp) //Overloading the assignment operator.
{
name = emp.name;
title = emp.title;
salary = emp.salary;
cout << "\nOverloaded assignment operator called\n";
return emp; //Or return *this.
}
以下是我不明白的地方:
1-我还没有找到“this”指针。我的重载赋值运算符应该返回 *this 还是 emp 对象。因为在我看来,参数中的那个对象是赋值时的右手对象。那么我不应该用 *this 返回左手对象吗(如果 *this 会这样做)?
2-在主函数中,我尝试先调用赋值运算符,然后调用复制构造函数。所以我期待我会一个接一个地看到我在其中包含的 cout 语句,但是,这是我的输出:
调用的重载复制构造函数
重载赋值运算符称为
调用了重载的复制构造函数
称为
为什么会这样?
3-我必须用 const 传递对象吗?我正在学习的书没有。
主要是我写的
Employee x;
x = another;
Employee y = x;
“another”只是我之前在代码中初始化的一个(命名不佳的)Employee 对象。
所以不应该是第一个作业输出
“调用了重载赋值运算符”和第二个赋值(根据我的理解,这不是赋值而是副本)输出“调用了重载的复制构造函数”
【问题讨论】:
-
对于数字 2 和 3 - 向我们展示与之相关的代码。
标签: c++ this copy-constructor assignment-operator