![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
![]()
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса:
Код:
Последний раз редактировалось Chica Bond; 29.11.2010 в 23:24. |
![]() |
![]() |
![]() |
#2 |
Регистрация: 29.11.2010
Сообщений: 7
|
![]()
Как я понял res - это не переменная а экземпляр класса - numb. И если можно полностью выложи объявление класса.
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,828
|
![]() Код:
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 19.12.2008
Сообщений: 38
|
![]()
Я не пойму а зачем тогда р – по ссылке передается в тело если оно не используется, и потом кто вас столько const’ов заставил написать?)
Код:
"...в самом начале было слово.." т.е. 16-битное битовое поле.
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
![]()
Покажите-ка остальной код. Как мне кажется, все должно работать нормально, если с конструктором копирования и operator= все в порядке. Разве что строка
Код:
Так, и еще секунду - а как насчет Код:
Цитата:
Поясняю на конкретном примере. const numb& res гарантирует, что правый операнд оператора + не будет изменен внутри тела этого оператора (вы же наверняка удивитесь, если после выполнения операции 2+2 у вас то 2, что справа стало не 2, а 123,5?) Объявление функции оператора как const гарантирует, что и левый операнд не будет изменен внутри тела оператора (левым операндом выступает сам объект класса).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
![]()
res.add(4) я действительно использую просто для проверки как работает функция. на самом деле этот опрератор предназначен для сложения двух объектов класса, т.е.
Код:
вот мой класс, который представляет натуральное число в виде списка его цифр: Код:
операторы присваивания и копирования работаю правильно. если убрать деструктор в классе, то всё работает замечательно, вот поэтому я и решила что функция не может вернуть результат, так как после её работы он удаляется... а как исправить не знаю |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
![]() |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
![]()
А нельзя ли увидеть описание конструктора копирования и функции add?
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
![]()
конструктор копирования:
Код:
вот её код: Код:
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
![]()
Ну тогда все ясно. Вы же просто копируете указатель на область памяти, в которой располагаются данные из другого экземпляра класса. А что у нас происходит здесь?
Код:
Сделайте конструктор копирования и operator= с полным копированием всей информации, примерно так: Код:
Коряво, правда, как-то получилось, но суть, думаю, ясна.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Функция не возвращает значения 2.0 | Winlook | PHP | 1 | 10.05.2010 00:58 |
Функция open() возвращает неверный дескриптор | devl | Общие вопросы C/C++ | 8 | 12.01.2010 20:36 |
Как создать функцию, которая возвращает результат - строку типа ansistring. | atg | C++ Builder | 2 | 28.10.2009 18:20 |
Что возвращает эта функция? | D[I]K | Общие вопросы C/C++ | 9 | 07.10.2009 00:32 |
Функция StrtoFloat не правильно возвращает число | Ra88it | Помощь студентам | 2 | 02.12.2008 20:26 |