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

Пример решения задания

Лабораторная работа № 7 | Функции обработки строк типа AnsiString | Лаборатоная работа № 8 | Теоретические сведения | Сведения о гражданине ind1 | Лабораторная работа № 9 | Лабораторная работа № 10 | Лабораторная работа № 11 | Сущности и Объекты | Пример класса |


Читайте также:
  1. I. Проверка домашнего задания
  2. II Проверка домашнего задания
  3. II. Проверка домашнего задания.
  4. II. Проверка домашнего задания.
  5. II. Проверка домашнего задания.
  6. II. Часть примерного теста на экзамен.
  7. IV. Перечень вопросов, по которым старший государственный таможенный инспектор вправе или обязан самостоятельно принимать управленческие и иные решения

Предметная область: «Летательные Аппараты»

Пример реализации на языке C++:

//

// Летательные Аппараты (ЛА)

//

 

#include <conio.h>

#include <iostream.h>

#include <string.h>

 

// Перечисление, которое задает возможные состояния

// Летательного Аппарата - "на земле" и "в воздухе"

enum Flying { onGround = 0, inAir };

 

//

// Класс: Летательный Аппарат (или ЛА)

//

class FlyDevice

{

private:

char name[100]; // Имя летательного аппарата

 

protected:

Flying state; // Состояние

 

public:

// Конструктор ЛА по умлочанию - без параметров

FlyDevice(): state(onGround)

{

setName("Неопознанный Летающий Объект");

cout << "FlyDevice::FlyDevice\t " << getName() << endl;

 

}

 

// Конструктор ЛА с параметром - именем ЛА

FlyDevice(char *n)

{

state = onGround;

setName(n);

cout << "FlyDevice::FlyDevice\t " << getName() << endl;

}

 

// Деструктор ЛА

virtual ~FlyDevice()

{

cout << "FlyDevice::~FlyDevice\t " << getName() << endl;

}

 

// Два метода, которые осуществляют доступ к закрытой переменной name

// Модификатор const говорит о том что переменная не должна изменяться

virtual void setName(const char *n) { strcpy(name, n); }

virtual char* getName() { return name; }

 

// Виртуальный метод - "летать" мозжет быть перекрыт в классах-потомках

virtual void fly()

{

state = inAir;

cout << "FlyDevice::fly\t\t " << getName()

<< " в воздухе!" << endl;

};

};

 

//

// Класс: Планер - безмоторный ЛА.

// Планер поднимается другим самолетом на определенную высоту

// и далее парит в восходящих воздушных потоках

//

class Glider: public FlyDevice

{

protected:

int windForce; // Сила ветра в баллах

int startHeight; // Начальная высота

 

public:

const static int STORM = 7; // Недопустимо сильный ветер

const static int MIN_HEIGHT = 500; // Минимальная стартовая высота

 

// Конструктор Планера - инциализирует класс-родитель

Glider(char* name): FlyDevice(name), startHeight(0), windForce(0)

{

cout << "Glider::Glider\t\t " << getName() << endl;

}

 

// "Перекрываем" виртуальный метод класса-родителя

virtual void fly();

 

// Методы доступа к переменным windForce и startHeight

int getHeight() { return startHeight; }

void setHeight(int h) { startHeight = h; }

 

int getWindForce() { return windForce; }

void setWindForce(int wf) { windForce = wf; }

};

 

// Пример описания тела метода вне описания класса

void Glider::fly()

{

if (getWindForce() < STORM && getHeight() >= MIN_HEIGHT)

{

cout << "Glider::fly\t\t " << getName()

<< " Высота=" << getHeight()

<< " Сила Ветра=" << getWindForce()

<< endl;

FlyDevice::fly();

}

else

{

cout << "Glider::fly\t\t " << getName()

<< " Нелетные условия полета" << endl;

}

};

 

// Перечисление, которое задает возможные состояния

// Двигателя - "остановлен", "запущен"

enum EngineState { stopped = 0, started };

 

//

// Класс: Самолет - моторный ЛА.

//

class Airplane: public FlyDevice

{

protected:

int fuel; // Запас топлива

EngineState engine; // Состояние двигателя

 

public:

const static int MIN_FUEL = 100; // Минимальное количество горючего

 

// Конструктор класса - инциализирует класс-родитель

Airplane(char* name): FlyDevice(name), engine(stopped), fuel(0)

{

cout << "Airplane::Airplane\t " << getName() << endl;

}

 

// Деструктор класса - освобождаем ресурсы, очиащаем состояния

~Airplane()

{

if (state == inAir) {

ground();

}

if (engine == started) {

cout << "Airplane::~Airplane\t " << getName()

<< " Остановить двигатель" << endl;

engine = stopped;

} else {

cout << "Airplane::~Airplane\t " << getName() << endl;

}

}

 

virtual void addFuel(int f)

{

fuel += f;

cout << "Airplane::addFuel\t " << getName()

<< " Горючее=" << fuel << endl;

}

 

// Объявление virtual для метода fly - лишнее,

// так как метод уже объявлен виртуальным в классе-родителе.

virtual void fly();

virtual void ground();

};

 

void Airplane::fly()

