Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример 2 (текстовая версия).






#include " stdafx.h"

#include < iostream>

using namespace std;

class Monster // имя класса

{

private: // закрытый раздел данных об объекте

int health; // самочуствие

int ammo; // боеприпасы

public: // окрытый раздел данных об объекте

void communicate() // метод класса communicate(), выводящий сообщение

{

cout < < " Монстр к бою готов! \n";

}

// метод setM(), который устанавливает health и ammo монстра

void setM(int he, int am)

{

health = he; // закрытому полю health присваивается значение he

ammo = am; // закрытому полю ammo присваивается значение am

}

//метод getM(), который позволяет получить значение health и ammo

void getM()

{

cout < < " Самочуствие = " < < health < < " %" < < endl

< < " Боеприпасы = " < < ammo < < " %" < < endl;

}

}; // конец объявления класса Monstr

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL, " rus");

int n_health, n_ammo;

cout < < " Введите желаемый уровень самочуствия и боеприпасов монстра.\n";

cout < < " Самочуствие: ";

cin > > n_health;

cout < < " Боеприпасы: ";

cin > > n_ammo;

Monster freddy; // объявление объекта freddy класса Monster

freddy.setM(n_health, n_ammo); // установка значений

freddy.getM(); // получение значений

freddy.communicate(); // отобразить сообщение

system(" pause");

return 0;

}

 

 

Пример 3. В программе создать класс, который имитирует продажу и покупку акций компаний на бирже. Необходимо хранить следующую информацию: 1) название компании, представляющий акционерный капитал (поле company); 2) количество акций, находящихся во владении клиента (поле shares); 3) стоимость одной акции (поле share_val); 4) общая стоимость всех акций конкретной компании (поле total_val). Открытый интерфейс класса содержит следующие функции: 1) приобретении начального пакета акций компании (будущий метод acquire()); 2) покупка дополнительных акций в имеющийся пакет (будущий метод buy()); 3) продажа акций (sell()); 4) обновление объема доли в пакете акций (update()); 5) отображение информации об акциях, находящихся у клиента (show()). Создать объект класса, например, клиента по имени Оливер, который купил 20 акций компании «NanoSmart» по цене 12, 5$ за акцию, смоделировать различные ситуации с дальнейшей покупкой, продажей и общей стоимостью пакета акций.

 

 

Пример 3.1 (stock00.h). Заголовочный файл.

 

Пример 3.2 (stocks00.cpp). Файл реализации, содержащий определения функций-членов.

 

 

 

Пример 3.3(020_prim01.cpp). Файл с главной функцией main(), в котором тестируется созданный класс Stock.

 

Результат работы программы:

Замечание (клиент-серверная модель). Согласно принципам ООП, проект программы часто обсуждается в терминах клиент-серверной модели. Согласно этой концепции, клиентом является программа, которая использует класс. Объявление класса, включая его методы, образует сервер, который является ресурсом, доступным нуждающейся в нем программе. Клиент взаимодействует с сервером только через открытый (public) интерфейс. Это означает, что единственной ответственностью клиента и, как следствие — программиста, является знание интерфейса. Ответственностью сервера и, как следствие — его разработчика, является обеспечение того, чтобы его реализация надежно и точно соответствовала интерфейсу. Любые изменения, вносимые разработчиком сервера в класс, должны касаться деталей реализации, но не интерфейса. Это позволяет программистам разрабатывать клиент и сервер независимо друг от друга, без внесения в сервер таких изменений, которые нежелательным образом отобразятся на поведении клиента.

 

Пример 3.1 (stock00.h). Заголовочный файл.

Текстовая версия.

//директива #ifndef проверяет, не было ли STOCK00_H_ определено ранее

#ifndef STOCK00_H_

//директива #define STOCK00_H_ определяет

//константу препроцессора STOCK000_H_

#define STOCK00_H_

 

#include < string>

 

class Stock // объявление класса

