Пример выполнения задания.




Лабораторное занятие №30

Тема: Перегрузка методов.

 

 

Лабораторное занятие рассчитано на 2 часа, относится к темам:

Тема 8.1 Основные принципы объектно-ориентированного программирования (ООП),

Тема 8.2. Классы

 

Формируемые компетенции: ОК1-9, ПК 1.1- 1.5 ПК 3.1

 

Цель: закрепить знания по перегрузке методов.

 

Методическое и техническое обеспечение:

компьютер с ОС Windows, программное обеспечение Borland C, Borland C++.

 

Теоретические сведения.

Класс представляет собой главное инструментальное средство C++ для объектно-ориентированного программирования. Как вы узнаете из данного урока, класс очень похож на структуру, в которой сгруппированы элементы, соответствующие данным о некотором объекте, и оперирующие этими данными функции (называемые методами). Вы узнаете, что объект представляет собой некоторую сущность, например телефон. Класс C++ позволяет вашим программам определять все атрибуты объекта. В случае, когда объектом является телефон, класс может содержать такие элементы данных, как номер и тип телефона (кнопочный или дисковый) и функции, работающие с телефоном, например dial, answer, и hang_up. Группируя данные об объекте и кодируя их в одной переменной, вы упрощаете процесс программирования и увеличиваете возможность повторного использования своего кода. Этот урок знакомит вас с классами C++. К концу урока вы освоите следующие основные концепции:

• Для определения класса программа должна указать имя класса, элементы данных класса и функции класса (методы).

• Определение класса обеспечивает шаблон, с помощью которого ваши программы могут создать объекты типа этого класса, подобно тому, как программы создают переменные типа int, char и т. д.

• Программа присваивает значения элементам данных класса, используя оператор точку.

• Программа вызывает функцию-элемент класса, используя оператор точку.

ПРЕДСТАВЛЕНИЕ ОБ ОБЪЕКТАХ И ОБЪЕКТНО-ОРИЕНТИРОВАННОМ ПРОГРАММИРОВАНИИ

В известном смысле объект представляет собой сущность. Программа обычно использует переменные для хранения информации о различных реально существующих сущностях, например служащих, книгах и даже файлах. При объектно-ориентированном программировании вы фокусируетесь на предметах, образующих систему, и операциях, которые вы должны выполнять над этими предметами. Например, для объекта-файла вы могли бы иметь операции, которые печатают, отображают или изменяют файл. В C++ вы используете класс для определения своих объектов. Ваша цель состоит в том чтобы включить в класс столько информации об объекте, сколько требуется. Исходя из этого, можно подобрать класс, созданный вами для одной программы, и использовать его в нескольких разных программах.

Класс позволяет вашим программам группировать данные и функции которые выполняют операции над этими данными. Большинство книг и статей об объектно-ориентированном программировании называют функции класса методами. Подобно структуре, класс C++ должен иметь уникальное имя, за которым следует открывающая фигурная скобка, один или несколько элементов и закрывающая фигурная скобка:

classclass_name

{

intdata_member; // Элементданных

voidshow_member(int); // Функция-элемент

};

После определения класса вы можете объявлять переменные типа этого класса (называемые объектами), как показано ниже:

class_nameobject_one, object_two, object_three;

Следующее определение создает класс employee, который содержит определения данных и метода:

class employee

{

public:

char name[64];

longemployee_id;

float salary;

voidshow_employee(void)

{

cout<< "Имя: " << name <<endl;

cout<< "Номерслужащего: " <<employee_id<<endl;

cout<< "Оклад: " <<salary<<endl;

};

};

В данном случае класс содержит три переменные и одну функцию-элемент. Обратите внимание на использование метки public внутри определения класса. Как вы узнаете из урока 22, элементы класса могут быть частными (private) или общими {public), от чего зависит, как ваши программы обращаются к элементам класса. В данном случае все элементы являются общими, это означает, что программа может обращаться к любому элементу, используя оператор точку. После определения класса внутри вашей программы вы можете объявить объекты (переменные) типа этого класса, как показано ниже:

————————————————————— Имя класса

employeeworker, boss, secretary; //--------->Переменные класса (объекты)

Следующая программа EMPCLASS.CPP создает два объекта employee. Используя оператор точку, программа присваивает значения элементам данных Затем программа использует элемент show_employee для вывода информации о служащем:

#include <iostream.h>

#include <string.h>

class employee

