2014-09-26 93 views
0

在我的.h我有C++運算符Surchage類聲明

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

當我寫這篇文章:

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

爲什麼不工作? 我是新來的C++ ...如果對不起這是愚蠢的。

+2

閱讀:[?意義的「常量」最後的C++方法聲明】(HTTP: //sackoverflow.com/questions/751681/meaning-of-const-last-in-ac-method-declaration) – Csq 2014-09-26 13:39:34

回答

1

聲明運營商爲

CResultats & operator = (const CResultats & desResultats); 

,並把它定義爲

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

你可以聲明(和定義)的operastor作爲

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

但是語義上是無效的聲明。

+0

我很遺憾不允許改變運營商的代碼.. – Sadboy 2014-09-26 13:42:54

+0

@Sadboy在這種情況下改變將操作符的類型返回給'const CResultats&'。 Vlad的版本根據賦值運算符的慣例(即您的定義非常規)。 – BeyelerStudios 2014-09-26 13:46:17

+0

@BeyelerStudios和'const'賦值運算符的服務目的是什麼?這不是約定,而是有意義的。 – 2014-09-26 13:47:19

0

當你寫的「本」,這不是「有效的」,因爲它不符合簽名;編譯器不同

具有const的成員操作符(函數)最後在const對象上操作,就像那樣簡單。但是,在這種情況下,它沒有任何意義,因爲此運算符的唯一合理操作是修改對象

1

此:

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

是通過常量引用採取CResultats的函數的聲明,和由常量引用返回CRFesultats。該方法本身不是const

但這:

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

是一個const功能,以const引用需要CResultats一個函數的定義,並返回一個CResultats的價值。

這些都是在兩個方面兩個不同的東西:

  1. 您聲明以const引用返回功能,但你把它定義它的返回值。
  2. 您聲明該函數爲非const,但您將其定義爲const。

如果要定義相匹配的聲明,那麼你必須更改定義:

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