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