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

Інколи дружня функція дозволяє використовувати зрозуміліший синтаксис виклику функції, ніж звичайний метод. Наприклад, нехай нам потрібна функція, що підносить до квадрату екземпляр об’єкту типу Distance, що повертає значення в квадратних футах як тип float. Програма 22.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;

}

Програма 22.11

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

sqft=dist.square();

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

sqft=square(dist);

Такого ефекту можна досягти, зробивши square() дружньою функцією для класу Distance. Це показано в програмі 22.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;

}

Програма 22.12

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

 








Дата добавления: 2015-08-26; просмотров: 689;


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

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.