Хелпикс

Главная

Контакты

Случайная статья





Лабораторная работа 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;

}

 

 

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.