class matriza
{ float *b, max; int n,m; public: matriza(); void ww_matriza(); void f_max(); void ww_max(); //Прототип дружественной функции friend void max_m_m(massiv, matriza); ~matriza () { ... } }; //Объявление конструктора matriza::matriza () { ... } //Объявление функции печати матрицы void matriza::ww_matriza() { .... } //Объявление функции обработки void matriza::f_max() { max=*b; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(*(b+i*m+i)) max=*(b+i*m+i); } void matriza::ww_max() { cout<<"\nmax massiva= "<<max; } //Объявление дружественной функции void max_m_m(massiv ob1, matriza ob2) { float max_rez; if (ob1.max > ob2.max) max_rez= ob1.max; else max_rez= ob2.max; printf("\n rez=%8.2f", max_rez); } //Основная функции void main() { massiv y; y.ww_massiv(); y.f_max(); y.ww_max(); getch(); matriza x; x.ww_matriza(); x.f_max(); x.ww_max(); getch(); max_m_m(y, x); }
Пример использования функции члена одного класса, дружественной другому классу. //Неполное описание второго класса class matriza; //Описание структуры первого класса class massiv { float *a,max; int n; public: massiv(); void ww_massiv(); void f_max(); void ww_max(); void max_m_m(matriza); ~ massiv (){ delete[]a; puts("\n rabotal destruktor massiva");} }; //Объявление конструктора massiv:: massiv () { .... } //Объявление фукции печати void massiv::ww_massiv() { .... } //Объявление функции обработки void massiv::f_max() { max=*a; for(int i=0;i<n;i++) if(*(a+i)>max) max= *(a+i); } //Объявление функции печати результата void massiv::ww_max() { cout<<"\nmax massiva= "<<max; } //Описание структуры второго класса class matriza { float *b,max; int n,m; public: matriza(); void ww_matriza(); void f_max(); void ww_max(); //Прототип дружественной функции friend void massiv::max_m_m(matriza); ~matriza () { ... }; //Объявление конструктора void matriza::matriza () { ... } //Объявление функции печати void matriza::ww_matriza() { .... } //Объявление функции обработки void matriza::f_max() { max=*b; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(*(b+i*m+i)) max=*(b+i*m+i); } //Объявление функции печати результата void matriza::ww_max() { cout<<"\nmax massiva= "<<max;
} //Объявление дружественной функции void massiv::max_m_m(matriza ob2) { float max_rez; if (max > ob2.max) max_rez= max; else max_rez= ob2.max; printf("\n rez=%8.2f", max_rez); } //------------------------------------------- void main() { int k; massiv y; y.ww_massiv(); y.f_max(); y.ww_max(); matriza x; x.ww_matriza(); x.f_max(); x.ww_max(); getch(); y.max_m_m(x); } Таблица 4.1 Варианты индивидуальных заданий
4.3 Контрольные вопросы и практические задания: 1. Как объявить функцию дружественной классу? 2. являются ли дружественные функции членами класса? 3. имеют ли дружественные функции доступ к закрытым членам класса? 4. Где выполняется описание дружественной функции? 5. Что должна иметь в качестве передаваемого параметра дружественная функция? 6. Может ли быть функция дружественной сразу нескольким классам, как она при этом объявляется, какие имеет аргументы.? 7. Может ли метод класса быть дружественной функцией другому классу, как она при этом объявляется, какие имеет аргументы.?
|