русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Дружність і функціональний запис


Дата додавання: 2014-04-22; переглядів: 899.


Інколи дружня функція дозволяє використовувати зрозуміліший синтаксис виклику функції, ніж звичайний метод. Наприклад, нехай нам потрібна функція, що підносить до квадрату екземпляр об’єкту типу Distance, що повертає значення в квадратних футах як тип float. Програма 13.11 показує, як це можна зробити за допомогою звичайного методу.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

class Distance

{int feet;

float inches;

public:

Distance():feet(0),inches(0.0)

{}

Distance(float fltfeet)

{feet=(int)fltfeet;

inches=12*(fltfeet-feet);

}

Distance(int ft,float in)

{feet=ft;inches=in;}

void showdist()

{cout<<feet<<”\’-“<<inches<<’\’’;}

float square();

};

//////////////

float Distance::square()

{float fltfeet=feet+inches/12;

float feetsqrd=fltfeet*fltfeet;

return feetsqrd;

}

//////////////

int main()

{clrscr();

Distance dist(3,6.0);

float sqft;

sqft=dist.square();

cout<<”\nDistance=”;dist.showdist();

cout<<”\nDistance^2=”<<sqft<<” кв футів\n”;

bioskey(0);

return 0;

}

Програма 13.11

В головній функції програма створює значення Distance, підносить до квадрату і виводить результат на екран. При цьому ми використовуємо вираз

sqft=dist.square();

Цей запис є цілком коректний, але значно зрозумілішим був би функціональний запис:

sqft=square(dist);

Такого ефекту можна досягти, зробивши square() дружньою функцією для класу Distance. Це показано в програмі 13.12

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

class Distance

{int feet;

float inches;

public:

Distance():feet(0),inches(0.0)

{}

Distance(float fltfeet)

{feet=(int)fltfeet;

inches=12*(fltfeet-feet);

}

Distance(int ft,float in)

{feet=ft;inches=in;}

void showdist()

{cout<<feet<<”\’-“<<inches<<’\’’;}

friend float square(Distance);

};

//////////////

Float square(Distance d)

{float fltfeet=d.feet+d.inches/12;

float feetsqrd=fltfeet*fltfeet;

return feetsqrd;

}

//////////////

int main()

{clrscr();

Distance dist(3,6.0);

float sqft;

sqft=square(dist);

cout<<”\nDistance=”;dist.showdist();

cout<<”\nDistance^2=”<<sqft<<” кв футів\n”;

bioskey(0);

return 0;

}

Програма 13.12

Функція square() в попередній програмі не потребувала аргументів, будучи звичайним методом, натомість в програмі 13.12 їй вже потрібні аргументи. Загалом кажучи, дружня функція потребує на один аргумент більше, ніж метод.

 


<== попередня лекція | наступна лекція ==>
Приклад використання дружніх функцій | Дружні класи


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн