Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП 03 Пример Дружественные функции.doc
Скачиваний:
12
Добавлен:
14.02.2015
Размер:
95.23 Кб
Скачать

5

Пример № 3 Дружественные функции

Пример № 3

  1. Дружественные функции

В приведённом примере решена следующая задача:

Заданы координаты двух вершин правильного треугольника. Определить координаты третьей вершины и его площадь.

Задача решается по следующему алгоритму:

Действия Функция

  • вводим координаты точек AиBс клавиатурыInput ( Dot& )

  • вычисляем вектор ABпо координатам его концовVector ( const Dot& , const Dot& )

  • поворачиваем вектор ABна 60º и определяем векторACRotate ( const Vec& , double , Vec& )

  • прибавляем вектор ACк точкеAи получаем точкуC EndVec ( const Dot& , const Vec& , Dot& )

  • выводим на экран координаты точки C Print ( const Dot& )

  • длины сторон вычисляем по теореме Пифагора Dist ( const Dot& , const Dot & )

  • вычисляем площадь треугольника по его вершинам Area (const Dot&, const Dot&, const Dot&)

Проверка правильности работы программы:

  • вычисляем длины всех сторон треугольника Dist ( const Dot& , const Dot& )

  • вычисляем значения всех углов треугольника Angle(const Dot&, const Dot&,const Dot&)

При вычислении угла используются функции:

  • вычисление скалярного произведение двух векторов Scalar ( const Vec& , const Vec& )

  • вычисление модуля вектора Modul ( const Vec& )

Для каждого действия объявляем соответствующую функцию-член в классах DotиVec.

Файл DotVec.H

////////////////////////////////////////////////// подключение библиотек ////////////////////////////////////////////////////

#include<iostream.h> // содержит функции ввода-вывода

#include<windows.h> // содержит функцию CharToOem

#include <math.h> // содержит математические функции

class Vec ; // предварительное объявление класса

///////////////////////////////////////////////// интерфейс класса точки /////////////////////////////////////////////////

class Dot // класс точки

{ // закрытые члены класса

double x , y ; // координаты точки

char name ; // имя точки

public: // открытые члены класса

// конструкторы класса

Dot ( char Name) : name ( Name ) , x ( 0 ) , y ( 0 ) { } // использует список инициализации

Dot ( char Name , double X , double Y ) { name = Name ; x = X ; y = Y ; }

// функции, дружественные классу Dot

friend void Print ( const Dot & D ) ; // выводит на экран имя и координаты заданной точки

friend void Input ( Dot & D ) ; // вводит значения координат заданной точки с клавиатуры

friend double Dist ( const Dot & A , const Dot & B ) ;

// возвращает расстояние между заданными точками

frienddoubleArea (constDot & A ,constDot & B ,constDot & C ) ;

// возвращает значение площади треугольника, образованного заданными точками

frienddoubleAngle (constDot & A ,constDot & B ,constDot & C ) ;

// возвращает значение угла с вершиной в точке B

// функции, дружественные классам Dot и Vec

friend void Vector(const Dot&N,const Dot&K,Vec&V);

// вычисляет вектор по координатам его концов

friend void EndVec(const Dot&N,const Vec&V,Dot&K);

// вычисляет координаты конца вектора

} ;

/////////////////////////////////////////// интерфейс класса вектора /////////////////////////////////////////////////

class Vec // класс вектора

{ // закрытые члены класса

double x , y ; // проекции вектора

char name [ 3 ] ; // имя вектора

public: // открытые члены класса

// конструкторы