Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
#1

Время жизни переменных - C++

29.11.2010, 22:57. Просмотров 1747. Ответов 5
Метки нет (Все метки)

Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса:
C++
1
2
3
4
5
6
numb numb::operator +(const numb &p)const
{
    numb res;
    res.add(4);
    return res;
}
но эта функция не возвращает результат. я понимаю, что это локальная переменная, но не очень разбираюсь со всем этим... пробывала объявлять res как глобальную и как статическую, но компилятор всё-равно выдаёт ошибку. работат только в том случае если убрать деструктор, но он мне нужен... вот уже и не знаю что делать. помогите пжлс) заранее спасибо!))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2010, 22:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Время жизни переменных (C++):

C++11 время жизни переменных - C++
После долгого перерыва в программирование вновь спохватился и тут наткнулся на такую не ожиданность #include <iostream> using...

Время жизни локальных переменных в цикле - C++
Добрый вечер! допустим, в таком коде: int i=100; while(i>0) { int t = i+1; ... --i; }

Область видимости и время жизни переменных внутри класса - C++
Есть класс, определение в файле myclass.h, реализация myclass.cpp Как и где правильно определить глобальную переменную, чтоб ее значение...

Время жизни объектов - C++
Вроде простая вещь, а не могу понять почему так. #include <iostream> using namespace std; int* f() { int a = 7; int...

Время жизни объекта - C++
Доброго времени суток, объясните пожалуйста, как можно продлить время жизни объекта, который создан локально. В данном случае - есть...

время жизни временного объекта - C++
можно ли передать временный объект в функцию по ссылке? void f1(int & ); ..... int main() { f1(int());

5
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.11.2010, 23:27 #2
здесь не в локальности ошибка. ты ведь возвращаешь не ссылку на нее и не указатель, а значение переменной в этом плане все у тебя правильно. неверно у тебя в том моменте, что создаваемая тобой переменная является пустой (не проинициализированной).

т.е. фактически логика следующая:

5 + 4

запускается оператор плюс для 5: создается переменная (предположительно, это ноль) к нулю добавляет 4 и возращается результат. ошибка в работе. нам 4 нужно прибавить к 5. поэтому необходимо временную res переменную проинициализировать значением самого объекта. для этого используется конструктор копий (он генерируется по-умолчанию).

пробуй так:

C++
1
2
3
4
5
6
numb numb::operator +(const numb &p)const
{
        numb res(*this);
        res.add(4);
        return res;
}
0
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
29.11.2010, 23:35  [ТС] #3
я наверное слишком сократила код, поэтому чуть-чуть не понятно) у меня класс numb представляет натуральное число в виде списка его цифр... функцию add я написала просто так, чтобы проверить работает ли функция в целом... а слогаемые у меня подаются одно через this, а другое как p, а res должен будет вернуть сумму...
но даже если при помощи конструктора задать ему значение, то всё равно ошибка=(
0
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
29.11.2010, 23:56 #4
Flamе, Код класса хотя бы скиньте. А дальше можно будет понять проблему.
0
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
30.11.2010, 00:03  [ТС] #5
ок))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
struct list2
{
    int info;
    list2 *next;
    list2 *prev;
};
 
class numb
{
    friend class list2_it;
protected:
    list2 *first;
public:
    numb();
    ~numb();
    numb(const numb &p);
    void add(int x);
    friend list2 *end_list(const numb &p);//поиск конца списка
    //арифметические операции:
    numb &operator =(const numb &p);
    numb operator +(const numb &p)const;
    numb &operator +=(const numb &p);
    numb operator -(const numb &p)const;
    numb &operator -=(const numb &p);
    numb operator *(const numb &p)const;
    numb &operator *=(const numb &p);
    numb operator /(const numb &p) const;
    numb &operator /=(const numb &p);
};
0
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
01.12.2010, 21:51  [ТС] #6
спасибо всем за помощь, ошибка исправлена. вся проблема была в конструкторе копирования)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2010, 21:51
Привет! Вот еще темы с ответами:

Определить время жизни Static переменной - C++
Привет народ. Вопрос: Если static переменная объявлена в теге(внутри функции), она будет жить пока не закроется тег или всю функцию и после...

Выведите в окно приложения прочитанную фамилию и оставшееся "время жизни" до 3000г - C++
Помогите, пожалуйста, с решением задачи. условие: "запишите в файл фамилию и год рождения. Выведите в окно приложения прочитанную фамилию...

Создание переменных во время выполнения - C++
Доброго времени суток, такой вопрос: Если я ввожу с клавиатуры, скажем, цифру 4, есть ли способ создать 4 переменных типа int или 10,...

Проверка значений переменных во время отладки - C++
как узнать текущее значение переменной во время отладки?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru