2014-09-24 71 views
2

說我有一類這樣重載一元運算符的後綴

class foo 
{ 
public: 
    char* operator+()   //unary operator - prefix before instance 
    { 
     return "SomeChar"; 
    } 
}; 

現在我可以用它作爲這樣

foo d; 
std::cout << +d; //unary operator used as prefix allowed 

現在,如果我想用一元運算符爲後綴,然後根據到this頁面

正如你在這種情況下,我們看到使用int作爲 修復後,當僞參數我們重新定義了一元增量(++) 的函數和遞減( - )重載運算符。你必須記住int 不是一個整數,而只是一個虛擬參數。您可以將其作爲 信號發送給編譯器,以創建 運算符的修復後符號。

我使用+而不是++,因爲兩者都是一元運算符

我可以做到以下幾點

class foo 
{ 
public: 
    char* operator+()   //unary operator - prefix before instance 
    { 
     return "SomeChar"; 
    } 

    //Added this for postfix unary operation 
    char* operator+ (int)  //unary operator - postfix before instance 
    { 
     return "SomeChar"; 
    } 
}; 

但是這個(後綴)不起作用

foo d; 
std::cout << (d+) ; //unary operator used as post fix ERROR (Expected an expression) 

對此問題有何建議/評論?

+5

沒有後綴+。您不能重載不存在的操作員。 – 2014-09-24 08:22:39

回答

3

+不能是後綴運算符。只有++--可以。

+0

我如何知道哪些一元運算符可以是後綴運算符? – Rajeshwar 2014-09-24 08:23:32

+0

@Rajeshwar [Wikipedia](https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Arithmetic_operators)實際上有一個很好的操作員列表。 – 2014-09-24 08:23:50

+0

所以在一元運算符只有++和 - 可以是後綴運算符? – Rajeshwar 2014-09-24 08:28:51

3

C++不允許你新的運營商。您只能過載現有的。該語言中沒有後綴+運算符,因此不能添加它。您可以重載前綴++和後綴++,因爲它們都存在。

1

有作爲後綴+運營商,該用戶定義的轉換沒有這樣的事情:一個偶然的機會

char* operator+ (int)  //unary operator - postfix before instance 
    { 
     return "SomeChar"; 
    } 

具有「int」參數不,嘗試寫:

foo d; 
std::cout << (d+3) ; // No longer an "expression required" error 

一個推薦閱讀是§5.3.1/一元運營商