|
|
|
=
|
|||
|---|---|---|---|
|
#18+
Вопрос состоит в следующем: Есть иерархия классов class Base1 { int *ID; int GetID(){return *ID;} }; class Base2:public Base1 { CString *Code; CString GetCode(){return *Code;} }; class Base3:public Base2 { CString *Name; CString GetName(){return *Name;} Base3 & operator = (Base 3 & rhs); }; Так вот в операторе присваивания необходимо инициализировать все переменные 3-х классов Base3 & Base3 ::operator=(Base3 & rhs) { if (this == &rhs) return *this; ID = new int; *ID = rhs.GetID(); Code = new CString; *Code = rhs.GetCode(); Name = new CString; *Name = rhs.GetName(); } В таком варианте все работает и все ОК. Но это достаточно геморно, если у родителей много переменных-членов и всех их инициализировать приходится в классе потомке. Нельзя ли сделать так, чтобы каждый из родителей отвечал за инициализацию своих переменных членов. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2006, 00:32 |
|
||
|
=
|
|||
|---|---|---|---|
|
#18+
HomosumВопрос состоит в следующем: Есть иерархия классов ... В таком варианте все работает и все ОК. Но это достаточно геморно, если у родителей много переменных-членов и всех их инициализировать приходится в классе потомке. Нельзя ли сделать так, чтобы каждый из родителей отвечал за инициализацию своих переменных членов. Заранее спасибо. А почему в каждом классе не реализовать оператор присваивания, который будет копировать те члены, которые объявлены в этом классе и плюс к этому вызвать оператор присваивания родителя? Т.е. каждый "будет заниматься своим делом", а о членах объявленных выше по иерархии наследования пусть предки и заботятся. Например так (для иллюстрации) Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2006, 09:27 |
|
||
|
=
|
|||
|---|---|---|---|
|
#18+
Ну так напиши void Base1::assign(const Base1& right) void Base2::assign(const Base2& right) и т.д. Виртуальным его делать нет смысла. И в каждом классе придется переопределять operator = - оператор = не наследуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2006, 10:26 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33640374&tid=2031615]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 369ms |

| 0 / 0 |
