2008-10-13 8 views
0
int main() 
{ 
    HandPhone A,B; 
    A>>B;//overloading operator>> to simulate sending sms to another handphone(object) 
    return 0; 
} 

Comment dois-je déclarer l'opérateur istream pour simuler l'envoi de SMS à un autre handphone (objet)?Opérateur istream

+0

@ ukhti - formatage rendrait cette question un peu plus facile à lire et peut-être répondre. :-) –

+0

@ ukhti - Vous posez aussi une question très large. S'il vous plaît lisez la FAQ et essayez de restreindre un peu l'objectif de votre question. –

+0

Ne serait pas une syntaxe comme: B << "Message" << A être plus lisible? Dans la syntaxe que vous avez proposée, vous n'avez aucun concept de message. Bien que je devrais dire, plutôt que de surcharger l'opérateur tout de suite, vous devez implémenter une fonction publique, comme: message (char * message, const HandPhone & from); – paxos1977

Répondre

3

std::istream est une classe, pas un opérateur. Les < < et >> peuvent être définis pour deux types:

class A; 
class B; 

A operator << (A& a, const B& b) // a << b; sends b to a. 
{ 
    a.sendMessage(b); 
    return a; 
} 
7

Voici comment définir le >> opérateur:

void operator >> (HandPhone& a, HandPhone& b) 
{ 
    // Add code here. 
} 

J'ai mis le type de retour à annuler comme je suis pas sûr que l'enchaînement aurait du sens.

Mais il est considéré comme une mauvaise conception (dans le monde C++) de surcharger les opérateurs pour qu'ils fassent des tâches aléatoires car cela rend le code difficile à lire. Les opérateurs de streaming >> et < < ont une signification très bien définie mais l'envoi d'un message ne ressemble pas tellement au streaming que je voudrais utiliser l'opérateur de cette façon. Je m'attendrais à ce que l'unmarshalling l'objet à la destination du flux produirait un objet très semblable à ce qui a été placé à la fin de source.

Il est beaucoup plus facile de faire quelque chose comme ça.

B.sendMessageTo(A,Message("PLOP"));