首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >c++中的赋值运算符重载

c++中的赋值运算符重载
EN

Stack Overflow用户
提问于 2012-04-10 00:26:04
回答 4查看 114.4K关注 0票数 37

我使用了以下代码来实现赋值运算符重载:

代码语言:javascript
复制
SimpleCircle SimpleCircle::operator=(const SimpleCircle & rhs)
{
     if(this == &rhs)
        return *this;
     itsRadius = rhs.getRadius();
     return *this;
}

我的复制构造函数是:

代码语言:javascript
复制
SimpleCircle::SimpleCircle(const SimpleCircle & rhs)
{
    itsRadius = rhs.getRadius();
}

在上面的操作符重载代码中,由于创建了一个新对象,因此调用了复制构造函数;因此,我使用了以下代码:

代码语言:javascript
复制
SimpleCircle & SimpleCircle::operator=(const SimpleCircle & rhs)
{
    if(this == &rhs)
       return *this;
    itsRadius = rhs.getRadius();
    return *this;
}

它工作得很好,并且避免了复制构造函数的问题,但是(对我来说)这方面有什么未知的问题吗?

EN

回答 4

Stack Overflow用户

发布于 2012-04-10 00:34:32

在这种情况下,你最好跳过对自我赋值的检查--当你只赋值一个似乎是简单类型(可能是双精度类型)的成员时,通常比避免赋值更快,所以你最终会得到:

代码语言:javascript
复制
SimpleCircle & SimpleCircle::operator=(const SimpleCircle & rhs)
{
    itsRadius = rhs.getRadius(); // or just `itsRadius = rhs.itsRadius;`
    return *this;
}

我意识到许多旧的和/或质量较低的书建议检查自我分配。然而,至少在我的经验中,没有它你会过得更好的情况非常罕见(如果操作员依赖于它的正确性,它几乎肯定不是异常安全的)。

顺便说一句,为了定义一个圆,你通常需要一个圆心和一个半径,当你复制或赋值时,你想要同时复制/赋值。

票数 7
EN

Stack Overflow用户

发布于 2020-06-01 23:52:46

代码语言:javascript
复制
#include<iostream>

using namespace std;

class employee
{
    int idnum;
    double salary;
    public:
        employee(){}

        employee(int a,int b)
        {
            idnum=a;
            salary=b;
        }

        void dis()
        {
            cout<<"1st emp:"<<endl<<"idnum="<<idnum<<endl<<"salary="<<salary<<endl<<endl;
        }

        void operator=(employee &emp)
        {
            idnum=emp.idnum;
            salary=emp.salary;
        }

        void show()
        {
            cout<<"2nd emp:"<<endl<<"idnum="<<idnum<<endl<<"salary="<<salary<<endl;
        }
};

main()
{
    int a;
    double b;

    cout<<"enter id num and salary"<<endl;
    cin>>a>>b;
    employee e1(a,b);
    e1.dis();
    employee e2;
    e2=e1;
    e2.show();  
}
票数 1
EN

Stack Overflow用户

发布于 2012-04-10 00:34:43

这是使用操作符重载的正确方法,现在你可以通过引用来获取对象,避免了值复制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10076285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档