{

public:

char name [64];

longemployee_id;

float salary;

voidshow_employee(void)

{

cout<< "Имя: " << name <<endl;

cout<< "Номерслужащего: " <<employee_id<<endl;

cout<< "Оклад: " << salary <<endl;

};

};

void main(void)

{

employee worker, boss;

strcpy(worker.name, "John Doe");

worker.employee_id = 12345;

worker.salary = 25000;

strcpy(boss.name, "Happy Jamsa");

boss.employee_id = 101;

boss.salary = 101101.00;

worker.show_employee();

boss.show_employee();

}

Как видите, программа объявляет два объекта типа employee — workerиboss, а. затем использует оператор точку для присваивания значений элементам и вызова функции show_employee.

Представление об объектах

Большинство программ на C++ отражают реальные существующие объекты. В известном смысле объекты представляют собой сущности, например автомобиль, собаку, часы и т. д. Обычно объект имеет несколько атрибутов и операций, которые программа должна выполнять над этими атрибутами. Например, в случае часов свойства могут включать текущее время и время будильника. Операции такого объекта могли бы содержать установку времени, установку будильника или выключение будильника. При объектно-ориентированном программировании ваши программы фокусируются на объектах и операциях над этими объектами.

ОПРЕДЕЛЕНИЕ МЕТОДОВ КЛАССА ВНЕ КЛАССА

В предыдущем классе employee функция была определена внутри самого класса (встроенная (inline) функция). При увеличении функций определение встроенных функций внутри класса может внести беспорядок в описание класса. В качестве альтернативы вы можете поместить прототип функции внутри класса, а затем определить функцию вне класса. Ваше определение класса с прототипом становится следующим:

classemployee

{

public:

char name[64];

longemployee_id;

float salary;

voidshow_employee(void); |————————>Прототипфункции

};

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

voidemployee:: show_employee (void) //-------------->Имя класса

{

сout<< "Имя: " <<name<<endl; Имя элемента cout<< "Номер служащего: " <<employee_id<<endl;

cout<< "Оклад: " <<salary<<endl;

};

Как видите, приведенный код предваряется определением функции с именем класса (employee) и оператором глобального разрешения (::). Следующая программа CLASSFUN.CPP помещает определение функцииshow_employee вне класса, используя оператор глобального разрешения для указания имени класса:

#include <iostream.h>

#include <string.h>

class employee

{

public:

char name [64];

longemployee_id;

float salary;

voidshow_employee(void);

};

void employee::show_employee(void)

{

cout<< "Имя: " << name <<endl;

cout<< "Номерслужащего: " <<employee_id<<endl;

cout<< "Оклад: " << salary <<endl;

};

void main(void)

{

employee worker, boss;

strcpy(worker.name, "John Doe");

worker.employee_id = 12345;

worker.salary = 25000;

strcpy(boss.name, "Happy Jamsa");

boss.employee_id = 101;

boss.salary = 101101.00;

worker.show_employee();

boss.show_employee();

}

Методы класса

Классы C++ позволяют вашим программам группировать данные объекта и функции объекта (методы), которые оперируют с этими данными, в одной переменной. У вас есть две возможности определения методов объекта. Первая состоит в том, что вы можете включить весь код функции внутрь определения класса. Несмотря на то что включение кода метода в определение класса может представляться удобным, однако, когда классы становятся сложнее и включают несколько методов, операторы функций могут вносить беспорядок в определение классов. Таким образом, многие программы определяют операторы функции вне класса. В определение класса программа должна включать прототип функции, который указывает имя функции, тип возвращаемого значения и типы параметров.

Для определения функции вне определения класса ваша программа должна предварять определение функции именем класса и оператором глобального разрешения, как показано ниже:

return_typeclass_name::function_name(parameters)