{

private:

std:: string company; //название компании

long shares; // количество акций у инвестора

double share_val; // стоимость одной акции

double total_val; //общая стоимость всех акций конкретной компании

//функция set_tot() определена внутри объявления класса

//она вычисляет общуюя стоимость всех акций конкретной компании

void set_tot() { total_val = shares*share_val; }

 

public: // открытый интерфейс класса Stock

//метод acquire(), который реализует приобретение

//начального пакета акций некоторой компании

void acquire(const std:: string & co, long n, double pr);

//метод buy(), который реализует приобретение

//дополнительный акций в имеющийся пакет

void buy(long num, double price);

//метод sell(), который реализует продажу акций

void sell(long num, double price);

//метод update(), который реализует обновление объема доли

//в пакете акций

void update(double price);

//метод show(), который реализует отображение информации

//о пакете акций, находящихся во владении инвестора

void show();

}; // окончание рбъявления класса

#endif

 

Пример 3.2 (stocks00.cpp). Файл реализации.

Текстовая версия.

#include " stdafx.h"

#include < iostream>

//подключение заголовочного файла stock00.h,

//чтобы компилятор имел доступ к определению класса

#include " stock00.h"

 

//операция разрешения контекста (::) применяется для

//индентификации класса, которому принадлежит функция

void Stock:: acquire(const std:: string & co, long n, double pr)

{

company = co;

if (n < 0)

{

//количество акций не может быть отрицательным

std:: cout < < " Number of shares can't be negative; "

< < company < < " shares set to 0.\n";

shares = 0; //количество акций равно 0

}

else

shares = n;

share_val = pr;

set_tot();

}

 

//определяем функцию buy(), которая является функцией-членом класса Stock

void Stock:: buy(long num, double price)

{

if (num < 0)//Если количество приобретаемых акций - отрицательное число

{

//Количество приобретаемых пакетов не может быть отрицательным.

//Транзанкция прервана.

std:: cout < < " Number of shares purchased can't be negative. "

< < " Transaction is aborted.\n"

< < " --------------------------------------------\n";

}

else

{

shares += num;

share_val = price;

set_tot();

}

}

 

//метод sell() - продажа акций

void Stock:: sell(long num, double price)

{

using std:: cout;

if (num < 0)

{

//Количество продаваемых пакетов не может быть отрицательным.

//Транзакция прервана.

cout < < " Number of shares sold can't be negative. "

< < " Transaction is aborted.\n"

< < " --------------------------------------------\n";

}

else if (num > shares)

{

//Нельзя продать больше акций чем те, что есть в наличии.

cout < < " You can't sell more than you have! "

< < " Transaction is aborted.\n"

< < " --------------------------------------------\n";

}

else

{

shares -= num;

share_val = price;

set_tot();

}

}

 

//метод update() - обновление объема доли в пакете акций

void Stock:: update(double price)

{

share_val = price;

set_tot();

}

 

//метод show() - вывод информации

void Stock:: show()

{

//вывод названия компании, количества акций, цена одной штуки,

//общей стоимости акций.

std:: cout < < " Company: " < < company

< < " Shares: " < < shares < < '\n'

< < " Share price: $" < < share_val

< < " Total worth: $" < < total_val < < '\n';

}

 

Пример 3.3(020_prim01.cpp). Файл с главной функцией main().

Текстовая версия.

#include " stdafx.h"

#include " stock00.h" // подключение заголовочного файла stock00.h

 

int _tmain(int argc, _TCHAR* argv[])

{

Stock oliver; //объявление переменной oliver типа данных Stock

//для объекта oliver вызывается метод acquire()

oliver.acquire(" NanoSmart", 20, 12.50);

//вывод информации на экран

oliver.show();

///////////////////////////////////

//покупка дополнительных 15 акций по цене $18.125

oliver.buy(15, 18.125);

oliver.show();

///////////////////////////////////

//продажа 400 акций по цене $20.00, которых нет в наличии,

//следовательно на монитор будет выведено соответствующее сообщение

oliver.sell(400, 20.00);

oliver.show();

//////////////////////////////////

oliver.buy(300000, 40.125);

oliver.show();

//////////////////////////////////

oliver.sell(300000, 0.125);

oliver.show();

/////////////////////////////////

oliver.buy(-23, 9.12);

oliver.show();

system(" pause");

return 0;

}

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.018 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал