2009-12-14 2 views
3

Quelle est la terminologie correcte/appropriée en anglais pour faire référence à l'objet "courant" en C++. Par exemple, supposons que vous écrivez un commentaire dans le corps de la mise en œuvre de celle-ci:Quelle est la terminologie appropriée en anglais pour faire référence à l'objet en C++?

Thing Thing::operator+(const Thing& other) 

Vous avez le nom de la variable « autre » à utiliser pour l'autre objet, mais ce mot/expression que vous utilisez pour faire référence à l'objet qui fait l'opération?

+2

Juste un peu de nit-pickery, mais l'opérateur +() devrait certainement être implémenté comme une fonction libre, auquel cas il n'y a pas d'objet "courant". –

+0

J'utilise habituellement 'rhs' et pas' other', parce que c'est l'objet de droite, et cela meinte facilement avec le 'lhs' vs' rhs' que j'utilise pour les fonctions libres plus tard. –

Répondre

2

Tout d'abord, il y a le pointeur this spécifiquement à cet effet. Il est donc naturel de se référer à l'objet courant comme "cet objet".

11

En C++ c'est l'objet this et c'est ce que j'utilise.

Modifier: Je deuxième commentaire de Neil à propos operator+() mieux d'être un non-membre. Pour moi, la forme canonique est de mettre en œuvre += en tant que membre (il change l'objet côté gauche et doit donc avoir accès) et mettre en œuvre operator+ sur elle:

inline Thing operator+(Thing lhs, const Thing& rhs) 
{ 
    lhs += rhs; 
    return lhs; 
} 

(Note: je pour passer lhs par référence const, aussi, et effectuer la copie dans la fonction, mais a été convaincu il ya un certain temps qu'il vaut mieux le passer comme une copie à la place.)

+0

Et les gens ont découvert la bibliothèque Boost.operators: D Non seulement vous écrivez moins, mais cela renforce même ce comportement particulier. –

2

Pourrait également utiliser "opérande gauche" et "opérande de droite ", puisque votre opérateur est binaire.

-2

Il n'y a pas objet courant en C++, mais seulement pointeur vers objectera avalilable dans la fonction membre est ce pointeur.

+2

Bien que techniquement correct; ce n'est pas un moyen particulièrement utile de regarder un langage orienté objet. –

+0

Je ne comprends pas ce que vous dites à propos de ... – Ashish

+0

Euh, oui, il y a ** un ** objet courant. Que pensez-vous que ceci indique? –

6

Le problème avec « ce » est qu'il est un mot commun en anglais. En tant que quelqu'un qui a beaucoup parlé du C++, j'ai toujours eu du mal à comprendre quand j'utilisais "ceci" pour désigner l'objet courant. Je n'ai jamais trouvé une solution parfaite, mais j'ai souvent souhaité que BS ait utilisé "self" au lieu de "this".

+0

"the this pointeur" est un peu plus explicite, mais oui, pas vraiment idéal. – jalf

+0

Et c'est encore pire: le questionneur ne parle pas de "ce pointeur", il parle de "la référence de ce pointeur". –

+0

vrai. Cela aurait été bien si cela avait été appelé "soi" plutôt que "ceci", et était une référence réelle au lieu d'un pointeur. – jalf

3

Soit "ce", ou peut-être "cette instance". Comme dans:

/** \brief Adds another Thing to this instance. 
* A reference to this instance is returned. 
*/ 
Thing& Thing::operator+(const Thing& other); 

Le balisage est Doxygen, pour ceux qui ne connaissent pas cela.

3

J'ai tendance à utiliser la même convention dans la documentation que je l'utilise dans le code: Je laisse implicite. Par exemple. "Ajouter une autre chose et retourner la somme".

Quand je besoin d'être explicite, il est des commentaires lus par d'autres programmeurs. Ils connaissent C++, *this est facilement compris. Par exemple. "Ajouter une autre chose à en ajoutant tous les membres sauf Thing :: foo qui deviendra 0 (Voir bug # 42)"

0

Dans les commentaires, je dis habituellement soit "ceci" ou "nous-même" (parce que j'écris généralement des commentaires à la première personne du pluriel, mais "nous-mêmes" est trop bizarre quand il n'y a qu'un seul objet).

Dans la documentation, je dis "le <whatever>". Si c'est ambigu (parce que la fonction en prend une autre en paramètre, par exemple), je dis "cet objet", ou "ceci <whatever>".<whatever> est soit le nom de la classe, soit un autre terme utilisé dans la documentation pour expliquer ce que la classe représente.

/** 
* An utterly useless write-only counter, with arbitrary initial value. 
*/ 
class Counter { 
    unsigned int count; 
public: 
    /** 
    * Increments the counter 
    */ 
    Counter &operator++() { 
     // We need to add 1 to ourself. I found a snippet online that does it: 
     ++count; 
     // return ourself 
     return *this; 
    } 
    /** 
    * Adds together this counter and "other". 
    */ 
    Counter operator+(const Counter &other) const { 
     Counter result; 
     // new count is our count plus other count 
     result.count = count + other.count; 
     return result; 
    } 
}; 
0

Si vous implémentez un opérateur en dehors du champ de la classe, alors les arguments sont souvent nommés lhs et rhs (côté gauche et côté droit).

Vous n'avez pas vraiment besoin d'un nom pour l'objet actuel, car vous avez déjà le pointeur this. Dans les méthodes statiques, un pointeur est parfois nécessaire pour un objet de la classe (par exemple pour appeler une méthode d'instance). Dans ces situations, j'utilise le nom de la variable pThis.

Si vous avez besoin d'un nom lorsque vous en parlez, alors "self" a du sens. Je me réfère parfois à "l'objet".

0

Il me semble que si vous voulez faire référence à l'objet actuel, vous ne pouvez pas vraiment vous tromper en l'appelant l'objet actuel.

+0

Et peut-être que vous le pouvez. "L'objet actuel" pour moi (un non-natif, donc je peux me tromper) implique une période de temps alors que c'est le courant. Cependant, pendant la même période, 'other' est aussi courant. – sbi

Questions connexes