|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.11.2010, 23:20 | #1 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
функция не возвращает результат=(
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса:
Код:
Последний раз редактировалось Chica Bond; 29.11.2010 в 23:24. |
30.11.2010, 07:53 | #2 |
Регистрация: 29.11.2010
Сообщений: 7
|
Как я понял res - это не переменная а экземпляр класса - numb. И если можно полностью выложи объявление класса.
|
30.11.2010, 08:30 | #3 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Код:
|
30.11.2010, 09:01 | #4 |
Пользователь
Регистрация: 19.12.2008
Сообщений: 38
|
Я не пойму а зачем тогда р – по ссылке передается в тело если оно не используется, и потом кто вас столько const’ов заставил написать?)
Код:
"...в самом начале было слово.." т.е. 16-битное битовое поле.
|
30.11.2010, 10:13 | #5 | |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Покажите-ка остальной код. Как мне кажется, все должно работать нормально, если с конструктором копирования и operator= все в порядке. Разве что строка
Код:
Так, и еще секунду - а как насчет Код:
Цитата:
Поясняю на конкретном примере. const numb& res гарантирует, что правый операнд оператора + не будет изменен внутри тела этого оператора (вы же наверняка удивитесь, если после выполнения операции 2+2 у вас то 2, что справа стало не 2, а 123,5?) Объявление функции оператора как const гарантирует, что и левый операнд не будет изменен внутри тела оператора (левым операндом выступает сам объект класса).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
|
30.11.2010, 12:21 | #6 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
res.add(4) я действительно использую просто для проверки как работает функция. на самом деле этот опрератор предназначен для сложения двух объектов класса, т.е.
Код:
вот мой класс, который представляет натуральное число в виде списка его цифр: Код:
операторы присваивания и копирования работаю правильно. если убрать деструктор в классе, то всё работает замечательно, вот поэтому я и решила что функция не может вернуть результат, так как после её работы он удаляется... а как исправить не знаю |
30.11.2010, 20:09 | #7 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
|
30.11.2010, 22:41 | #8 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
А нельзя ли увидеть описание конструктора копирования и функции add?
|
01.12.2010, 18:51 | #9 |
Пользователь
Регистрация: 15.03.2010
Сообщений: 31
|
конструктор копирования:
Код:
вот её код: Код:
|
01.12.2010, 19:10 | #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 |