
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
31.01.2007, 18:00
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#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:42
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#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, 19:03
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
компилятор создает для TClass2 оператор присваивания по умолчанию, который скрывает ваш. "открыть" можно так: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 19:25
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
Голенков Владимиркомпилятор создает для TClass2 оператор присваивания по умолчанию, который скрывает ваш. A разве присваивание по умолчанию выглядит нетак? Код: plaintext "открыть" можно так: Код: plaintext 1. 2. 3. 4. 5. 6. Ради интереса набрал код - и с этой поправкой выдает ту же ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 19:35
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
A разве присваивание по умолчанию выглядит нетак? Код: plaintext именно. вот он и скрывает унаследованные имена (operator=) Ради интереса набрал код - и с этой поправкой выдает ту же ошибку какой компилятор и полный код ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 19:54
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
Ради интереса набрал код - и с этой поправкой выдает ту же ошибку проверил: из доступных компиляторов проходит на VS2003/2005, g++ 3.2.3 не проходит на VS6 :( такие дела ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 20:14
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#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:16
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
Голенков Владимирпроверил: из доступных компиляторов проходит на VS2003/2005, g++ 3.2.3 не проходит на VS6 :( такие дела О как! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 20:26
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#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:32
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
Голенков Владимир А че-й то он скрывает? Ведь унаследованный оператор принимает const int&? Разве так и должно быть? да, ибо таков стандарт.. Прикольно, а я это как-то забыл совсем... Спасибо что напомнили! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 21:18
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
Подскажите правильно ли я понял как это всё работает. Собственно как понял я: Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 22:43
|
|||
|---|---|---|---|
перегрузка операторов и наследование |
|||
|
#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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 10:01
|
|||
|---|---|---|---|
перегрузка операторов и наследование |
|||
|
#18+
dasxПодскажите правильно ли я понял как это всё работает. Собственно как понял я: Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса. Да. И надо либо uses, либо явное указание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 12:03
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
Всем спасибо за подробные пояснения. Теперь все ясно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 16:29
|
|||
|---|---|---|---|
|
|||
перегрузка операторов и наследование |
|||
|
#18+
dasxПодскажите правильно ли я понял как это всё работает. Собственно как понял я: Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса. едак для любого метода класса - как токо переопределил, так родительский и канул в лету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2029532]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
205ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 569ms |

| 0 / 0 |
