Листинг 2 Методы класса.




КС; ОПиБД

1. Выполнить лабораторную работу « Использование массивов объектов одного класса».

2. Отчет можно подготовить:

- либо в текстовом документе со скринами, соответствующими ходу работы. И прислать файл с заголовком:

«Фамилия; 06.04, 9КС, ОПиБД»,

- либо написать краткий ход работы. И прислать фотографию рукописной страницы с именем:

«Фамилия; 06.04, 9КС, ОПиБД».

- либо прислать скрины с телефона, фотографию с именем:

«Фамилия; 06.04, 9КС, ОПиБД».

Отчет нужно подготовить и прислать до 09.04 включительно.

Лабораторная работа № 23

Тема: Использование массивов объектов одного класса

 

Задание:

1. Создать класс, назначение которого покупка и продажа акций, обновление стоимости пакета.

2. Для инициализации использовать конструкторы

3. Программу организовать в виде трех модулей: заголовочного файла, файла методов, клиентского файла.

4. В клиентской программе инициализировать массив из 5 объектов, отобразить их содержание.

 

Теория:

Довольно часто, как показывает пример класса Stock, возникает необходимость иметь несколько объектов од­ного и того же класса. Вы можете создавать отдельные переменные типа объект, что мы и делали до сих пор в рассматриваемых выше примерах, однако гораздо це­лесообразнее создавать массивы объектов. Это можно сравнить с решительным скачком в неизведанное, одна­ко в действительности вы объявляете массив объектов таким же способом, каким бы вы объявили массив лю­бых других стандартных типов.:

Stock mystuff[4]; // создается массив из четырех объектов класса Stock

Напомним, что программа всегда обращается к кон­структорам классов, определенным по умолчанию, ког­да она создает объекты класса, которые не инициализи­рованы явно. Данное объявление требует либо чтобы класс вообще явно не определял никаких конструкторов, поскольку в этом случае используется неявно конструк­тор, определенный по умолчанию, но не выполняющий никаких действий, либо, как в данном случае, чтобы конструктор по умолчанию был определен явно. Каж­дый элемент — mystuff[0], mystuff[l] и т.п. — это объект класса Stock, и, следовательно, он. может быть исполь­зован с методами класса Stock:


mystuff[0].update();
mystuff [3].show();
Stock tops = mystuff[2].topval(mystuff[1]);

 

Вы можете использовать конструктор для инициали­зации элементов этого массива. В этом случае нужно вызывать конструктор для каждого отдельного элемента:


const int STKS = 4;
Stock stocks[STKS] =
{
Stock("NanoSmart", 12.5, 20),
Stock("Boffo Objects", 200, 2.0),
Stock("Monolithic Obelisks", 130, 3.25),
Stock("Fleep Enterprises", 60, 6.5)
};

В приведенном выше программном коде для иници­ализации массива используется стандартная форма: спи­сок значений, отделенных друг от друга запятыми и зак­люченных в фигурные скобки. В данном случает при вызове метода конструктора отображается каждое зна­чение. Если у класса имеется несколько конструкторов, вы можете применять различные конструкторы для раз­личных элементов:

 

const int STKS = 10;

Stock stocks[STKS] =

{

Stock("NanoSmart", 12.5, 20),

Stock (),

Stock("Monolithic Obelisks", 130, 3.25),

};

 

В данном случае инициализация объектов stocks[0] и stocks[2] выполняется с использованием конструкто­ра Stock(const char * со, int n, double pr), а инициализа­ция stocks[l] — с помощью конструктора Stock(). Поскольку такое объявление только частично инициа­лизирует массив, остальные семь элементов инициали­зируются с помощью конструктора, заданного по умол­чанию.

Схема инициализации массива объектов все еще ис­пользует конструктор, заданный по умолчанию, для со­здания элементов этого массива. Затем конструктор в фигурных скобках создает временный объекты, содержи­мое которых копируется в виде вектора. Таким образом, класс должен иметь конструктор, заданный по умолча­нию, если вы хотите создавать массивы объектов класса.

Литература:

  1. Прата, Стивен. П70 Язык программирования С++. Лекции и упражнения,6-е изд.:: Пер. с англ.- М.: ООО "И.Д. Вильямс", 2012.-1248с.
  2. Страуструп, Бьярне. С83 Программирование: принципы и практика использования С++.: Пер. с англ.- М.: ООО "И.Д. Вильямс", 2011.-1248с.:

Заголовочный файл.

 

// stockl.h

#ifndef _STOCKl_H_

#define _STOCKl_H_

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 * со,int n, double pr);

~Stock(); // деструктор

void buy(int num, double price);

void sell(int num, double price);

void update(double price);

void show();

>;

#endif

Листинг 2 Методы класса.

 

// stockl.cpp - методы класса Stock

«include <iostream>

«include <cstdlib>

«include <cstring>

using namespace std;

#include "stockl.h"

 

// конструкторы

 

Stock::Stock() // конструктор по умолчанию

{ strcpy(company, "no name");

shares = 0;

share_val = 0.0;

total_val = 0.0; }

 

Stock:: Stock (const char * со, int n, double pr)

{strncpy(company, со, 29);

company[29] = ' \0';

shares = n;

share_val = pr;

set_tot(); }

 

// деструктор класса

 

Stock::~Stock() // деструктор класса

{cout «"Bye, " «company «"! \n";}

 

// другие методы

 

void Stock::buy(int num, 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 than 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';

}

Клиентский файл

Листинг 3 Программа usestokl.cpp.

// usestokl.cpp — использование класса Stock

#include <iostream>

using namespace std;

#include "stockl.h"

 

int main()

{

const int STKS = 4;
Stock stocks [STKS] =
{
Stock("NanoSmart", 12.5, 20),
Stock("Boffo Objects", 200, 2.0),
Stock("Monolithic Obelisks", 130, 3.25),
Stock("Fleep Enterprises", 60, 6.5)
};

 

cout.setf(ios_base::fixed,ios_base::floatfield);// формат #.## cout.setf(ios_base::showpoint); //формат #.##

 

stocks[1].show();

stocks[2].show();

stocks[3].show();

stocks[4].show();

stocks[5].show();

 

return 0;

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-06-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: