2010-09-03 79 views

回答

3

通常賦值運算符將只被定義爲類,而不是指針,然後你可以這樣做:

*ptrA = *ptrB; 
+0

但是,PtrA->運算符=(的ptrB)調用約定正確? – 2010-09-03 23:29:59

+0

賦值運算符很少寫入指針,通常它們需要const引用。所以我會說這是最好的答案,你應該避免你的例子'PtrA-> operator =(PtrB)'。 – AshleysBrain 2010-09-03 23:46:28

+0

* * ptrA = * ptrB'相當於'ptrA-> operator =(* ptrB)',但絕對是首選的 – 2010-09-03 23:49:28

2

不就是你的榜樣

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 
1

如果ClassA的assignement操作員接受​​型(或const ClassA *)的參數,則可以把它作爲任

PtrA->operator =(PtrB); 

*PtrA = PtrB; 

由於顯而易見的原因,後者更自然地使用assigment操作符。

但是,將賦值運算符定義爲接受類型爲​​的參數是一件非常麻煩的事情。一般情況下,的ClassA賦值運算符接受const ClassA &類型的參數和被調用爲

*PtrA = *PtrB;