[C++] je debute. classe amie. classe abstraite, heritage.

je debute. classe amie. classe abstraite, heritage. [C++] - C++ - Programmation

Marsh Posté le 19-09-2003 à 23:21:26    

je dois me mettre au c++.
 
je vois pas l interet d avoir des classes amie en plus de l heritage.  
a part que.  
si A a une classe amie B.  et que C herite de A, C n est pas amie de B.  
ca permet de conserver le fonctionnement, mais de masquer les fonctionnalite, cest a dire de masquer la complexite.
 
est ce qeu c est l utilite des classe amie??
ex:

Code :
  1. class Component
  2. 00058 {
  3. 00059     friend AwCompFactory;
  4. 00060     friend Container;
  5. 00061
  6. 00062     protected:
  7. 00063         Component(int id, AwRectangle& r) :
  8. 00064         _id(id),
  9. 00065         _rect(r),
  10. 00066         _parent(0),
  11. 00067         _visible(true)
  12. 00068         {
  13. 00069
  14. 00070         }
  15. 00071         virtual ~Component(){};
  16. 00072
  17. 00073         void setParent(Component* parent){ _parent = parent; };
  18. 00074
  19. 00075     public:
  20. 00083         virtual void addChild(Component *c){};
  21. 00084
  22. 00092         virtual void removeChild(Component *c){};
  23. 00093
  24. 00099         virtual void show() = 0;
  25. 00100
  26. 00106         virtual void hide() = 0;
  27. 00107
  28. 00118         virtual void showFocus( bool focus ) = 0;
  29. 00119
  30. 00120
  31. 00121         //virtual void Move( AwRectangle& r) = 0;
  32. 00122
  33. 00129         virtual void setBackColor( AwColor& color) = 0;
  34. 00130
  35. 00137         virtual void setForeColor( AwColor& color) = 0;
  36. 00138
  37. 00147         virtual void setVisible( bool visible )
  38. 00148         {
  39. 00149             _visible = visible;
  40. 00150             if( _visible != visible )
  41. 00151             {
  42. 00152                 if( visible )
  43. 00153                 {
  44. 00154                     if( _parent )
  45. 00155                         _parent->show();
  46. 00156                     else
  47. 00157                         show();
  48. 00158                 }
  49. 00159                 else
  50. 00160                     if(  _parent )
  51. 00161                         _parent->show();
  52. 00162                     else
  53. 00163                         hide();
  54. 00164
  55. 00165                 _visible = visible;
  56. 00166             }
  57. 00167         }
  58. 00168
  59. 00174         bool isVisible(){ return _visible; };
  60. 00175
  61. 00176     protected:
  62. 00177         int _id;
  63. 00178         AwRectangle _rect;
  64. 00179         AwColor _backColor;
  65. 00180         AwColor _foreColor;
  66. 00181         Component* _parent;
  67. 00182         bool _visible;
  68. 00183
  69. 00184     private:
  70. 00185 };
  71. 00186
  72. 00195 class Container : public Component
  73. 00196 {
  74. 00197     friend AwCompFactory;
  75. 00198
  76. 00199     protected:
  77. 00200         Container(int id, AwRectangle& r)
  78. 00201             : Component(id, r)
  79. 00202         {
  80. 00203         };
  81. 00204         virtual ~Container(){};
  82. 00205     public:
  83. 00212         void addChild(Component *c);
  84. 00213
  85. 00221          void removeChild(Component *c);
  86. 00222
  87. 00228         virtual void show();
  88. 00229
  89. 00235         virtual void hide();
  90. 00236     private:
  91. 00237         Vector<Component *> _ComponentList;
  92. 00238 };
  93. 00239
  94. 00247 class Button : public Component
  95. 00248 {
  96. 00249     friend AwCompFactory;
  97. 00250
  98. 00251     protected:
  99. 00252         Button(int id, AwRectangle& r)
  100. 00253             : Component(id, r)
  101. 00254         {
  102. 00255         };
  103. 00256         virtual ~Button(){};
  104. 00257     public:
  105. 00263         virtual void activate() = 0;
  106. 00264
  107. 00270         virtual void deactivate() = 0;
  108. 00271
  109. 00272     private:
  110. 00273
  111. 00274 };

