Студопедия Главная Случайная страница Обратная связь

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

Файл CakeWithJam.cpp




#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <string>

#include <conio.h>

 

#ifndef _CakeWithJam_h_

#define _CakeWithJam_h_

 

#include "CakeWithJam.h"

 

#endif

 

using namespace std;

 

void CakeWithJam::Swallow (void)

{

Fraction = 0.0;

cout <<(":-O Pyrizhok z ")<< NameOfJamInside;cout <<(" zjilu!!!")<< endl;

}

 

string CakeWithJam::Bite (float BiteFraction)

{

Fraction -= BiteFraction;

if(Fraction>=0.7) return ("Vkysitj biljshe, djem sche vsereduni!!!");

else if(Fraction>0.3) return NameOfJamInside;

else if(Fraction>0.0) return ("Chomy tak malo vkysulu? Djemy zliva nema!!!");

else if(Fraction==0.0) { Swallow(); return ("Vu zjilu djem!!!"); }

else return ("Vse dobre! Ne zaburajte v mene chasy!!!");

}

 

CakeWithJam::CakeWithJam ()

{

Fraction = 1.0;

NameOfJamInside = NameOfJamByDefault;

cout <<("Novuj purizhok z ")<< NameOfJamInside; cout <<(" specheno!!!")<< endl;

}

 

 

CakeWithJam::CakeWithJam (string jam)

{

Fraction = 1.0; NameOfJamInside = jam;

cout <<("Novuj purizhok z ")<< NameOfJamInside;cout<<("specheno!")<< endl;

}

 

CakeWithJam::~CakeWithJam ()

{

cout <<("Pyrizhok z ")<< NameOfJamInside;

if(Fraction>0.0) cout <<(" ne zjilu!")<< endl;

else cout <<(" zjilu!")<< endl;

}

 

CakeWithJam::CakeWithJam (CakeWithJam& srcObj)

{

Fraction = srcObj.Fraction;

NameOfJamInside = srcObj.NameOfJamInside;

cout << ("Novuj purizhok z ") << NameOfJamInside;cout << ("specheno!") << endl;

}

 

string CakeWithJam::Bite (const CakeWithJam& srcObj)

{

return this->Bite(1-srcObj.Fraction);

}

 

ostream& operator<<(ostream& os, CakeWithJam& cake) {

return os << ("Purizhok ") << cake.NameOfJamInside;cout << (" djemom (" )<< cake.Fraction;cout << (" zliva)");

}

 

istream& operator>>(istream& is, CakeWithJam& cake)

{

string s;

is >> s;

if(cake.Fraction>=1.0)

if(cake.NameOfJamInside.empty()) cake.NameOfJamInside = s;

else cake.NameOfJamInside += ((" i ") + s);

return is;

}

void CakeWithJam::UseJamByDefault(const string jam)

{

NameOfJamByDefault = jam;

}

string CakeWithJam::NameOfJamByDefault = ("jablukom");

 

Рис. 1. Діаграма класів

3.4. Розширений опис завдання

Створити клас та описати 3–4 перевантажені методи згідно індивідуального завдання.

Деталізація завдання

1. Частина 1. «Створення класу»

1.1. Описати клас згідно індивідуального завдання, обов’язково створивши у

ньому:

1.1.1. принаймні по одному відкритому (public), закритому (private) та

захищеному (protected) полю;

1.1.2. конструктор по замовчуванню, конструктор з параметрами;

1.1.3. деструктор;

1.1.4. відкриті (public) методи-аксесори для читання та запису закритих та

захищених полів;

1.1.5. поля та методи, що забезпечують реалізацію згаданої у індивідуальному завданні функціональності класу;

1.1.6. власні поля та методи, що дозволяють розширити можливості класу відповідно до тематики індивідуального завдання;

1.1.7. метод виводу екземпляру класу на екран;

1.1.8. консольний метод ініціалізації екземпляру класу (вводу з клавіатури);

1.2. У головній програмі:

1.2.1. створити принаймні один екземпляр класу та принаймні один вказівник на екземпляр цього ж класу, проілюструвавши роботу різних типів конструкторів;

1.2.2. продемонструвати звертання до полів екземпляру класу та використання методів-аксесорів;

1.2.3. створити посилання на екземпляр класу через вказівник та продемонструвати використання полів та методів класу через цей вказівник на екземпляр класу;

1.2.4. динамічно створити (new) екземпляр класу, зберігши його адресу у раніше описаному вказівнику, продемонструвати роботу з ним та видалити (delete);

1.2.5. продемонструвати роботу з усіма додатково створеними полями та методами;

1.2.6. продемонструвати роботу з усіма описаними методами вводу/виводу класу.

2. Частина 2. «Перевантаження методів класу»

2.1. Описати клас із частини 1 з перевантаженим методом відповідно до індивідуального завдання.

