10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
|
|||||||||||
1 | |||||||||||
Переопределение операторов16.05.2009, 10:07. Показов 4558. Ответов 12
Метки нет (Все метки)
Доброго времени суток..
В древние времена, когда ещё жили мамонты, ковырял я потихоньку плюсы.. Потом был долгий перерыв, и, как итог - забыл всё нафиг Теперь вспоминается, но до того медленно и печально.. Ситуация такая - описываю класс точки (Point). Переопределил приравнивание, пытаюсь переопределить сложение - ругается.. Листинг: Point.h
Конструкторы (три штуки) опустил..
"error C2668: 'Point::Point' : ambiguous call to overloaded function" Пространно, конечно, зато полная картина бедствия.. Скажите что-нибудь умное З.Ы.: Я в курсе, что всё это уже написано и присутствует в стандартных хедерах, просто охота вручную.. ВотЪ!
0
|
16.05.2009, 10:07 | |
Ответы с готовыми решениями:
12
переопределение операторов переопределение операторов Переопределение операторов С++ Переопределение операторов |
Заблокирован
|
||||||
16.05.2009, 11:59 | 3 | |||||
1
|
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
|
|
16.05.2009, 12:20 [ТС] | 5 |
Компилятор MS Visual C++ 5.0
Попробую по ссылке, по указателю.. Увидим..
0
|
16.05.2009, 12:35 | 6 |
5-го нет, но 6-ой тоже съел
Когда ты пишешь операторы с аргументом по значению (т.е. без ссылки), то в моменте передачи аргумента делается копия объекта (т.е. вызывается copy-конструктор). Покажи на всякий случай код конструкторов, может там ухитрился накосячить?
0
|
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
|
||||||
16.05.2009, 12:39 [ТС] | 7 | |||||
Попробовал.. Матерится, скотина..
Пробовал объявлять внешнюю функцию сложения (координаты-то public) и вызывать её из тела переопределения оператора - всё равно ругается.. На то же самое объявление, только в другом месте.. Чудеса бывают? По-моему - нет.. Конструкторы:
З.Ы.: А если я конструктор копии не переопределял, как он аргумент по значению передавать будет?.. Или я чего-то не догнал?
0
|
16.05.2009, 13:00 | 8 |
Если ты не создал, то компилятор сам создаст default copy constructor, в котором создаст код для копирования всех полей
Что-то у тебя какое-то шаманство творится. Выложи пожалуйста полные версии твоих исходников. Может что-то за кадром осталось? Добавлено через 1 минуту 55 секунд И напиши, как ты проект создавал
1
|
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
|
||||||||||||||||
16.05.2009, 13:24 [ТС] | 9 | |||||||||||||||
Вот исходники полностью - три файла..
point.h
В функции переопределения передавал значение, ссылку, указатель - ноль эмоций.. Ругается на любое объявление экземпляра класса в функциях-элементах, в функциях, вызываемых из оных.. Статическое выделение памяти, динамическое - пофигу.. Всё чудесатее и чудесатее, блин..
0
|
16.05.2009, 13:44 | 10 |
У тебя возникает неопределённость между первым и третьим конструкторами. В третьем конструкторе у первого параметра убери дефолтное значение
Добавлено через 11 минут 7 секунд И вообще, дефолтные значения параметров нужно описывать внутри класса. В противном случае подцепив один лишь point.h, у тебя не будет работать конструктор с одним или двумя параметрами (т.к. внутри класса описан конструктор с тремя параметрами). Ну и сами x,y,z надо упрятать в private (или protected) часть
1
|
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
|
||||||
16.05.2009, 13:59 [ТС] | 11 | |||||
Не допёр, спасибо Всё робит..
Координаты в private не стал прятать вполне осознанно, просто каждый раз вызывать функцию для доступа к ним как-то.. Муторно Насчёт дефолтных значений внутри класса поясни, пожалуйста.. Конструкцию типа:
0
|
16.05.2009, 14:15 | 12 |
Как бы это сказать... Не по пацански это К тому же плагается, что если ты завёл объект типа point, то ты и всё остальное будешь делать через этот объект. Т.е. получается у тебя некая абстракция, с которой координаты по отдельности ты берёшь только в крайних случаях. Идеальным вариантом было бы разрешить читать напрямую, но записывать только через метод, только хз как это делается
Внутри класса нельзя писать никаких дефолтных значений. Все дефолтные значения должны инициализироваться внутри конструкторов
1
|
10 / 10 / 1
Регистрация: 16.05.2009
Сообщений: 30
|
|
16.05.2009, 15:02 [ТС] | 13 |
Вот-вот, это было бы как раз то, что мне надо.. Мож где и накопаю, как это сделать..
Просто когда я доберусь до стадии Объекта (class Object), а он состоит из Массы (class Mass) и двух Векторов (class Vector).. А каждый Вектор из двух Точек.. Иной раз на улицу выходишь и думаешь - вот, блин, и ведь без всяких 3D-ускорителей Ладно, флужу уже.. З.Ы.: А может, возьмусь как-нибудь - и Life3D напишу.. ВооотЪ..
0
|
16.05.2009, 15:02 | |
16.05.2009, 15:02 | |
Помогаю со студенческими работами здесь
13
Переопределение операторов Переопределение операторов и массивы Создать класс строку в С++. Переопределение операторов Возможно ли переопределение операторов для пользовательских типов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |