|
|
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
есть class TClass1 { public: int &operator = ( const int & ); }; есть class TClass2 :public TClass1 { public: }; Когда делаю так компилятор ругается TClass2 Class2; Class2 = 25; Пишет, что в TClass2 отсутствует оператор TClass2::operator = ( const int & ) Подскажите как из этой ситуации можно красиво выйти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 18:00 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Dima_Mihalychесть class TClass1 { public: int &operator = ( const int & ); }; есть class TClass2 :public TClass1 { public: }; Когда делаю так компилятор ругается TClass2 Class2; Class2 = 25; Пишет, что в TClass2 отсутствует оператор TClass2::operator = ( const int & ) Подскажите как из этой ситуации можно красиво выйти. попробовать: Код: plaintext [SRC c++]Class1 c1 = 25; Class2 = c1; [SRC c++] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 18:42 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
компилятор создает для TClass2 оператор присваивания по умолчанию, который скрывает ваш. "открыть" можно так: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 19:03 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Голенков Владимиркомпилятор создает для TClass2 оператор присваивания по умолчанию, который скрывает ваш. A разве присваивание по умолчанию выглядит нетак? Код: plaintext "открыть" можно так: Код: plaintext 1. 2. 3. 4. 5. 6. Ради интереса набрал код - и с этой поправкой выдает ту же ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 19:25 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
A разве присваивание по умолчанию выглядит нетак? Код: plaintext именно. вот он и скрывает унаследованные имена (operator=) Ради интереса набрал код - и с этой поправкой выдает ту же ошибку какой компилятор и полный код ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 19:35 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Ради интереса набрал код - и с этой поправкой выдает ту же ошибку проверил: из доступных компиляторов проходит на VS2003/2005, g++ 3.2.3 не проходит на VS6 :( такие дела ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 19:54 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир A разве присваивание по умолчанию выглядит нетак? Код: plaintext именно. вот он и скрывает унаследованные имена (operator=) А че-й то он скрывает? Ведь унаследованный оператор принимает const int&? Разве так и должно быть? Голенков Владимир Ради интереса набрал код - и с этой поправкой выдает ту же ошибку какой компилятор и полный код ошибки? Visual Studio 6.0, код ошибки VS6.0binary '=' : no operator defined which takes a right-hand operand of type 'const int' (or there is no acceptable conversion) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 20:14 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Голенков Владимирпроверил: из доступных компиляторов проходит на VS2003/2005, g++ 3.2.3 не проходит на VS6 :( такие дела О как! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 20:16 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
А че-й то он скрывает? Ведь унаследованный оператор принимает const int&? Разве так и должно быть? да, ибо таков стандарт.. вот пример, попробуйте закоментить using: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 20:26 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир А че-й то он скрывает? Ведь унаследованный оператор принимает const int&? Разве так и должно быть? да, ибо таков стандарт.. Прикольно, а я это как-то забыл совсем... Спасибо что напомнили! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 20:32 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Подскажите правильно ли я понял как это всё работает. Собственно как понял я: Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 21:18 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Dima_Mihalych пишет: > Пишет, что в TClass2 отсутствует оператор TClass2::operator = ( const > int & ) > > Подскажите как из этой ситуации можно красиво выйти. operator = не наследуется. Вот цитата (12.8.10): Because a copy assignment operator is implicitly declared for a class if not declared by the user, a base class copy assignment operator is always hidden by the copy assignment operator of a derived class (13.5.3). A using-declaration (7.3.3) that brings in from a base class an assignment operator with a parameter type that could be that of a copy-assignment operator for the derived class is not considered an explicit declaration of a copy-assignment operator and does not suppress the implicit declaration of the derived class copy-assignment operator; Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2007, 22:43 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
dasxПодскажите правильно ли я понял как это всё работает. Собственно как понял я: Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса. Да. И надо либо uses, либо явное указание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 10:01 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за подробные пояснения. Теперь все ясно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 12:03 |
|
||
|
перегрузка операторов и наследование
|
|||
|---|---|---|---|
|
#18+
dasxПодскажите правильно ли я понял как это всё работает. Собственно как понял я: Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса. едак для любого метода класса - как токо переопределил, так родительский и канул в лету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2007, 16:29 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34297500&tid=2029532]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 510ms |

| 0 / 0 |