2.2. У головній програмі проілюструвати роботу перевантажених методів.

3.5. Індивідуальні завдання

1. Клас «Торт» з полями:

· назва (public);

· крем (private);

· вітальний напис (protected);

· кількість шматків

· вага;

· ціна за 1кг;

· вартість доставки

За допомогою методів класу передбачити наступні можливості:

· зміна назви;

· обчислення вартості торту;

· зміну ціни торту, якщо назва відповідає заданій;

Перевантажені методи:

· розрізання — з одним параметром (ціле число) — встановлює кількість шматківна скільки необхідно ділити торт; якщо не передано ні одного параметра – повертає зменшує кількість відрізаних частин на одиницю.

· встановлення вартості доставки: без параметрів – встановлює вартість доставки рівну 0; якщо предано один цілий параметр с – обчислює вартість доставки як с*20.

2. Клас «Квітка» з полями:

· назва (public),

· кількість пелюсток (private),

· колір (protected);

· місяць цвітіння;

· висота;

· тип суцвіття;

· тип кореневої системи.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· вивід всієї інформаціїї про об’єкт;

· вивід всіх квітів, висота яких більша за вказану;

· вивід всіх квітів, назва яких починається з певної букви;

Перевантажений метод:

місяць цвітіння — числовий або текстовий параметр — встановлює місяць цвітіння квітки, якщо передано один параметр якогось із двох типів; повертає текстове значення місяця цвітіння квітки, якщо не передано ні одного параметра.

3. Клас «Птах» з полями:

· назва (public);

· кількість пташенят (private);

· вага (protected);

· висота польоту;

· колір;

· розмах крил;

· батьківщина.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· виведення всіх птахів, розмах крил яких я більше заданого;

· пошук пташки, що літає найвище;

· пошук птахів, вага яких знаходиться у певному діапазоні.

Перевантажений метод висота польоту:

· 1 цілий параметр – встановлює максимально допустиму висоту польоту;

· Цілий та рядковий параметр, що вказує одиниці виміру (метри або кілометри) – встановлює максимально допустиму висоту;

· Без параметрів – повертає максимально допустиму висоту польоту у вигляді стрічки із зазначенням висоти та одиниць виміру.

4. Клас «Коробка» з полями:

· назва (public);

· форма (private);

· матеріал (protected);

· структура «адреса доставки» з полями вулиця, будинок, квартира;

· вартість доставки;

· форма оплати;

За допомогою методів класу передбачити наступні можливості:

· виведення адреси доставки;

· зміна вартості доставки;

· зміна назви;

Перевантажені методи:

· адреса доставки — з одним, двома або трьома параметрами (вулиця — текст, будинок, квартира — цілі числа) — встановлює адресу доставки, якщо передано хоча б якісь параметри (припускається, що номер квартири та номер будинку по замовчуванню рівні одиниці); повертає адресу доставки у вигляді структури з трьома полями, якщо не передано ні одного параметра.

· форма оплати – якщо передано один цілий параметр встановлює форму оплати як готівкову, якщо передано 2 параметри (ціле, ціле) – встановлює форму оплати як безготівкому, причому перший параметр слугує номером картки.

5. Клас «Військовий»з полями:

· ім’я (public);

· строк служби (private);

· звання (protected);

· структура дата народження;

· номер телефону;

· номер частини;

· рід військ;

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· пошук всіх осіб певного звання;

· пошук осіб, строк служби яких знаходится у заданому діапазоні;

· зніна заданого номеру телефону;

Перевантажений метод: місце служби — з одним або двома параметрами (рід військ — текст, номер частини — ціле число) — повертає текстову стрічку (рід військ), якщо передано правильний номер частини, або порожню стрічку, якщо номер частини помилковий для даного військовослужбовця; аналогічно повертає номер частини або нуль, якщо передано один текстовий параметр (рід військ); встановлює нове місце служби, якщо передано два параметри.

6. Клас «Сховище» з полями

· назва (public);

· предмети (private);

· тип (protected);

· інвентарний номер;

· адреса;

· вага предмету.

За допомогою методів класу передбачити наступні можливості:

· переміщення предмета з одного сховища у інше (зміна адреси)

· вивід предметів, що містяться у сховищі, назва яких починається на певну букву;

· сортування предметів у сховищі згідно лексикографічної послідовності.

Перевантажений метод: зберігання — з одним параметром (інвентарний номер — ціле число, або назва предмету — текст) — повертає номер місця зберігання, якщо одержано інвентарний номер, або записує новий предмет на склад, якщо передано назву предмету (при цьому предмету призначається місце та інвентарний номер) у масив «предмети».

7. Клас «Планета» з полями:

· назва (public);

· супутники (private);

· діаметр (protected);

· відстань до Сонця;

· маса;

· відстань до супутників;

