2011-11-23 72 views
3

我是C++的新手,並試圖找出指針和引用之間的區別。我剛剛讀了this short summaryC++運算符重載將指針類型作爲參數?

在文章中,作者提到day *operator++ (day *d);不會編譯(注:day是枚舉類型),並認爲此重載操作者功能的參數的類型必須是T,T &,或T const的&,其中T是一個類或枚舉類型。

我假設指針是內置類型而不是類或枚舉,所以它不能用於重載操作符,並且操作符重載不可能適用於所有內置類型,如int和double。

例如,int i = 1; ++i;將永遠不會導致i爲3,因爲++運算符負載類型爲int

我正確嗎?請幫助我更好地理解此問題。在操作符重載

+1

我看了一下你的問題中的鏈接--- *可怕*(你可以從他們的例子甚至沒有編譯的事實中已經知道)。引用的最常見用法是:當複製對象時,1個const引用作爲函數參數會效率低下(並且可能由於缺少複製構造函數而被禁用); 2許多非const成員函數(包括運算符)的返回類型; 3一個非const引用作爲函數參數,當對象被修改時(這個用法是有爭議的,因爲指針也很受歡迎); 4作爲數據成員,永遠不能改變(而不是指針)。 – Walter

回答

5

第一條規則是:
不能爲內置的數據類型,您可以只爲您的自定義數據類型,所以你在這方面的正確的重載運算符。

4

是的,指針是原始類型而不是對象。它們只是數字(它們指向的對象的內存地址),並且可以將這些算術應用於它們。

是的,你不能爲原始類型重載操作符(然而,你可以在一個帶有原始類型參數的類中重載二元操作符)。

+0

您能否分享一個例子,您想在一個帶有原始類型參數的類中重載二元運算符? –

+0

@TerryLiYifeng,其中一個例子是一個'Complex'類'operator +',它帶有'double'參數。 –

+0

是的,對於帶原始值的字符串連接也是必要的(仍然是'operator +')。 我曾經創建過一個Matrix類,該類有一個用於標量乘的'operator *'重載。 – Viruzzo