protected : portée d'instance et non de classe ?
Bonjour,
je suis tombé sur un résultat assez surprenant en compilant le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
class A
{
public:
virtual ~A() {}
void activate(bool is_active) { activate_impl(is_active); }
protected:
virtual void activate_impl(bool is_active) { std::cout << "activate in A" << std::endl; }
};
class B : public A
{
public:
B() : p_a(new A) {}
virtual ~B() { delete p_a; }
protected:
virtual void activate_impl(bool is_active) { p_a->activate_impl(is_active); }
}; |
J'obtiens le message d'erreur suivant : cannot access protected member declared in class A. Testé avec Visual Studio 2008 et g++ 4.
Je trouve cela étrange dans la mesure où B dérive bien de A, je pensais que, de la même manière que le mot clé private, la portée du mot clé protected était une portée de classe et non d'instance.
Si quelqu'un a une explication, je suis preneur ;)
Merci d'avance.