所以我在一個基本的編程II類。我們必須創建一個程序,使4種不同的功能可以改變操作員的工作方式。我查閱了多個示例和一組顯示如何執行此操作的文本,但我無法確定任何代碼的含義。對我來說,這樣的事情應該起作用。運算符在C++中重載
int operator++()
{
variableA--;
}
對我來說,這表示,如果遇到++,然後 - 從變量,現在很明顯它不喜歡這個工作。我發現的所有例子都創建了自己的數據類型。有沒有辦法使用int
或double
超載運營商?
所以我在一個基本的編程II類。我們必須創建一個程序,使4種不同的功能可以改變操作員的工作方式。我查閱了多個示例和一組顯示如何執行此操作的文本,但我無法確定任何代碼的含義。對我來說,這樣的事情應該起作用。運算符在C++中重載
int operator++()
{
variableA--;
}
對我來說,這表示,如果遇到++,然後 - 從變量,現在很明顯它不喜歡這個工作。我發現的所有例子都創建了自己的數據類型。有沒有辦法使用int
或double
超載運營商?
所有的例子創建自己的數據類型,因爲這是操作符重載的規則之一: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的類外定義,但可能已不是定義內(他們將獲得以這種方式訪問非公共成員),儘管他們的實現會有些不同。
非常好,這幾乎是我正在尋找的。我得到了+, - 和/工作我正在考慮修改Mod,但這可能比我想要的要多。非常感激。 – Cistoran 2011-03-09 04:09:22
你不能重載內建類型的運營商。 (好吧,從技術上講,你可以重載像int + MyClass這樣的東西 - 但是當雙方都是內置類型時)。
運算符重載比一個人的最初直覺所暗示的要多得多。你的老師在給你一個練習之前應該先對它進行修改,因爲它起初似乎很有用,而且有很多特殊情況。當然你的書有一個部分。沒有簡單的方法可以坐下來閱讀。 – 2011-03-09 03:51:33
他從來沒有超過它,我們甚至沒有書。所以這就是我來這裏尋求幫助的原因。 – Cistoran 2011-03-09 03:58:21
無賴。在這本免費書中有關於它們的完整章節:[用C++思考](http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html),第12章。值得一讀,儘管本書總的來說只是如此-所以。 – 2011-03-09 04:02:52