2017-04-05 4 views
-2
class foo{ 
    protected: 
    int *data; 
    public: 
    int& operator[](int i); 
    int operator[](int i)const; 
}; 

class goo : public foo{ 

    int& operator[](int i) 
    { 
     foo::operator[](i); 
    } 

    int operator[](int i) const 
    { 
     foo::operator[](i); 
    } 

}; 

Je voudrais appeler l'opérateur de classe parent.Comment appeler l'opérateur differnet de la classe parent

int& operator[](int i) 

et

int operator[](int i) 

mais un seul opérateur de parent int& operator[](int i) est appelé. comment devrais-je le réparer ??

+1

créér 'opérateur int [] (int i)' 'dans goo' const aussi. – songyuanyao

+1

Est-ce que cela compile même? Vous ne pouvez pas surcharger uniquement sur le type de retour. – LogicStuff

+0

@songyuanyao J'ai mis à jour son code. –

Répondre

1

Vous sautez vraiment const au deuxième opérateur en classe goo:

#include <iostream> 

using namespace std; 

class foo{ 
    public: 
    int& operator[](int i){ std::cout << "foo[] const" << std::endl; }; 
    int operator[](int i)const { std::cout << "foo[]" << std::endl; }; 
}; 

struct goo : public foo{ 

    int& operator[](int i) 
    { 
     foo::operator[](i); 
    } 

    int operator[](int i) const 
    { 
     foo::operator[](i); 
    } 

}; 

int main() 
{ 
    goo g; 
    g[1]; 
    const goo cg; 
    cg[1]; 

    return 0; 
} 
sh-4.2$ main                                     
foo[] const                                     
foo[] 
+0

' const_cast'? Pourquoi? Vous avez seulement besoin de 'static_cast' ici. – Quentin

+0

Il y avait une erreur dans le message original, les deux opérateurs de la classe dérivée étaient non const. – oklas