Форум программистов, компьютерный форум CyberForum.ru

4 раза в памяти создается объект класса - C++

Восстановить пароль Регистрация
 
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 12:00     4 раза в памяти создается объект класса #1
Доброго времени суток!
Есть следующий код:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class account
{
private:
    double balanse;
public:
    account();
    void credit(double);
    void debit(double);
    void setBalanse(double);
    double getBalanse();
    ~account();
};
account::account()
{   double bl;
    cout<<"Vvedite nachalnoe znachenie tekushego scheta."<<endl;
    cin>>bl;
    setBalanse(bl);
    if(balanse<0)
{
    balanse=0;
    cout<<"Nachalniy balans nedeystvitelen, prisvoenno znachenie 0 po umolchaniyu"<<endl;
}
}
void account::setBalanse( double bal)
{
    balanse=bal;
}
double account::getBalanse()
{
    cout.precision(2);
    cout<<balanse<<endl;
    return 0;
}
void account::credit(double ad)
{
if(ad<0)
{
    cout<<"Oshibka vvoda"<<endl;
    return;
}
else
balanse=balanse+ad;
}
void account::debit(double da)
{
    if(da<0)
{
    cout<<"Oshibka vvoda"<<endl;
    return;
}
    else
    {
    if(da>balanse) 
    {
    cout<<"Zaprashivaemae summa debeta slihkom velika"<<endl;
    }
    else
        balanse=balanse-da;
    }
}
account::~account()
{
cout<<"Zavershenie raboti"<<endl;
}
void vibor(account &p)
{
int c;
cout<<"Viberite deystvie:"<<endl;
cout<<"1-prosmotr tekushego scheta"<<endl;
cout<<"2-credit"<<endl;
cout<<"3-debit"<<endl;
cout<<"4-exit"<<endl;
cin>>c;
switch(c)
{
case 1:
    p.getBalanse();
    vibor(p);
    break;
case 2:
    double d;
    cout<<"Vvedite summu credita: ";
    cin>>d;
    cout<<endl;
    p.credit(d);
    vibor(p);
    break;
case 3:
    double dd;
    cout<<"Vvedigte summu debeta: ";
    cin>>dd;
    cout<<endl;
    p.debit(dd);
    vibor(p);
    break;
case 4:
    //delete(&p);
    system("exit");
    break;
default:
    cout<<"Oshibka vvoda!"<<endl;
    vibor(p);
    break;
}
}
void main()
{
account one;
vibor(one);
system("pause");
}
В функции vibor при обращении функции к самой себе в памяти создаются объекты класса, то есть при завершении программы деструктор вызывается 4 раза.
Как поправить функция для того, чтобы этого не происходило?
Заранее спасибо за ответы!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.02.2014, 12:21     4 раза в памяти создается объект класса #2
странно, у меня нечего не происходит, а как Вы поняли что объекты создаются?, раз создаются значит срабатывае конструктор по умолчанию, и он предлагает ввести начальную сумму, это происходит?
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 12:59  [ТС]     4 раза в памяти создается объект класса #3
Цитата Сообщение от aLarman Посмотреть сообщение
странно, у меня нечего не происходит, а как Вы поняли что объекты создаются?, раз создаются значит срабатывае конструктор по умолчанию, и он предлагает ввести начальную сумму, это происходит?
Да.
По очереди попробуйте вызвать все 3 функции, а затем завершите программу вводов "4" в выборе.

Добавлено через 34 минуты
Актуально.
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
28.02.2014, 13:16     4 раза в памяти создается объект класса #4
Цитата Сообщение от Talkoflights Посмотреть сообщение
По очереди попробуйте вызвать все 3 функции, а затем завершите программу вводов "4" в выборе.
Вызвался один деструктор, как и, по идее, должно быть. Объект ведь у вас в функцию передаётся по ссылке
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 13:17  [ТС]     4 раза в памяти создается объект класса #5
Дополнение-при завершении программы должно как бы отображаться сообщение, генерируемое в деструкторе-Zavershenie raboti.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.02.2014, 13:19     4 раза в памяти создается объект класса #6
Talkoflights, а какой компиль?
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 13:22  [ТС]     4 раза в памяти создается объект класса #7
Цитата Сообщение от scenotaph Посмотреть сообщение
Вызвался один деструктор, как и, по идее, должно быть. Объект ведь у вас в функцию передаётся по ссылке
У меня в данном случае деструктор вообще не вызывается.

Добавлено через 2 минуты
Цитата Сообщение от aLarman Посмотреть сообщение
Talkoflights, а какой компиль?
VS 2010
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
28.02.2014, 13:22     4 раза в памяти создается объект класса #8
Talkoflights, Вызывается:
C++
1
2
3
4
5
account::~account()
{
cout<<"Zavershenie raboti"<<endl;
system("pause");
}
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.02.2014, 13:22     4 раза в памяти создается объект класса #9
Talkoflights, он вызывается, после press any key to continue... после нажатия любой клавиши, проскакивает сообщение деструктора
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 13:23  [ТС]     4 раза в памяти создается объект класса #10
Цитата Сообщение от scenotaph Посмотреть сообщение
Talkoflights, Вызывается:
Вы не так поняли. Он ДОЛЖЕН(по идее) вызываться, но при выполнении этого не происходит. То есть что-то происходит некорректно.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.02.2014, 13:24     4 раза в памяти создается объект класса #11
Цитата Сообщение от Talkoflights Посмотреть сообщение
Он ДОЛЖЕН(по идее) вызываться
да вызывается он блин, когда у Вас объект разрушается? после выхода из мейна, сообщение проскакиевает мгновенно, его можно не заметить
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
28.02.2014, 13:25     4 раза в памяти создается объект класса #12
Talkoflights, Да вызывается он, после нажатия кнопки 4.
Убедитесь, поставив точку останова там или, как я написал, какой-нибудь system("pause");
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 13:28  [ТС]     4 раза в памяти создается объект класса #13
Черт, там же была пауза! Аргх!
Спасибо, извиняюсь за беспокойство.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.02.2014, 13:30     4 раза в памяти создается объект класса #14
Talkoflights, пробелма с созданием лишним созданием объекта еще не решена?
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 13:33  [ТС]     4 раза в памяти создается объект класса #15
Цитата Сообщение от aLarman Посмотреть сообщение
Talkoflights, пробелма с созданием лишним созданием объекта еще не решена?
Конечно решена. Я же передаю в функцию по адресу, они и не генерируются.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
28.02.2014, 13:42     4 раза в памяти создается объект класса #16
Цитата Сообщение от Talkoflights Посмотреть сообщение
Я же передаю в функцию по адресу, они и не генерируются.
а изначально было не так? в смысле по адресу? Вы имеете ввиду ссылку?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2014, 14:11     4 раза в памяти создается объект класса
Еще ссылки по теме:

Объект класса в динамической памяти C++
C++ Как создать объект класса в динамической памяти?
Выделить в памяти объект класса string и присвоить ему значение C++

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

Или воспользуйтесь поиском по форуму:
Talkoflights
 Аватар для Talkoflights
25 / 25 / 5
Регистрация: 23.09.2012
Сообщений: 268
28.02.2014, 14:11  [ТС]     4 раза в памяти создается объект класса #17
Цитата Сообщение от aLarman Посмотреть сообщение
а изначально было не так? в смысле по адресу? Вы имеете ввиду ссылку?
Указатель.
Yandex
Объявления
28.02.2014, 14:11     4 раза в памяти создается объект класса
Ответ Создать тему
Опции темы

Текущее время: 12:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru