当前位置:  开发笔记 > 编程语言 > 正文

重载=在C++中

如何解决《重载=在C++中》经验,为你挑选了2个好方法。

我正在尝试重载赋值运算符,并希望清除一些事情,如果可以的话.

我有一个非成员函数,bool operator==( const MyClass& obj1, const myClass& obj2 )定义了我班级的oustide.

出于显而易见的原因,我无法找到任何私人会员.

所以我认为我需要做的是重载赋值运算符.并在非成员函数中进行赋值.

话虽如此,我想我需要做以下事情:

    使用我的功能并使用strcpy或复制信息strdup.我用过strcpy.

    转到赋值运算符,bool MyClass :: operator =(const MyClass&obj1);

    现在我们转到函数重载(==)并将obj2赋给obj1.

我没有复制构造函数,所以我坚持这些:

class Class
{
private:
m_1;
m_2;
public:
..
};

void Class::Func1(char buff[]) const
{   
    strcpy( buff, m_1 );
    return;
}
void Class::Func2(char buff[]) const
{
    strcpy( buff, m_2 );
    return;
}

bool Class& Class::operator=(const Class& obj)
{ 
    if ( this != &obj ) // check for self assignment.
    {
        strcpy( m_1, obj.m_1 ); 
        // do this for all other private members.
    }
    return *this;
}

bool operator== (const Class& obj1, const Class& obj2)
{
         Class MyClass1, MyClass2;
    MyClass1 = obj1;
    MyClass2 = obj2;

         MyClass2 = MyClass1;
         // did this change anything?
// Microsofts debugger can not get this far.
    return true;
}

所以你可能会说,我在这次超载中完全迷失了.有小费吗?我确实有一个完整的版本重载相同的运算符,只有::,所以我的私人成员不会失去范围.我将我的作业归为真,并且可以正常使用main.这是我书中的例子.

是否会重载赋值运算符,然后在operator==非成员函数中执行转换?那么在完成该步骤之后,我是否能够在main中为对象分配对象?



1> 1800 INFORMA..:

你在这里有几个明显的错误,并且对你实际想要实现的目标存在一些困惑.首先,赋值运算符operator =用于将值从一个实例复制到另一个实例.赋值运算符的返回值几乎总是对副本目标的非常量引用,因此您可以链接赋值:

Class & operator=(const Class &rhs)
{
  // copy the members

  return *this;
}

比较运算符operator ==用于执行两个实例的比较.如果它们相等,则返回布尔值true:

boolean operator==(const Class &rhs) const
{
  // check if they are equal
  return something;
}

混淆是为什么你试图复制值,或者可能分配给比较运算符中的实例?



2> tpdi..:

Op ==不是赋值运算符.T&Op =(const T&)是.

bool运算符==(const T&lhs,const T&rhs)是比较两个Ts的操作.如果lhs等于rhs,则返回true,无论您想要编码的"相等"的定义是什么.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有