question d'héritage et polymorphisme

question d'héritage et polymorphisme - C++ - Programmation

Marsh Posté le 27-09-2011 à 10:32:18    

Bonjour,
Il y a un truc que je ne comprend pas. Pourquoi ceci "passe" :

Code :
  1. class A{
  2. private:
  3. virtual void f() =0 ;
  4. };
  5. class B : public A {
  6. public:
  7. void f() { cout << "B::f()" << endl; };
  8. };


 
i.e. comment ça se fait qu'on peut surcharger une méthode private d'une classe mère en une public ou protected dans une classe fille ?
 
Par ailleurs, est ce que faire une methode 'private' dans une classe mère et la dériver dans les classes filles veut dire que seule une instance de la classe mère pourra appeler cette fonction ?
 
merci ..

Reply

Marsh Posté le 27-09-2011 à 10:32:18   

Reply

Marsh Posté le 27-09-2011 à 12:27:57    

lors de l'héritage, tu peux publier des fonctions.
Garde bien en tête que l'interface conserve le côté privé de sa déclaration :
 

Code :
  1. A* a = new B;
  2. a->f(); // interdit



---------------
last.fm
Reply

Marsh Posté le 07-10-2011 à 17:24:19    

theshockwave a écrit :

lors de l'héritage, tu peux publier des fonctions.
Garde bien en tête que l'interface conserve le côté privé de sa déclaration :
 

Code :
  1. A* a = new B;
  2. a->f(); // interdit




 
 :ouch:  
 
salut, c'est vrai aussi pour autre chose que les interfaces ? Qu'entends tu par "publier" ?

Reply

Marsh Posté le 08-10-2011 à 00:55:44    

ta question me donne envie de répondre qu'il n'y a pas de concept d'interface en C++.
 
Par publier, j'entends ca :
 

Code :
  1. class A
  2. {
  3. protected:
  4.   int foo() { return 1; }
  5. };
  6. class B
  7. {
  8. public:
  9.   int bar() { return 2; }
  10. };
  11. class C : public A, public B
  12. {
  13. };
  14. class D : public A, protected B
  15. {
  16. public:
  17.   using A::foo;
  18. };
  19. class E : public A, protected B
  20. {
  21. public:
  22.   using A::foo;
  23.   using B::bar;
  24. };
  25. int main()
  26. {
  27.   C c;
  28.   D d;
  29.   E e;
  30.   C.foo(); // interdit : A::foo est protected
  31.   C.bar();
  32.   D.foo(); // autorisé : méthode publiée
  33.   D.bar(); // interdit : héritage protégé de B
  34.   E.foo(); // autorisé : méthode publiée
  35.   E.bar(); // autorisé : méthode publiée
  36.   return 0
  37. }


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed