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

Ошибка инициализации объекта, конструктором класса - C++

Восстановить пароль Регистрация
 
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
09.12.2012, 10:58     Ошибка инициализации объекта, конструктором класса #1
Добрый день.
Написал программу.
Создание класса (упражнение из книги Дейтеля)
Кликните здесь для просмотра всего текста
"Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для представления банковского баланса. Класс должен предусматривать конструктор, принимающий начальный баланс, используемый для инициализации элемента данных. Конструктор должен подтверждать значение начального баланса и гарантировать, что оно больше или равно 0. Если нет, баланс должен устанавливаться равным 0, и конструктор должен выводить сообщение об ошибке, указывающее, что начальный баланс был недействителен. В классе должны быть предусмотрены три элемент-функции. Функция credit должна добавлять указанную сумму из текущего баланса. Функция debit должна снимать деньги со счета, предварительно убедившись, что указанная сумма не превосходит баланса счета. Если превосходит, баланс нужно оставить без изменений и функция должна вывести сообщение вроде «Запрошенная сумма превышает баланс счета". Функция getBalance должна возвращать текущий баланс. Напишите программу, которая создает два объекта класса Account и тестирует элемент-функции класса."


Есть проблема.
Кликните здесь для просмотра всего текста

Начальный баланс приравнивается 100(с помощью инициализации конструктором).
Вводиться сумма которая добавляется к балансу( 100 + 100)
Выводиться баланс( 200 ).
Вводиться сумма которая отнимается от текущего баланса, и тут начинается самое интересное:
Если ввести сумму которая будет больше аргумента объекта класса "acount", но будет меньше либо ровна элемента данных "balance".То программа снимет указанную суму со счета, но при этом еще и выдаст ошибку что сумма превосходит размер суммы на счету.

Но ведь после того как я добавляю к общему балансу еще 100 то баланс становиться равным 200, почему же элемент функция "debit" класса "Account" все равно видит 100?


Заголовочный файл: Account.h
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
class Account
{
public:
       Account( int amount );
       void setBalance( int amount );
       int getBalance();
       void credit( int amount );
       void debit( int amount );
private:
        int balance;
};

Файл исходного кода: Account.cpp
Кликните здесь для просмотра всего текста
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
#include <iostream>
using namespace std;
 
#include "Account.h"
 
Account::Account( int amount )
{
   if( amount >= 0 )
   {      
      setBalance( amount );
      cout << "Starting balance: " << getBalance() << endl;
      }
   if( amount < 0 )
   {
      setBalance( 0 );
      cout << "Eror, starting balance invalid.\nStarting balance: "
      << getBalance() << endl;
      }
   }
void Account::setBalance( int amount )
{
   balance = amount;
   }
int Account::getBalance()
{
   return balance;
   }
void Account::credit( int amount )
{
   balance = balance + amount;
   }
void Account::debit( int amount )
{
   if( amount <= balance )
   {
      balance = balance - amount;
      }
   if( amount > balance )
   {
      cout << "Eror, amount invalid." <<endl;
      }
   }

Код клиента: main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
#include "Account.h"
 
int main()
{
    Account account( 100 );
    int amount;
    
    cout << "Please enter amount(credit): ";
    cin >> amount;
    account.credit( amount );
    cout << "Balance: " << account.getBalance() << endl;
    
    cout << "Please enter amount(debit): ";
    cin >> amount;
    account.debit( amount );
    cout << "Balance: " << account.getBalance() << endl;
    
    system("PAUSE");
    return 0;
};

Весь код одним файлом(если кому так удобнее).
Кликните здесь для просмотра всего текста
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
#include <iostream>
using namespace std;
 
class Account
{
public:
       Account( int amount )
       {
          if( amount >= 0 )
          {      
             setBalance( amount );
             cout << "Starting balance: " << getBalance() << endl;
             }
          if( amount < 0 )
          {
             setBalance( 0 );
             cout << "Eror, starting balance invalid.\nStarting balance: "
             << getBalance() << endl;
             }
          }
       void setBalance( int amount )
       {
          balance = amount;
          }
       int getBalance()
       {
          return balance;
          }
       void credit( int amount )
       {
          balance = balance + amount;
          }
       void debit( int amount )
       {
          if( amount <= balance )
          {
             balance = balance - amount;
             }
          if( amount > balance )
          {
             cout << "Eror, amount invalid." <<endl;
             }
          }
private:
        int balance;
};
 
int main()
{
    Account account( 100 );
    int amount;
    
    cout << "Please enter amount: ";
    cin >> amount;
    account.credit( amount );
    cout << "Balance: " << account.getBalance() << endl;
    
    cout << "Please enter amount: ";
    cin >> amount;
    account.debit( amount );
    cout << "Balance: " << account.getBalance() << endl;
    
    system("PAUSE");
    return 0;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 10:58     Ошибка инициализации объекта, конструктором класса
Посмотрите здесь:

Задание начальных значений объекта класса конструктором C++
C++ Ошибка компиляции (преобразование объекта класса в объект другого класса)
C++ Ошибка при инициализации элемента класса
Ошибка объявления объекта класса C++
Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time (). C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.12.2012, 11:26     Ошибка инициализации объекта, конструктором класса #2
он видит 200 суть проблемы в другом
C++
1
2
3
4
5
6
7
8
9
10
11
 void debit( int amount )
       {
          if( amount <= balance )
          {
             balance = balance - amount;
             }
          if( amount > balance )
          {
             cout << "Eror, amount invalid." <<endl;
             }
          }
у вас дебит сделан таким образом что вначале он вычтет а потом еще раз проверить а не больши ли сумма вычета чем баланс, поэтому тут 2 решения
1 перенести условия для ошибки выше условия для вычета
2 поставить после условия вычета else чтоб если уж вычили то ошибки нет
Миниатюры
Ошибка инициализации объекта, конструктором класса  
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
09.12.2012, 11:34  [ТС]     Ошибка инициализации объекта, конструктором класса #3
Большое спасибо.
Даже скрин сделали
Блин все так просто а я туплю
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.12.2012, 11:47     Ошибка инициализации объекта, конструктором класса #4
Цитата Сообщение от Stallone Посмотреть сообщение
Большое спасибо.
Даже скрин сделали
Блин все так просто а я туплю
ничего страшного, терпение и труд все перетрут
Yandex
Объявления
09.12.2012, 11:47     Ошибка инициализации объекта, конструктором класса
Ответ Создать тему
Опции темы

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