· маса супутників.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· вивід планет у послідовності згідно з відстанню до сонця;

· пошук планет із найбільшою кількістю супутників;

· пошук найбільшою за масою об’єкта (маса планети + маси всіх супутників).

Перевантажений метод: супутник — з двома параметрами (номер — ціле число, віддаль — дійсне число) — повертає номер супутника, якщо передано один дійсний параметр, повертає віддаль, якщо передано цілий параметр, встановлює нове значення віддалі, якщо передано обидва параметри.

8. Клас «Таксі» з полями:

· пасажир (public);

· водії (private);

· адреси (protected);

· марка автомобіля;

· пасажиромісткість автомобіля;

· державний номер;

· вартість замовлення.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· підрахунок автомобілів певної марки;

· пошук автомобіля за параметром „кількість пасажирів”;

· встановлення знижки.

Перевантажений метод: замовлення — з одним параметром (адреса – текст), з двома параметрами (водій – ціле число, адреса – текст), або без параметрів — повертає ціле число (номер водія, призначеного на виклик), якщо передано один параметр; повертає true/false, як відповідь на можливість замовити конкретного водія за заданою адресою, якщо передано два параметри; повертає співвідношення вільних та замовлених водіїв (дійсне число), якщо викликано без параметрів. При формуванні замовлення поле «пасажир» використовується для ідентифікації замовника — припускається, що замовник повинен записати у це поле своє прізвище і тоді викликати метод «замовлення».

9. Клас «Порт» з полями:

· назва (public);

· площа (private);

· кількість населення (protected);

· тип (річковий, морський або проміжний);

· кількість кораблів, що щоденно можуть обслуговуватись;

· кількість кораблів, що можуть обслуговуватись одночасно;

· відстань до найближчого порту;

· назва найближчого порту;

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· сортування портів за кількістю населення;

· пошук найбільшого за площею порту;

· перевірка можливості обслуговування певної кількості кораблів за 1 день (якщо неможливо, то виводити скільки днів необхідно).

Перевантажений метод: відстань до найближчого порту:

*цілий числовий параметр(означає, что відстань задана в кілометрах)

*цілий числовий параметр, текстовий параметр, що вказує довжину та одиниці їх виміру одиниці виміру (метри або милі).

10. Клас «Країна» з полями:

· назва (public);

· столиця (private);

· кількість населення (protected);

· площа;

· сусіди;

· наявність виходу в море;

· середня заробітна плата;

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· підрахунок кількості сусідів;

· сортування за назвою;

· сортування за столицею;

Перевантажений метод: відстань до найближчої столиці:

*цілий числовий параметр (означає, что відстань задана в кілометрах, якщо рухатись автомобільною дорогою)

*цілий числовий параметр, текстовий параметр, що вказує відстань(цілий параметр) і тип траспорту (текстовий) – літак, поїзд, корабель.

*текстовий, цілий – встановлює нове значення відстані сполученням певним видом транспорту

11. Клас «Фотоапарат» з полями:

· марка (public);

· тип матриці (private);

· чутливість матриці (protected);

· модель;

· діагональ екрану;

· об’єм накопичувача;

· фото (містить назву, тип і розмір).

За допомогою методів класу передбачити наступні можливості:

· пошук найбільшого фото за розміром;

· обчислення кількості збережених фото;

Перевантажений метод: збереження фото — без параметрів – нарощує кількість фото на 1; з одним параметром (розмір однієї фотографії) — повертає максимальну кількість фото, що можуть бути вміщені на карту памяті, з двома параметрами (кількість фото та їх розмір) ­– повертає значення типу bool, яке вказує, чи достатньо місця на карті пам’яті для розміщення даних фото.

12. Клас «Квартира» з полями:

· забудовник (public);

· кількість кімнат (private);

· матеріал будинку (protected);

· тип (люкс, стандарт, бюджет);

· площа;

· вартість 1м.кв.;

· адреса;

· поверх.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· пошук усіх квартир певного типу;

· пошук найбільшої за площею квартири;

· пошук квартир на заданому поверсі.

Перевантажений метод: адреса — з одним, двома або трьома параметрами (вулиця — текст, будинок, номер квартири — цілі числа) — встановлює адресу будинку, якщо передано хоча б якісь параметри (припускається, що номер квартири та номер будинку по замовчуванню рівні одиниці); повертає адресу розташування у вигляді структури з трьома полями, якщо не передано ні одного параметра.

13. Клас «Автомобіль» з полями:

· марка (public);

· об’єм двигуна (private);

· колір (protected);

· кількість місць;

· тип (седан, хетчбек, кабріолет);

· максимальна швидкість;

· ціна;

· рік випуску.

Створити масив об’єктів, та за допомогою методів класу передбачити наступні можливості:

· пошук всіх автомобілів певного типу;

· пошук „найстаршого” автомобіля;

