
- •Задание к программе 1.1
- •Задание к программе 1.2
- •*Задание к программе 1.3
- •*Задание к программе 1.4
- •2. Контрольные вопросы к лабораторной работе №1
- •Объектно-ориентированное программирование Лабораторная работа №2 Дружественные функции, перегрузка операций
- •1. Задание к лабораторной работе
- •Задание к программе 2.2
- •Задание к программе 2.3
- •*Задание к программе 2.4
- •2. Контрольные вопросы к лабораторной работе №2
- •Объектно-ориентированное программирование Лабораторная работа №3 Наследование
- •1. Задание к лабораторной работе
- •Задание к программе 3.1
- •2. Контрольные вопросы к лабораторной работе №3
Объектно-ориентированное программирование Лабораторная работа №2 Дружественные функции, перегрузка операций
Цель работы – изучить дружественные функции, не являющиеся членами класса, и дружественные функции – члены класса. Изучить функции-операторы, с помощью которых реализуется перегрузка операций.
1. Задание к лабораторной работе
Программа 2.1. Программа демонстрирует использование дружественной функции, которая не является членом-функцией классов, но имеет доступ к членам классов, для которых она объявлена дружественной. Для доступа к членам класса в дружественную функцию передаются объекты классов (в данном примере по значению).
#include <iostream.h>
#define pi 3.14159
class Rectangle; //Предварительное объявление класса
class Circle{
float S;
float R;
void area() {S=pi*R*R;}
friend float sumS(Rectangle,Circle);//Объявление "дружественности"
public:
Circle(float r) {R=r;}
};
class Rectangle{
float a,b;
float S;
void area() {S=a*b;}
friend float sumS(Rectangle,Circle); //Объявление "дружественности"
public:
Rectangle(float length,float width) {a=length;b=width;}
};
float sumS(Rectangle ro, Circle co) //Определение дружественной
{ //функции
ro.area();
co.area();
return ro.S+co.S;
}
int main()
{
Circle c(1.0);
Rectangle r(2.0,3.0);
cout<<"Суммарная площадь фигур: "<<sumS(r,c)<<endl;
return 0;
}
Задание к программе 2.1
Упражнения:
Попробуйте разработать аналогичную дружественную функцию, в которую не передаются в качестве аргументов объекты классов. Объясните суть возникающей при этом ошибки;
*Разработайте перегруженную дружественную функцию, в которую передаются указатели на объекты класса.
Задания:
Первый вариант: Добавить в программу класс Triangle (Треугольник) и разработать дружественную функцию, которая выводит на печать наименование фигуры (Rectangle, Circle или Triangle), площадь которой больше.
Второй вариант: Добавить в программу класс Triangle (Треугольник) и разработать дружественную функцию, которая выводит на печать наименование фигуры (Rectangle, Circle или Triangle), периметр (длина окружности) которой больше.
Программа 2.2. Программа, в которой созданы два класса OUT_AMP (Выходной усилитель) и PRE_AMP (Предварительный усилитель). Усилители имеют параметры: I – ток потребления и K ‑ коэффициент усиления. Функция float isum(PRE_AMP *) const является членом класса OUT_AMP и одновременно объявлена дружественной для класса PRE_AMP. Модификатор const указывает, что эта функция не может менять значения членов класса. Функция вычисляет суммарный ток потребления усилительного устройства, состоящего из нескольких предварительных усилителей и одного выходного усилителя.
#include <iostream.h>
#define n 3
class PRE_AMP;
class OUT_AMP{
float K;
float I;
public:
float isum(PRE_AMP *) const;
OUT_AMP(float a,float b)
{K=a; I=b;}
};
class PRE_AMP{
float K;
float I;
static int count;
friend float OUT_AMP::isum(PRE_AMP *) const;
public:
void setKI(float,float);
PRE_AMP();
};
int PRE_AMP::count=0;
PRE_AMP::PRE_AMP()
{++count;}
void PRE_AMP::setKI(float a,float b)
{K=a; I=b;}
float OUT_AMP::isum(PRE_AMP *obj) const
{
float sum=0.0;
for(int i=0;i<PRE_AMP::count;i++)
sum+=obj[i].I;
return sum+I;
}
int main()
{
OUT_AMP oa(3,10);
PRE_AMP pa[n];
float a,b;
for(int i=0;i<n;i++)
{
cout<<"Введите Ку и Iп "<<i+1<<"-го предусилителя"<<endl;
cin>>a>>b;
pa[i].setKI(a,b);
}
cout<<"Суммарный ток потребления: "<<oa.isum(pa)<<endl;
return 0;
}