{ // Операторы }

ВТОРОЙ ПРИМЕР

Следующая программа PEDIGREE.CPP создает класс dog, который содержит несколько полей данных и функцию show_breed. Программа определяет функцию класса вне определения самого класса. Затем программа создает два объекта типа dog и выводит информацию о каждой собаке:

#include <iostream.h>

#include <string.h>

class dogs

{

public:

char breed[64];

intaverage_weight;

intaverage_height;

voidshow_dog(void);

};

void dogs::show_breed(void)

{

cout<< "Порода: " << breed <<endl;

cout<< "Среднийвес: " <<average_weight<<endl;

cout<< "Средняявысота: " <<average_height<<endl;

}

void main(void)

{

dogs happy, matt;

strcpy(happy.breed, "Долматин");

happy.average_weight = 58;

happy.average_height = 24;

strcpy(matt.breed, "Колли");

matt.average_weight =22;

matt.average_height = 15;

happy.show_breed();

matt.show_breed();

}

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Программы на C++ широко используют классы. Говоря кратко, классы позволяют вашим программам группировать для определенного объекта его данные и методы (функции), которые оперируют этими данными, в одной переменной. Как видите, классы очень похожи на структуры, которые вы рассматривали в уроке 18. Классы C++ являются основой объектно-ориентированного программирования. Следующие уроки расширяют возможности предоставляемые классами. Упоминавшаяся в этом уроке метка public, по являющаяся в определении класса, делает элементы класса доступными для всей программы. Из урока 22 вы больше узнаете о частных и общих элементах класса. До изучения урока 22 убедитесь, что освоили следующие основные концепции:

1. В известном смысле объект представляет собой сущность, с которой ваши программы выполняют разные операции.

2. Программы на C++ представляют объекты посредством классов.

3. Класс, подобно структуре, содержит элементы. Элементы класса могут хранить информацию (данные) или быть функциями (методами), которые оперируют этими данными.

4. Каждый класс имеет уникальное имя.

5. После определения класса вы можете объявлять объекты этого класса, используя имя класса в качестве типа.

6. Для обращения к элементам класса (как к данным, так и к функциям) ваши программы используют оператор точку.

7. Программы могут определять функцию класса внутри или вне определения класса. Если вы определяете функцию вне определения класса, вам следует указать имя класса и использовать оператор глобального разрешения, напримерclass:: function.

Пример выполнения задания.

Составить описание класса выполнение операций над натуральными числами в шестнадцатеричной системе счисления: сложение, вычитание, умножение, деление, перевод из десятичной системы счисления в двоичную, перевод из двоичной системы счисления в десятичную.

#include <iostream>

#include <stdlib.h>

#include <time.h>

#include <math.h>

#include <conio.h>

#include <stdio.h>

using namespace std;

 

class Sis16

{

int a[100], b[100], k1, k2, k, i, j, s, x;

float c[100];

public:

void Vvod();

void Summ();

void Delen();

void Vichitanie();

void Umnozh();

void Iz10v2();

void Iz2v10();

};

void Sis16::Vvod()

{

cin >> x;

if ((x == 1) || (x == 2) || (x == 3) || (x == 4))

{

cout << "Введите 2 числа" << endl;

cout << "Сколько цифр в 1 числе? "; cin >> k1;

cout << "1 число - ";

for (i = 1; i <= k1; i++) cin >> a[i];

cout << "Сколько цифр во 2 числе? "; cin >> k2;

cout << "2 число - ";

for (i = 1; i <= k2; i++) cin >> b[i];

}

if ((x == 5) || (x == 6))

{

cout << "Введите число" << endl;

cout << "Сколько цифр в числе? "; cin >> k;

cout << "Число - ";

for (i = 1; i <= k; i++) cin >> a[i];

}

}

void Sis16::Summ()

{

for (i = 1; i <= k1; i++)

c[i] = a[i] + b[i];

for (i = 1; i <= k1; i++)

cout << c[i]<<" ";

}

 

void Sis16::Vichitanie()

{

for (i = 1; i <= k1; i++)

c[i] = a[i] - b[i];

for (i = 1; i <= k1; i++)

cout << c[i]<<" ";

}

void Sis16::Umnozh()

{

for (i = 1; i <= k1; i++)

c[i] = a[i] * b[i];

for (i = 1; i <= k1; i++)

cout << c[i]<<" ";

}

void Sis16::Delen()

{

for (i = 1; i <= k1; i++)

c[i] = a[i] / b[i];

for (i = 1; i <= k1; i++)

cout << c[i]<<" ";

}

 

void Sis16::Iz10v2()

{

s = k;

c[1] = a[i] % 2;

for (i = 1; i <= k; i++)

c[i] = a[i] % 2;

for (i = 1; i <= k; i++)

cout << c[i]<<endl;

}

 

void Sis16::Iz2v10()

{

s = k;

c[1] = a[i] * pow(2, s);

for (i = 1; i <= k; i++)

c[i] = a[i] * pow(2, s--);

for (i = k; i >= 1; i--)

cout << c[i]<<endl;

}

 

int main()

{

setlocale(LC_ALL, "RUS");

int x;

Sis16 Y;

cout << "Выберите действие:" << endl;

cout << "1) Сложение." << endl;

cout << "2) Вычитание." << endl;

cout << "3) Умножение." << endl;

cout << "4) Деление." << endl;

cout << "5) Перевод из 10 в 2." << endl;

cout << "6) Перевод из 2 в 10." << endl;

cin >> x;

Y.Vvod();

if (x == 1) Y.Summ();

if (x == 2) Y.Vichitanie();

if (x == 3) Y.Umnozh();

if (x == 4) Y.Delen();

if (x == 5) Y.Iz10v2();

if (x == 6) Y.Iz2v10();

return (0);

}

 


 

Порядок выполнения практического задания:

― изучить теоретические сведения;

― изучить индивидуальное задание;

― разработать алгоритм его решения (разработать математическую модель, реализовать в виде блок-схемы);

― написать программу;

― оттестировать программу на различных комбинациях входных значений;

― продемонстрировать работу преподавателю;

― оформить отчет.

Содержание отчета:

1. Задание.

2. Блок-схема.

3. Листинг программы.

4. Тестовый пример.

Контрольные вопросы:

1. Класс. Синтаксис описания класса.

2. Функции-члены и переменные класса.

3. Объект класса

4. Экземпляр класса

5. Работа с функциями-членами класса

6. Методы класса

 

Список литературы:

Основная литература

1. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. Учебник. М.: АСАДЕМА, 2016

2. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования. Практикум. М.: АСАДЕМА, 2016

Дополнительная литература

1. Голицына О.Л., Попов И.И. Программирование на языках высокого уровня Учебное пособие М.: ФОРУМ, 2008

2. Голицына О.Л, Партыка Т.Л., Попов И.И. Программное обеспечение Учебное пособие М.: ФОРУМ, 2008

3. Колдаев В.Д Основы алгоритмизации программирования Учебное пособие М.: ФОРУМ-ИНФРА-М,2009

Индивидуальные задания

Задание. Составит программы с использованием классов.

Вариант №1.

Построить систему классов для описания плоских геометрических фигур: квадрата, прямоугольника. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и поворота на заданный угол.

 

Вариант №2.

Построить систему классов для описания плоских геометрических фигур: круга, эллипса. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и поворота на заданный угол.

 

 

Вариант №3.

Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел.

 

Вариант №4.

Составить описание класса для объектов-векторов, задаваемых координатами концов в трёхмерном пространстве. Обеспечить операции сложения и вычитания векторов с получением нового вектора (суммы или разности), вычисления скалярного произведения двух векторов, длины вектора, косинуса угла между ними.

 

Вариант №5.

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

 

Вариант №6.

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

 

Вариант №7.

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

 

Вариант №8.

Составить описание класса выполнение операций над натуральными числами в двоичной системе счисления: сложение, вычитание, умножение, деление, перевод из десятичной системы счисления в двоичную, перевод из двоичной системы счисления в десятичную.

 

Вариант №9.

Составить описание класса одномерных массивов строк, каждая строка которая задаётся длиной и указателем на выделенную для неё память. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов сообразованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.

 

Вариант №10.

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

 

Вариант №11.

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

 

 

Вариант №12.

Составить описание класса выполнение операций над натуральными числами в двоичной системе счисления: сложение, вычитание, умножение, деление, перевод из десятичной системы счисления в двоичную, перевод из двоичной системы счисления в десятичную.

 

Вариант №13.

Составить описание класса выполнение операций над натуральными числами в шестнадцатеричной системе счисления: сложение, вычитание, умножение, деление, перевод из десятичной системы счисления в двоичную, перевод из двоичной системы счисления в десятичную.

 

Вариант №14.

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

 

Вариант №15.

Составить программу для игры в шашки. Шашки каждого нового цвета выступает в качестве отдельного объекта. Характеристики шашки – цвет и позиция на доске. Методы – перемещение. Не забудьте о таких объектах, как «дамки».

 

Вариант №16.

Составить программу для игры в шахматы. Каждая уникальная шахматная фигура выступает в качестве отдельного объекта. Она характеризуется цветом, положением на доске, способом перемещения. Предусмотреть возможность превращение пешки в ферзя.

 

Вариант №17.

Составить описание класса для работы с цепными списками строк (строки произвольной длины) с операциями включения в список, удаления из списка элемента с заданным значением данного, удаления всего списка или конца списка.



Поделиться:




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

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


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