{

if (fuel > MIN_FUEL) {

if (engine!= started) {

cout << "Airplane::fly\t\t " << getName()

<< " Запуск двигателя" << endl;

engine = started;

}

cout << "Airplane::fly\t\t " << getName()

<< " Горючее=" << fuel << endl;

 

// Вызвается метод класса-родителя

FlyDevice::fly();

 

// Горючее расходуется при полете

fuel -= 50;

 

} else {

cout << "Airplane::fly\t\t " << getName()

<< " Не хватает горючего!" << endl;

}

}

 

// Новый метод Самолета - "Приземлиться"

void Airplane::ground()

{

cout << "Airplane::ground\t " << getName()

<< " Приземлиться" << endl;

state = onGround;

}

 

void main()

{

clrscr();

 

{

// Скобки ограничивают область видимости переменных

cout << endl << "*** Тест класса Glider ***" << endl;

Glider gl("Scooter-FX12");

gl.setHeight(Glider::MIN_HEIGHT + 100);

gl.fly();

// Здесь будет вызван деструктор объекта gl

}

 

{

// Скобки ограничивают область видимости переменных

cout << endl << "*** Тест класса Airplane ***" << endl;

Airplane plane("TY-134");

plane.fly();

 

plane.addFuel(Airplane::MIN_FUEL + 300);

plane.fly();

plane.fly();

plane.fly();

plane.ground();

// Здесь будет вызван деструктор объекта plane

}

 

{

cout << endl << "*** Тест полиморфизма классов ***" << endl;

FlyDevice *a, *b;

 

// Динамическое создание объектов

a = new Glider("Glider-AQ23");

b = new Airplane("LA-46");

 

a->fly();

b->fly();

 

cout << "Имя объекта a = " << a->getName() << endl;

cout << "Имя объекта b = " << b->getName() << endl;

 

// При динамическом создании объектов

// необходимо явно освобождать ресурсы

delete a; // неявно вызывается деструктор Glider

delete b; // неявно вызывается деструктор Airplane

}

}

Результат выполнения программы:

*** Тест класса Glider ***

FlyDevice::FlyDevice Scooter-FX12

Glider::Glider Scooter-FX12

Glider::fly Scooter-FX12 Высота=600 Сила Ветра=0

FlyDevice::fly Scooter-FX12 в воздухе!

FlyDevice::~FlyDevice Scooter-FX12

 

*** Тест класса Airplane ***

FlyDevice::FlyDevice TY-134

Airplane::Airplane TY-134

Airplane::fly TY-134 Не хватает горючего!

Airplane::addFuel TY-134 Горючее=400

Airplane::fly TY-134 Запуск двигателя

Airplane::fly TY-134 Горючее=400

FlyDevice::fly TY-134 в воздухе!

Airplane::fly TY-134 Горючее=350

FlyDevice::fly TY-134 в воздухе!

Airplane::fly TY-134 Горючее=300

FlyDevice::fly TY-134 в воздухе!

Airplane::ground TY-134 Приземлиться

Airplane::~Airplane TY-134 Остановить двигатель

FlyDevice::~FlyDevice TY-134

 

*** Тест полиморфизма классов ***

FlyDevice::FlyDevice Glider-AQ23

Glider::Glider Glider-AQ23

FlyDevice::FlyDevice LA-46

Airplane::Airplane LA-46

Glider::fly Glider-AQ23 Нелетные условия полета

Airplane::fly LA-46 Не хватает горючего!

Имя объекта a = Glider-AQ23

Имя объекта b = LA-46

FlyDevice::~FlyDevice Glider-AQ23

Airplane::~Airplane LA-46

FlyDevice::~FlyDevice LA-46

 

 


Список использованной литературы

1. Архангельский А.Я. Программирование в C++ Bulder. М.: Бином, 2003.

2. Дейтел X., Дейтел П. Как программировать на Си. -М: Бином, 2000.

3. Паннас К., Мюррей У. Программирование на Си и Си++. -К.:Ирина, BHV, 2000.

4. Дьюхарст С., Старк К. Программирование на Си++. - Киев, 1993.

5. Белецклй Я. Турбо Си++. Новая разработка. - М.: Машиностроение,1994.

6. Уэйт М., Прата С., Мартин Д. Язык Си. - М.: Мир, 1988.

7. Фокс Дж. Программное обеспечение и его разработка. - М.: Мир, 1985.

8. Лингер Р. и др. Теория и практика структурного программирования. - М.:Мир, 1982.

9. Гудман С., Хидетниени С. Введение в разработку и анализ алгоритмов. -М.: Мир, 1982.

10. Мейер Б., Бодуэн К. Методы программирования. Т. I и 2. - М.: Мир,1984.

11. Зиглер К. Методы проектирования программных систем. - М.: Мир, 1985.

12. Петров А.В. и др. Вычислительная техника в инженерных и экономических расчетах: Учебник для вузов. - М.: Bill, 1984.

13. Шнейдерман Б. Психология программирования. - М.: Радио и связь, 1984.-304с.– 2007.


Дата добавления: 2015-11-04; просмотров: 34 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Создание объектов. Конструкторы и деструктор| Цели и задачи освоения дисциплины

mybiblioteka.su - 2015-2024 год. (0.021 сек.)