Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 54

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

09.12.2012, 10:58. Показов 1629. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Написал программу.
Создание класса (упражнение из книги Дейтеля)
Кликните здесь для просмотра всего текста
"Создайте класс с именем 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;
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2012, 10:58
Ответы с готовыми решениями:

Задание начальных значений объекта класса конструктором
здравствуйте, форумчане. подскажите, пожалуйта, можно ли реализовать следующее: нужно создать конструктор, способный использовать...

Синтаксическая ошибка при инициализации класса
Ругается на инициализацию списком struct Cord { int x=0, y=0, z=0; }; class Point { public:

Ошибка при инициализации элемента класса
Добрый день, Нужна помощь более опытных форумчан, в поиске ошибки. Есть фрагмент кода: #include &quot;stdafx.h&quot; #include...

3
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
09.12.2012, 11:26
он видит 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 чтоб если уж вычили то ошибки нет
Миниатюры
Ошибка инициализации объекта, конструктором класса  
1
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 54
09.12.2012, 11:34  [ТС]
Большое спасибо.
Даже скрин сделали
Блин все так просто а я туплю
0
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
09.12.2012, 11:47
Цитата Сообщение от Stallone Посмотреть сообщение
Большое спасибо.
Даже скрин сделали
Блин все так просто а я туплю
ничего страшного, терпение и труд все перетрут
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.12.2012, 11:47
Помогаю со студенческими работами здесь

Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time ().
Помогите пожалуйста написать программу на С++. Просто скоро курсовую сдавать, а классы мы еще не разобрали и не успеваем. Поэтому не знаю...

Ошибка компиляции (преобразование объекта класса в объект другого класса)
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует доллары США в старые Британские фунты. Но...

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

Создание объекта динамически с конструктором
Здравствуйте! Подскажите как реализовать такой псевдокод: ClassA* Obj = new ClassA(10,20);// КлассА имеет конструктор в который...

Передача сигнала в слот объекта, порожденного конструктором класса
Доброго времени суток друзья! Подскажите как красиво решить вроде бы простую задачку: Создаю в main объект своего класса...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru