當重載一個「=」操作的一類,通常的語法是:什麼是使用指針在C++中調用重載=運算符的約定?
ClassA ObjA, ObjB;
ObjA = ObjB;
但對於指針?
Class *PtrA, *PtrB;
PtrA->operator=(PtrB)
在上述調用約定正確假設的的ClassA =
操作者對類(ClassA* operator=(const ClassA* obj)
)指針定義??
當重載一個「=」操作的一類,通常的語法是:什麼是使用指針在C++中調用重載=運算符的約定?
ClassA ObjA, ObjB;
ObjA = ObjB;
但對於指針?
Class *PtrA, *PtrB;
PtrA->operator=(PtrB)
在上述調用約定正確假設的的ClassA =
操作者對類(ClassA* operator=(const ClassA* obj)
)指針定義??
通常賦值運算符將只被定義爲類,而不是指針,然後你可以這樣做:
*ptrA = *ptrB;
不就是你的榜樣
Class *PtrA, *PtrB;
PtrA->operator=(PtrB)
你不及格在PtrB的一個實例中,你傳入一個指向PtrB的指針;
其實當然你的代碼沒有意義。你不能說
Class *PtrA, *PtrB;
我想你的意思
Class A
{
}
Class B
{
B operator=(const A &rhs){...}
}
A *ptra = ...
B *ptrb = ...
在這種情況下,你可以去
*ptrb = *ptra;
或
ptrb->operator=(*ptra);
你肯定不能去
ptrb->operator=(ptra)
或(等效簡單的語法)
*ptrbb = ptra
如果ClassA
的assignement操作員接受型(或const ClassA *
)的參數,則可以把它作爲任
PtrA->operator =(PtrB);
或
*PtrA = PtrB;
由於顯而易見的原因,後者更自然地使用assigment操作符。
但是,將賦值運算符定義爲接受類型爲的參數是一件非常麻煩的事情。一般情況下,的ClassA
賦值運算符接受const ClassA &
類型的參數和被調用爲
*PtrA = *PtrB;
但是,PtrA->運算符=(的ptrB)調用約定正確? – 2010-09-03 23:29:59
賦值運算符很少寫入指針,通常它們需要const引用。所以我會說這是最好的答案,你應該避免你的例子'PtrA-> operator =(PtrB)'。 – AshleysBrain 2010-09-03 23:46:28
* * ptrA = * ptrB'相當於'ptrA-> operator =(* ptrB)',但絕對是首選的 – 2010-09-03 23:49:28