C ++运营商附加费等级声明

时间:2014-09-26 13:37:30

标签: c++ operator-keyword

在我的.h我有

const CResultats & operator = (const CResultats & desResultats);

当我写这篇文章时:

CResultats CResultats :: operator = (const CResultats & desResultats) const
{
}

为什么不起作用? 我是c ++的新手...对不起,如果它是愚蠢的。

3 个答案:

答案 0 :(得分:1)

将运算符声明为

CResultats & operator = (const CResultats & desResultats);

并将其定义为

CResultats & CResultats :: operator = (const CResultats & desResultats)
{
}

您可以将操作符声明(并定义)为

const CResultats & operator = (const CResultats & desResultats);

但从语义上讲,这是一个无效的声明。

答案 1 :(得分:1)

此:

const CResultats & operator = (const CResultats & desResultats);

是一个函数的声明,它通过const-reference获取CResultats,并通过const-reference返回CRFesultats。该方法本身不是const

但是这个:

CResultats CResultats :: operator = (const CResultats & desResultats) const

const函数的函数定义,它通过const-reference获取CResultats,并返回CResultats个值。

这有两种不同的方式:

  1. 您声明函数通过const-reference返回,但您定义它返回值。
  2. 您将该函数声明为非const,但您将其定义为const。
  3. 如果要定义与声明匹配,则必须将定义更改为:

    const CResultats & CResultats::operator = (const CResultats & desResultats)
    {
      // ...
    }
    

答案 2 :(得分:0)

当你写这个"时,它不是"有效"因为它不符合签名;它与编译器不同

最后有const的成员运算符(函数)在const个对象上运行,就这么简单。在这种情况下,它没有任何意义,因为此运算符的唯一合理操作是修改对象