Bonjour,
je suis tombé sur un résultat assez surprenant en compilant le code suivant :
J'obtiens le message d'erreur suivant : cannot access protected member declared in class A. Testé avec Visual Studio 2008 et g++ 4.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } };
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.
Partager