Au cas où j'ai deux méthodes - un public, on protégé qui renvoient la référence à même membre, je reçois après erreur de compilation:C++ comment créer des accesseurs publics et protégés à même membre
'Server::getManager': cannot access protected member declared in class 'Server'
Quand je commente hors fonction protégée, le code fonctionne. Pourriez-vous s'il vous plaît expliquer pourquoi cela se passe? Pourquoi le compilateur ne peut pas trouver la fonction publique au même membre?
class Manager
{
};
class Server
{
public:
const Manager & getManager() const { return m_man; }
protected:
Manager & getManager() { return m_man; } // <-- after removing this method I get no compilation error
private:
Manager m_man;
};
int main()
{
Server s;
const Manager& m = s.getManager();
return 0;
}
Le compilateur trouve l'un public, mais le protégé est une meilleure correspondance. Cela correspond exactement. – chris
Pourquoi auriez-vous besoin du protégé si le public rend la même chose? – wizzardmr42
Les spécificateurs d'accès sont évalués après une résolution de surcharge. Ainsi, le compilateur trouve d'abord la meilleure correspondance, et * puis * vérifie si elle est accessible. Je vous suggère de simplement renommer le membre protégé, puisque vous avez évidemment l'intention de l'utiliser dans un contexte différent. – StoryTeller