Drobi() // конструктор по умолчанию
Лабораторная работа 3
Цель лабораторной работы:
Изучить функции доступа (функции, позволяющие получить или изменить значение элемента класса). Написать программу, моделирующую работу с дробями, представленными в виде пары чисел, хранящихся в созданном классе. Данный класс должен содержать функции- «методы», позволяющие складывать, вычитать, перемножать и делить дроби, дробь и число (то есть возможны два случая: 1ый- дробь-оператор-дробь и 2-ой дробь-оператор-число), а так же функции, описывающие работу операторов сравнения - «перегрузку»: ==(равенство), != (неравенство), < (меньше), <=( меньше либо равно), >(больше), >= (больше либо равно).
План:
1. Инкапсуляция. Функции доступа. Сеттеры и геттеры.
2. Перегрузка операторов.
3. Приложение.
4. Программа
Инкапсуляция. Функции доступа. Сеттеры и геттеры.
В объектно-ориентированном программировании инкапсуляция (или скрытие информации) — это процесс скрытого хранения деталей реализации объекта. Пользователи обращаются к объекту через открытый интерфейс. В C++ инкапсуляция реализована с помощью функций доступа.
Функция доступа (функция access) — это короткая открытая функция, задачей которой является получение или изменение значения закрытой переменной-члена класса.
Функции доступа обычно бывают двух вариантов: геттеры и сеттеры.
Геттер (getter) — это функция, которая возвращает значение закрытой переменной-члена класса.
|
|
Int getdenom () const { return denom ; } – возвращение значения «закрытой» переменной denom .
Сеттер (setter) — это функция, которая позволяет установить значение закрытой переменной-члена класса.
Void setnom ( int n ) { nom = n ; } – «закрытой» переменной nom присваивается значение переменной n .
Перегрузка операторов.
С++ поддерживает перегрузку операторов (operator overloading). За небольшими исключениями большинство операторов С++ могут быть перегружены, в результате чего они получат специальное значение по отношению к определенным классам. Например, класс, определяющий связанный список, может использовать оператор + для того, чтобы добавлять объект к списку. Другой класс может использовать оператор + совершенно иным способом. Когда оператор перегружен, ни одно из его исходных значений не теряет смысла. Просто для определенного класса объектов определен новый оператор. Поэтому перегрузка оператора + для того, чтобы обрабатывать связанный список, не изменяет его действия по отношению к целым числам.
Для того, чтобы перегрузить оператор, необходимо определить, что именно означает оператор по отношению к тому классу, к которому он применяется. Для этого определяется функция-оператор, задающая действие оператора. Общая форма записи функции-оператора для случая, когда она является членом класса, имеет вид:
тип имя_класса::operator#(список_аргументов)
{
// действия, определенные применительно к классу
}
|
|
+Здесь перегруженный оператор подставляется вместо символа #, а тип задает тип значений, возвращаемых оператором. Для того, чтобы упростить использование перегруженного оператора в
сложных выражениях, в качестве возвращаемого значения часто выбирают тот же самый тип, что и класс, для которого перегружается оператор.
пояснить
Пример:
Drobi Drobi :: operator / ( const Drobi & f ) const //перегрузка оператора /
{
return Drobi (nom * f .denom, denom * f .nom);
}
Приложение.
Для написания программы потребуется вспомнить часть формул школьной программы.
1а. Сложение двух дробей:
где – числители двух дробей, – знаменатели двух дробей.
2б. Вычитание двух дробей:
где – числители двух дробей, – знаменатели двух дробей.
3ю. Перемножение дробей:
где – числители двух дробей, – знаменатели двух дробей.
4f. Деление дробей:
где – числители двух дробей, – знаменатели двух дробей.
Программа.
В файле Drobi.h:
#pragma once
#include <iostream> // для использования функций из std
|
|
Class Drobi
{
Private : // закрытые поля
Int nom; // числитель
Int denom; // знаменатель
Public : // открытые поля
Drobi() // конструктор по умолчанию
{
nom = 0;
denom = 1;
}
Дата добавления: 2020-04-25; просмотров: 197; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!