2010-01-25 5 views
4

Supposons que je l'ai déclaré les opérateurs dans une classe en indicequi surcharge la version de l'opérateur sera appelé

  1. char& operator[] (int index);
  2. const char operator[](int index) const;

Dans quel état la seconde surcharge est appelée. Est-il seulement appelé à travers un const object.

Dans les scénarios suivants, quelle version de l'opérateur sera appelée.

const char res1 = nonConstObject[10]; 
nonConstObject[10]; 

Répondre

13

Le premier est appelé. Ne soyez pas confus par la valeur de retour; seuls les arguments sont considérés pour sélectionner la méthode. Dans ce cas, le this implicite est non-const, donc la version non const est appelée.

-1

Les méthodes constantes peuvent uniquement être appelées à partir d'instances constantes. Puisque nonConstObject n'est pas défini comme const, les deux appels seront à l'opérateur surchargé non const.

+0

Les méthodes non const ne peuvent être appelées que pour des instances non-const. Mais les méthodes const peuvent être appelées pour les constants bot et non-const. –

+0

mais qui obtient la priorité dans le cas d'une instance non-const. –

Questions connexes