· пошук авто певного цінового діапазону.

Перевантажений метод: рік випуску — числовий або текстовий параметр — встановлює рік випуску, якщо передано один параметр якогось із двох типів; повертає текстове значення року випуску автомобіля, якщо не передано ні одного параметра.

3.6. Контрольні запитання

1. Що таке механізм перевантаження?

2. Назвіть причини необхідності перевантаження конструкторів?

3. Як можна перевантажити метод класу?

4. Який за замовчуванням доступ до елементів структури?

5. Чи може бути конструктор класу бути порожнім, обґрунтуйте свою думку.

6. Що таке деструктор класу, коли він викликається?

7. Опишіть створення перевантажених методів та конструкторів класу.

8. Якщо змінити порядок слідування параметрів у методі, чи необхідно створювати відповідний перевантажений метод? Чому?

9. Чи може бути у класі перевантажений деструктор? Чому?

10. Які основні принципи ООП Ви знаєте? Що вони означають?

 
 

Лабораторна РОБОТА №4. Перевантаже
ння операторів для класу

МЕТА РОБОТИ: засвоїти механізм перевантаження операторів та здобути практичні навики при роботі з ними.

4.1. Програма роботи

4.1.1 Отримати завдання.

4.1.2. Написати програми відповідних класів, основну та відповідні допоміжні функції, згідно з вказівками до виконання роботи.

4.1.3. Підготувати власні коректні вхідні дані (вказати їх формат і значення) і проаналізувати їх.

4.1.4. Оформити електронний звіт про роботу та захистити її.

4.2. Вказівки до виконання роботи

4.2.1. Студент, згідно з індивідуальним номером, вибирає своє завдання з розд. 4.5 і записує його до індивідуального бланку.

4.2.2. Оголошення класу (структури), основну та відповідні допоміжні функції необхідно запрограмувати так, як це показано у розд. 4.4.

4.2.3. Власних вхідних даних необхідно підготувати не менше двох комплектів. Їхні значення мають бути коректними, знаходитися в розумних межах і відповідати тим умовам, які стосуються індивідуального завдання. Після проведення розрахунків отримані результати необхідно проаналізувати і занести до звіту.

4.2.4. Звіт має містити такі розділи:

● мету роботи та завдання з записаною умовою задачі;

● коди всіх використовуваних .h і .ccp файлів, а також пояснення до них;

● результати реалізації програми;

● діаграму класів та діаграму варіантів використання з поясненням;

● висновки, в яких наводиться призначення програми, обмеження на її застосування і можливі варіанти удосконалення, якщо такі є.

4.3. Теоретичні відомості

С++ дозволяє перевизначити дію більшості операцій таким чином, щоб при використанні з об’єктом конкретного класу вони виконували задані функції. Це дає можливість використовувати власні типи даних аналогічно до стандартних. Визначення власних операцій вводити неможливо.

Перевантаження операцій здійснюється за допомогою методів спеціального виду (функцій-операцій) і підлягає наступним правилам:

● при перевантаженні операцій зберігаються кількість аргументів, пріоритети операцій і правила асоціації (справа наліво і зліва направо), що використовуються в стандартних типах;

● для стандартних типів даних перевизначити операції неможливо;

● функції-операції не можуть мати аргументів по замовчуванню;

● функції-операції не наслідуються (за виключенням =);

● функції-операції не можуть визначатися як static.

Функцію-операцію можна визначити трьома способами:

● вона може бути методом класу;

● вона може бути дружньою функцією;

● вона може бути звичайною функцією.

У двох останніх випадках функція повинна приймати хоча б один аргумент, який має тип класу, вказівник або посилання на клас.

Функція-операція містить ключове слово operator, за яким слідє знак перевизначеної операції:

тип operator операція (список параметрів) { тіло функції }

Перевантаження унарних операцій:

Унарні операції – це такі, які мають тільки один операнд (операнд – це змінна, на яку діє операція). Прикладом унарних операцій є операціїї інкремента та декремента «++» та «--» а також унарний мінус, наприклад -35.

Для демонстрації перевантаження унарного оператора створима клас Counter, який міститиме два поля: hours ті minutes, що визначатимуть деякий час доби. У класі створено 2 конструктори: без параметрів (поточний час встановлюється рівним 0год 00хв) та параметризований, з можливістю задати певний час. Унарні оператори інкременту та декременту моделюватимуть перевід годинника на літній чи зимовий час.

 


Поможем в написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой





Дата добавления: 2014-11-10; просмотров: 776. Нарушение авторских прав; Мы поможем в написании вашей работы!

Studopedia.info - Студопедия - 2014-2022 год . (0.085 сек.) русская версия | украинская версия
Поможем в написании
> Курсовые, контрольные, дипломные и другие работы со скидкой до 25%
3 569 лучших специалисов, готовы оказать помощь 24/7