Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2009, 23:23   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию класс представляющий банковский счёт

Добрый вечер! Сейчас занимаюсь по книжке, в которой было задание. прошу проверить его.
айте определение класса, представляющего банковский счёт. Элементы данных должны содержать имя вкладчика, номер счёта (использовать строку) и сальдо.Функции-элементы должны выполнять такие действия, как:
- создание объекта и его инициализация
- отображение имени вкладчика, номера счёта и сальдо
- вклад на банковский счёт суммы, заданной аргументом
- снятие с банковского счёта суммы, заданной аргументом
Код:
class BANK
{
private:
string name;
string num;
float saldo,x,y,z=0;
public:
   BANK::BANK()      //создание объекта и его инициализация
   {
   strcpy("SberBank", name);
   strcpy("123", num);

   };
otobr();
float vklad(float a);
float sniat(float a);

        otobr()//отображение
        {cout<<BANK::name<<"  "<<BANK::num<<"  "<<BANK::saldo};
        float vklad (float a)//ввод суммы
        {
        cout<<"Vvedite summu, kotoruu vi khotite polozhit na shet\n";
        cin>>x;
        z+=x;
        return z;}
        float sniat(float a)// снятие суммы
        {cout<<"vvedite summu, kotoruu vi khotite sniat:";
        cin>>y;
        z-=y;
        return z;}
Dimarik вне форума Ответить с цитированием
Старый 28.06.2009, 00:34   #2
evgenrpo
Пользователь
 
Регистрация: 31.05.2009
Сообщений: 71
По умолчанию

Не вижу обектов. Зачем делать функцию с параметром если не чиго не передается. не string а char.
Код:
#include <iostream>
#include <string>
using namespace std;
class bank
{
private :
char name[20];
public:
void polzov();

};

void bank::polzov()
{
	strcpy(name,"SberBank");
	cout<<name<<endl;
}

void main()
{
	//Обект о1
bank o1;
o1.polzov();
}

Последний раз редактировалось evgenrpo; 28.06.2009 в 00:58.
evgenrpo вне форума Ответить с цитированием
Старый 28.06.2009, 10:57   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

А я бы сделал так:
Код:
class BANK
{
private:
char *name;
char *num;
float saldo,x,y,z=0;
public:
BANK();      //создание объекта и его инициализация
   {
   name=new char[255];
   num=new char[255];
   strcpy(name,"SberBank");
   strcpy(numб"123");
   }
~BANK(){delete []name; delete []num;}
void otobr();
float vklad(float a);
float sniat(float a);
};
        void BANK::otobr()//отображение
        {cout<<BANK::name<<"  "<<BANK::num<<"  "<<BANK::saldo}

        float BANK::vklad (float a)//ввод суммы
        {
        cout<<"Vvedite summu, kotoruu vi khotite polozhit na shet\n";
        cin>>x;
        z+=x;
        return z;}

        float BANK::sniat(float a)// снятие суммы
        {cout<<"vvedite summu, kotoruu vi khotite sniat:";
        cin>>y;
        z-=y;
        return z;
}

Последний раз редактировалось profi; 28.06.2009 в 11:02.
profi вне форума Ответить с цитированием
Старый 28.06.2009, 11:37   #4
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Цитата:
Сообщение от evgenrpo Посмотреть сообщение
Не вижу обектов. Зачем делать функцию с параметром если не чиго не передается. не string а char.
Код:
#include <iostream>
#include <string>
using namespace std;
class bank
{
private :
char name[20];
public:
void polzov();

};

void bank::polzov()
{
	strcpy(name,"SberBank");
	cout<<name<<endl;
}

void main()
{
	//Обект о1
bank o1;
o1.polzov();
}
а где здесь конструктор? и можете попонятнее объяснить, что это такое. как я понял, это функция, которая находится в Public и работает с данными private.... но тогда их может быть много.. так???
объясните попонятнее, пожалуйста
Dimarik вне форума Ответить с цитированием
Старый 28.06.2009, 12:12   #5
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Сообщение от Dimarik Посмотреть сообщение
а где здесь конструктор? и можете попонятнее объяснить, что это такое. как я понял, это функция, которая находится в Public и работает с данными private.... но тогда их может быть много.. так???
объясните попонятнее, пожалуйста
Конструктор - это особый метод ("функция" простыми слова) класса, который используется для инициализации данных класса. Он имеет такое же имя как и класс.

Как вы сказали "много конструкторов" - это уже перегрузка конструктора. Да их может быть несколько (конструкторов). Что бы подробнее об этом узнать советую вам книгу Г.Шилдт. "Самоучитель С++" она кстати есть на форуме в разделе "Литература по С/C++".
profi вне форума Ответить с цитированием
Старый 28.06.2009, 15:28   #6
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

сейчас я разбираю программу, но есть некоторые вопросы, которые я написал в комментариях. убедительная просьба ответить на них)))
Код:
#ifndef _STOCK2_H_     //что такоое _STOCK2_H_???  и что означает директива процессору   #infdef
#define _STOCK2_H_    //что делает директива процессору #define???
class Stock
{
private:
        char company[30];
        int shares;
        double share_val;
        double total_val;
        void set_tot()
                {total_val= shares * share_val;}// почему не поставлена ;???
public:
        Stock();//что делает этот конструктор по умолчанию???
        Stock (const char * co, int n, double pr);
        ~Stock() ;//деструктор, но, что он делает???
        void buy (int num, double price);
        void sell (int num, double price);
        void update (double price);
        void show() const;//что означает спецификатор const?? и почему он поставлен после функции?
        const Stock & topval (const Stock & s) const;//просьба объяснить что какой спецификатор const делает в этой функции
};
#endif

