2010-10-19 6 views
4

Je suis en train d'apprendre C++ afin de comprendre un peu de code open source que j'ai reçu.C++ débutant question

je suis tombé sur une ligne comme suit:

cmd << '\n' 

Je suppose que « cmd » doit être une sorte de récepteur spécial pour un flux, peut-être une chaîne - mais une enquête plus approfondie, je trouve que « cmd » était une classe entière avec des données et des fonctions assorties. Cela m'a complètement embrouillé. Pourquoi ne pas l'apparence de code comme ceci:

cmd.stringpart << '\n' 

Quelqu'un peut-il me dire ce qui se passe, ou suggérer un article pour moi de jeter un coup d'oeil.

CORRECTION: cmd est une instance d'une classe plutôt que la classe elle-même.

+1

Voulez-vous dire que cmd est une classe ou est-ce une instance d'une classe (par exemple une variable d'un type pour lequel « opérateur << » est défini)? Si ce dernier, il devrait y avoir une fonction appelée operator << ("type of cmd", char *) ou quelque chose de similaire. Pouvons-nous voir cela s'il vous plaît? – andand

+0

Voir Modifier pour OP. – Mick

Répondre

4

Voir les opérateurs comme fonctions: Par exemple, 3 + 4 appelle une fonction binaire en prenant deux nombres et en renvoyant la somme.

Ici, l'auteur a créé une telle fonction pour définir l'opérateur < <, afin qu'il puisse fonctionner avec une instance de classe cmd comme paramètre de gauche, et une chaîne comme paramètre correct. Ceci est appelé "surcharge d'opérateur". Recherchez opérateur < < occurrences dans votre code.

Cela peut aussi être une fonction membre de la classe cmd, en prenant un paramètre (encore nommé opérateur < <).

4

Je vérifie d'abord si la classe dont cmd est une instance remplace l'opérateur << - cela vous montrerait ce qui se passe dans ce code.

2

Vérifiez la surcharge de l'opérateur dans cette classe - vous devriez rechercher la fonction avec le '< <' dans son nom.

2

Il semble que l'opérateur ostream (< <) ait été surchargé. Recherchez une méthode appelée "opérateur < <" dans la définition de classe. C++ permet aux programmeurs de "surcharger" ou de redéfinir la façon dont les opérateurs (y compris +, -, *, /, ++, -, etc.) travaillent avec leurs classes. Consultez n'importe quel texte C++ pour une discussion de ceci.

7

En C++, vous pouvez surcharger les opérateurs. Dans ce cas, il semble être utilisé pour faire en sorte que la classe Cmd se comporte comme un flux.

0

Dans de nombreuses langues, y compris C++ vous êtes autorisé à faire ce qu'il est appelé « surcharge de l'opérateur »

Dans votre code si vous avez une opération par exemple que vous effectuez à plusieurs reprises, généralement à cause de plus propre et plus pratique code, vous pouvez choisir un opérateur existant (tel que -, + =, ==, < <, >>) et le redéfinir localement en le remplaçant, puis l'utiliser comme bon vous semble.

Il existe également des cas où vous remplacez l'opérateur pour créer la fonctionnalité souhaitée dans une bibliothèque. Par exemple: - Vous avez créé une classe principalement pour stocker des blocs d'informations. Ensuite, vous utilisez des classes conteneur (provenant de diverses bibliothèques) pour stocker des instances de votre classe.Donc, habituellement, chaque classe de conteneur aura des méthodes pour jongler, supprimer, ajouter, comparer (...) les instances stockées. Supposons que vous vouliez comparer une instance de Foo foo avec woo = FooContainer [0] stocké dans votre conteneur avec "==" in, certaines bibliothèques vous demanderont de redéfinir ainsi l'opérateur "==" de toute façon, où assumera. Par exemple, ils ne retourneront vrai que si (foo.a == woo.a & & foo.b == woo.b & & foo.c == woo.c) est vrai. Eh bien, peut-être que deux instances sont les mêmes pour votre utilisation seulement si leur 'c' est le même, alors vous pouvez simplement remplacer "==". Vous le feriez typiquement dans Foo, juste sous le constructeur. Il avait l'air semblable à ceci:

bool operator==(const Foo &foo) const {return c == foo.c;} 

Bottomline:

  • S'il y a une opération on ne peut pas donner un sens, vous voudrez peut-être regarder manuel technique si exist. Si ce n'est pas le cas, allez dans les fichiers d'en-tête, remplacez les classes, etc. pour explorer les opérateurs écrasés avant d'aller au fond du code.
  • Vous voulez également vous familiariser avec eux-mêmes, car (a) vous pourriez devoir utiliser dans certains cas, (b) il pourrait vous donner des fonctionnalités que vous voulez super facilement, (c) il peut rendre votre code propre et simple.

Hope it helps ..