2010-09-03 3 views

Répondre

3

Habituellement, l'opérateur d'affectation sera définie que pour la classe, et non les pointeurs, et vous pouvez faire:

*ptrA = *ptrB; 
+0

Cependant, est-PtrA- opérateur> = (PtrB) convention d'appel correcte ?? –

+0

Les opérateurs d'affectation sont rarement écrits pour prendre des pointeurs, ils prennent généralement des références const. Donc, je dirais que c'est la meilleure réponse, et votre exemple 'PtrA-> operator = (PtrB)' devrait être évité. – AshleysBrain

+0

'* ptrA = * ptrB' est équivalent à' ptrA-> operator = (* ptrB) ', mais certainement préféré –

2

pas que dans votre exemple

Class *PtrA, *PtrB; 

PtrA->operator=(PtrB) 

Vous ne passent pas dans une instance de PtrB, vous passez dans un pointeur vers un PtrB;

En fait, bien sûr, votre code n'a pas vraiment de sens. Vous ne pouvez pas dire

Class *PtrA, *PtrB; 

Je pense que vous voulez dire

Class A 
{ 
} 
Class B 
{ 
    B operator=(const A &rhs){...} 
} 

A *ptra = ... 
B *ptrb = ... 

Dans ce cas, vous pouvez aller

*ptrb = *ptra; 

ou

ptrb->operator=(*ptra); 

vous ne pouvez certainement pas aller

ptrb->operator=(ptra) 

ou (la syntaxe simple équivalent)

*ptrbb = ptra 
1

Si l'opérateur assignement en ClassA accepte un argument de type ClassA * (ou const ClassA *), alors vous pouvez l'appeler comme soit

PtrA->operator =(PtrB); 

ou

*PtrA = PtrB; 

Ce dernier est une manière plus naturelle d'utiliser l'opérateur d'assigment pour des raisons évidentes. Toutefois, la définition de l'opérateur d'affectation pour accepter un argument de type ClassA * est une opération plutôt bizarre. Normalement, l'opérateur d'affectation de ClassA accepterait un argument de type const ClassA & et être invoquée comme

*PtrA = *PtrB; 
Questions connexes