2011-03-09 88 views
0

所以我在一個基本的編程II類。我們必須創建一個程序,使4種不同的功能可以改變操作員的工作方式。我查閱了多個示例和一組顯示如何執行此操作的文本,但我無法確定任何代碼的含義。對我來說,這樣的事情應該起作用。運算符在C++中重載

int operator++() 
{ 
    variableA--; 
} 

對我來說,這表示,如果遇到++,然後 - 從變量,現在很明顯它不喜歡這個工作。我發現的所有例子都創建了自己的數據類型。有沒有辦法使用intdouble超載運營商?

+0

運算符重載比一個人的最初直覺所暗示的要多得多。你的老師在給你一個練習之前應該先對它進行修改,因爲它起初似乎很有用,而且有很多特殊情況。當然你的書有一個部分。沒有簡單的方法可以坐下來閱讀。 – 2011-03-09 03:51:33

+0

他從來沒有超過它,我們甚至沒有書。所以這就是我來這裏尋求幫助的原因。 – Cistoran 2011-03-09 03:58:21

+0

無賴。在這本免費書中有關於它們的完整章節:[用C++思考](http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html),第12章。值得一讀,儘管本書總的來說只是如此-所以。 – 2011-03-09 04:02:52

回答

6

所有的例子創建自己的數據類型,因爲這是操作符重載的規則之一:An overloaded operator must work on at least one user-defined type

即使您可以將整數重載爲++,編譯器也不知道要使用哪一個 - 您的版本或常規版本;這將是不明確的。你似乎認爲操作符是單個函數,但每個重載是一個完全獨立的函數,它的功能特徵(類型和有時參數個數)是有區別的,同時具有相同的運算符符號(這是「overloading 「)。

所以,你不能重載++總是做一些不同的事情;這真的是操作符重寫,C++不允許。

可以定義爲++你雖然創建了一個類型:

class MyType { 
public: 
    int value; 
}; 

MyType const& operator++(MyType& m) { // Prefix 
    ++m.value; 
    return m; 
} 

const MyType operator++(MyType& m, int) { // Postfix (the 'int' is just to differentiate it from the prefix version) 
    MyType temp = m; 
    ++m.value; 
    return temp; 
} 

int main() { 
    MyType m; 
    m.value = 0; 
    m++; // Not m.value++ 
    cout << m.value; // Prints 1 
} 

注意,這組++運營商是在MyType的類外定義,但可能已不是定義內(他們將獲得以這種方式訪問​​非公共成員),儘管他們的實現會有些不同。

+0

非常好,這幾乎是我正在尋找的。我得到了+, - 和/工作我正在考慮修改Mod,但這可能比我想要的要多。非常感激。 – Cistoran 2011-03-09 04:09:22

1

你不能重載內建類型的運營商。 (好吧,從技術上講,你可以重載像int + MyClass這樣的東西 - 但是當雙方都是內置類型時)。