|
|||
Лабораторная работа 19. ТеорияЛабораторная работа 19 Использование конструкторов и деструкторов класса Задание: - создать класс, имя которого ваша фамилия, назначение класса – покупка и продажа акций, обновление стоимости пакета; - внесите изменения в программу предыдущей лабораторной работы, чтобы для инициализации объектов класса использовать конструктор. Теория Прототип конструктора: Stock (char*co, int n, double pr); Первый аргумент является указателем на строку, которая используется для инициализации элементов класса символьного массива - company. Аргументы n и рг передают значения элементам shares и share_val. Обратите внимание на то, что возвращаемый тип отсутствует. Прототип находится в общедоступном разделе объявления класса. Ниже представлено возможное определение конструктора: Stock:: Stock(const char * со, int n, double pr) {strncpy(company, со, 29); company[29] = ' \0 '; shares = n; share_val = pr; set_tot(); } Как и конструктор, деструктор имеет специальное имя: имя класса, которому предшествует тильда (~). Таким образом, деструктор класса Stock имеет имя ~Stock(). Итак, подобно конструктору, деструктор не имеет возвращаемого значения и объявленного типа. В отличие от конструктора, у деструктора не может быть аргументов. Следовательно, прототип деструктора класса Stock должен быть таким: ~Stock (); Поскольку у деструктора Stock нет особо важных обязанностей, мы можем закодировать его как функцию, которая не выполняет никаких действий. Stock:: ~ Stock(){} Однако только для того, чтобы вы могли увидеть, когда производится обращение к деструктору, запишем его в таком виде: Stock:: ~Stock() // деструктор класса {cout « " Bye, " « company « "! \n" ; }
// Листинг 2 Программы stocks. cpp #include < iostream> using namespace std; #include < cstdlib> //или stdlib. h для exit() #include < cstring> //или string. h для strncpy() 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 (); Stock (const char * со, int n, double pr); void buy(int num, double price); void sell(int num, double price); void update(double price); void show(); };
Stock:: Stock() { strcpy(company, “NO NAME”); shares = 0; share_val = 0. 0; total_vall=0. 0; }
Stock:: ~ Stock() { cout< < " DESTRUKTOR\n\n"; }
Stock:: Stock(const char * со, int n, double pr) { strncpy(company, со, 29); //при необходимости выполняется усечение //строки со company[29] = '\0'; shares = n; share_val = pr; set_tot(); }
void Stock:: buy(int nun, double price) { shares += num; share_val = price; set_tot(); }
void Stock:: sell(int num, double price) { if (num > shares) { cerr « “You can’t sell more then you have! \n"; exit(l); } shares -= num; share_val = price; set_tot(); }
void Stock:: update(double price) { share_val = price; set_tot(); } void Stock:: show() { cout « " Company: " « company « " Shares: " « shares « '\n' « " Share Price: $" « share_val « " Total Worth: $" « total_val « '\n'; }
int main () { Stock Vlad = Stock(" SIMENS", 39, 16); Vlad. show(); Vlad. buy(3, 16); Vlad. show(); Vlad. sell(7, 18); Vlad. show();
Stock Misha = Stock(" SIMENS", 39, 16); Misha. show();
cin. get(); cin. get(); return 0; }
|
|||
|