Последний раз редактировалось Dimarik; 28.06.2009 в 15:56.
Dimarik вне форума Ответить с цитированием
Старый 28.06.2009, 16:09   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
    void set_tot()//почему не поставлена ;???
                {total_val= shares * share_val;}// почему не поставлена ;???
потому что это функция, а ниже - ее тело.
Код:
 Stock();//что делает этот конструктор по умолчанию???
Не вижу, чтобы он что-нибудь делал. Вероятно, он описан в другом месте.
Код:
  Stock() {}//деструктор, но, что он делает???почему не поставлена ;???
То же самое. Описания не вижу. К тому же это не деструктор - нет тильды перед именем.
Код:
 void show() const;//что означает спецификатор const?? и почему он поставлен после функции?
Значит, что функция не собирается ничего изменять.
Код:
const Stock & topval (const Stock & s) const;//просьба объяснить что какой спецификатор const делает в этой функции
Первый означает, что функция вернет постоянную ссылку.
Второй говорит о том, что объект s не будет изменен.
Третий - о том, что поля объекта не будут изменены (если они не определены как mutable).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.06.2009, 16:27   #8
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

И ещё у меня есть парочка вопросиков. к этому заголовочному файлу прилагалась программа. Но почему-то, несмотря на то, что я всё сделал так, как предлагал автор книги, у меня компиллятор не опознаёт переменные, которые были объявлены в заголовочном файле. непонятно, почему. И ещё, вероятно, что в книге были сделаны какие-то опечатки в том месте, где применялся оператор cerr. Как я понял, этот оператор выполняет ту же самую функцию, что и оператор cout, но вот только непонятно, какая разница между этими операторами....
вот код
Код:
#include <iostream.h>
#include <cstring>
#include "stock2.h"
Stock::Stock()// коструктор по умолчанию
{
        strcpy(company, "no name");
        shares=0;
        share_val=0.0;
        total_val=0.0;
}
Stock::Stock(const char* co, int n, double pr)
{
        strcpy(company, co);
        shares=n;
        share_val=pr;
        set_tot();
}
void Stock::buy (int m, double prices)
{
        if (num <0)
        {
                cerr<<"Number of shared purchased can`t be negative.<< Translation is aborted.\n"
        }
        else
        {
                shares+=num;
                share_val=price;
                set_tot();
        }
}
void Stock::sell (int num, double price)
{
        if (num> shares)
        {
                cerr<<"you can`t sell more than you have!"
                <<"Translation is aborded.\n
        }
        else
        {
                shares-=num;
                share_val=price;
                set_tot();
        }
}
void Stock::update (double price)
{
        share_val=price;
        set_tot();
}
void Stock::update (double price)
{
        share_val=price;
        set_tot();
}
void stock::show() const
{
        cout<<"Company: "<<company<<"shares: "
        <<shares<<endl
        <<"share Price: $"<<share_val
        <<"Total Worth: $"<<total_val<<endl;
}
const Stock & Stock::topval( const stock & s) const
{
        if (s total_val>total_val)
                retirn s;
        else
                return *this;
}
и ещё 2 вопросик. почему присутствуют несколько конструкторов? это что-то похоже на перегрузку функций, но конструкор вызывается автоматически, в отличе от перегруженных функций. тогда как компилятор выбирает, какой из конструкторов он должен использовать?
P.S. убедительная просьба ответить на вопрос в моём предыдущем сообщении относительно директив препроцессору
Dimarik вне форума Ответить с цитированием
Старый 28.06.2009, 16:33   #9
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Директива #ifndef проверяет, определен ли такой заголовочный файл, какой написан далее. В развернутом варинате это означает
if not defined (если не определен)
В таком случае, если файл не определен (не подключен), то директива #define определяет его.
Данная конструкция сделана для того, чтобы файл нельзя было подключить дважды.

_STOCK2_H_ - это имя заголовочного файла. Можно писать еще вот так
STOCK2H
stock2_h
MaTBeu вне форума Ответить с цитированием
Старый 28.06.2009, 16:36   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

------------------
Цитата:
И ещё, вероятно, что в книге были сделаны какие-то опечатки в том месте, где применялся оператор cerr. Как я понял, этот оператор выполняет ту же самую функцию, что и оператор cout, но вот только непонятно, какая разница между этими операторами....
В винде, вроде, это практически одно и то же и нужно для совместимости. А в Unix для них используются разные дескрипторы для вывода.

Цитата:
и ещё 2 вопросик. почему присутствуют несколько конструкторов? это что-то похоже на перегрузку функций, но конструкор вызывается автоматически, в отличе от перегруженных функций. тогда как компилятор выбирает, какой из конструкторов он должен использовать?
Зависит от того, как вы конструктор вызываете.
Если без параметров, то вызовется Stock(), а если с ними, то Stock(const char* co, int n, double pr).

Кавычки у вас там не везде стоят.
И вот тут еще:
Код:
const Stock & Stock::topval( const stock & s) const
{
        if (s total_val>total_val)
                retirn s;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 28.06.2009 в 16:39.
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На счёт окошек Акашаев Нурлан Общие вопросы Delphi 2 26.06.2008 09:52
Как на счёт создания игрового 2D или 3D движка на C++? SalasAndriy Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 23.12.2007 23:05
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28
Помогите мне пожалуйста!На счёт книг! SADAM Свободное общение 1 08.06.2007 14:26