我難以理解這樣的:除了賦值運算符,C++中的哪些運算符不會被繼承?
衆所周知的是賦值運算符不會直接繼承了......我已經問過這個昨天LINK
AFAIK以下非虛擬運營商不會繼承,以及:
operator& //unary user defined
operator* //unary user defined
所有其他運營商將被繼承(糾正我,如果我錯了)
哪個虛擬運營商不會被繼承? (虛擬說明符有什麼區別?)
我難以理解這樣的:除了賦值運算符,C++中的哪些運算符不會被繼承?
衆所周知的是賦值運算符不會直接繼承了......我已經問過這個昨天LINK
AFAIK以下非虛擬運營商不會繼承,以及:
operator& //unary user defined
operator* //unary user defined
所有其他運營商將被繼承(糾正我,如果我錯了)
哪個虛擬運營商不會被繼承? (虛擬說明符有什麼區別?)
嚴格地說,一切都是遺傳的。然而,以下將通過隱含聲明的形式隱藏在派生類(或用戶聲明的版本中,如果用戶聲明他們):
T()
~T()
T(T const &)
(有時沒有const
)T & operator=(T const &)
(有時沒有const
)T(T &&)
T & operator=(T &&)
operator&
和operator*
繼承和其他事物一樣。 virtual
聲明沒有區別。
謝謝。如果我明白:隱藏的意志也將是:assigment operator,move assigment,move copy ctor。那是對的嗎? – codekiddy 2012-01-15 15:01:51
@codekiddy:是的,當你評論時我只是添加它們(我的C++ 11知識有點粗略,所以我必須仔細查看它)。 – 2012-01-15 15:09:24
虛擬關鍵字應用於方法時,意味着子類可以選擇是否覆蓋它們。如果他們不這樣做,超類的行爲將在子類上調用該方法時執行。
如果虛擬方法是純粹的,那麼需要子類來覆蓋它。沒有默認行爲,他們可以依靠。
「通過超類指針或引用*在子類」 - *上調用該方法時「。 – 2012-01-15 14:42:26
我已閱讀書在C++的思考,在第14章下面的行中提到
除了賦值運算符,運營商自動 繼承到派生類。
所有成員函數都是繼承的,不管它們是否爲運算符重載。 'operator ='的特殊之處在於,無論是隱式聲明還是用戶聲明,它都將被派生類實現隱藏。如果你有其他理解,我想你可能誤解了關聯問題的答案。 – 2012-01-15 14:39:55
請注意,大多數二元運算符('+',''''''',''''''''')應該是自由函數,而不是方法,因爲這將允許無法進行的轉換。 – 2012-01-15 14:46:09
謝謝Charles和Anton! – codekiddy 2012-01-15 15:09:20