![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример 2 (текстовая версия). ⇐ ПредыдущаяСтр 2 из 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; }
|