Reply

Marsh Posté le 19-09-2003 à 23:21:26   

Reply

Marsh Posté le 19-09-2003 à 23:24:21    

j ai oublie une classe dans l exemple:  
 
la classe virtuel, amie :D
 

Code :
  1. 00604 class AwCompFactory
  2. 00605 {
  3. 00606     public:
  4. 00607         AwCompFactory(){};
  5. 00608         virtual ~AwCompFactory(){};
  6. 00609
  7. 00617         virtual Panel*      createPanel( int id, AwRectangle& r ) = 0;
  8. 00618
  9. 00626         virtual ButtonText* createButtonText( int id, AwRectangle& r ) = 0;
  10. 00627
  11. 00635         virtual ButtonPic*  createButtonPic( int id, AwRectangle& r ) = 0;
  12. 00636
  13. 00644         virtual Label*      createLabel( int id, AwRectangle& r ) = 0;
  14. 00645
  15. 00653         virtual TextField*   createTextField( int id, AwRectangle& r ) = 0;
  16. 00654
  17. 00662         virtual ListBox*      createListBox( int id, AwRectangle& r ) = 0;
  18. 00663
  19. 00671         virtual PictureBox* createPictureBox(int id,  AwRectangle& r ) = 0;
  20. 00672
  21. 00680         virtual ProgressBar* createProgressBar(int id,  AwRectangle& r ) = 0;
  22. 00681 };

Reply

Marsh Posté le 19-09-2003 à 23:25:07    

Reply

Marsh Posté le 19-09-2003 à 23:47:29    

et avoir en amie, une classe constitue de methode virtuel. c est l equivalent d une interface en java on dirait

Reply

Marsh Posté le 19-09-2003 à 23:49:12    

ben non. les interfaces en java, c'est l'adaptation de l'éhritage multiple du C++
 
une interface -> une classe abstraite .|

Reply

Marsh Posté le 19-09-2003 à 23:49:32    

depuis qd on numerote les lignes en c++ ????


Message édité par red faction le 19-09-2003 à 23:50:06
Reply

Marsh Posté le 19-09-2003 à 23:49:39    

:D


Message édité par red faction le 19-09-2003 à 23:50:24
Reply

Marsh Posté le 20-09-2003 à 00:07:12    

Taz a écrit :

ben non. les interfaces en java, c'est l'adaptation de l'éhritage multiple du C++
 
une interface -> une classe abstraite .|


 
bah la c'est bien une classe abstraite :??:
 
AwCompFactory  est une classe, consituee de fonctions virtuelles.
Component a pour amie la classe AwCompFactory.  (donc AwCompFactory est une interface je pense)
 
 
 
par contre,  
button herite de component. donc je sais pas ce qui se passe entre button et AwCompFactory!!


Message édité par slvn le 20-09-2003 à 00:08:21
Reply

Marsh Posté le 20-09-2003 à 00:10:58    

tain mais tu mélanges tout. friend n'a rien à voir avec l'éhritage ou les « interfaces ». c'est juste un passe droit qu'on s'ocrtoie entre classes ou avec une fonction non-membre

Reply

Marsh Posté le 20-09-2003 à 00:21:45    

oui pardon, y a un bug dnas ce que je raconte sur le interface, je suis d accord que ca rien a voir.
 
en fait dans l exemple, je vois pas l interet qu il peut y avoir a mettre comme amie une classe qui a que des fonctions virtuels :/  
 quelles classes va overloader ces fonctions

Reply

Marsh Posté le 20-09-2003 à 00:21:45   

Reply

Marsh Posté le 20-09-2003 à 00:39:01    

ben je sais pas d'ou il vient ton code ... mais ça n'empeche

Reply

Marsh Posté le 20-09-2003 à 00:47:39    

bah, ce code vient de la boite ou je fais mon stage. pour l instant je m arrache les cheveux dessus. ... sachant que y a une 50-aine de classe comme ca.
 
 
plus precisement, les fonctions virtuel de la classe AwCompFactory, sont implemente dans une classe HCompFactory, qui herite de AwCompFactory.  ...bref, peut etre que ca un interet, mais c pas flagrant.
 
 

Reply

Sujets relatifs:

Leave a Replay

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