printf (" Имя ребенка % s \n", name_children);
}
};
void main ( )
{
man a;
a.get_info_man ("a");
kum b;
b.get_kum_info ( );
b.kuma (a);
}
Следует обратить внимание, что функция-член kuma( ) должна быть описана после спецификатора public, так как иначе b . kuma( a ) выполнить невозможно.
Дружественность не наследуется. Если А объявляет В другом, то классы, производные от А, не будут автоматически признавать дружественность В.
Перегруженные операции
Для типов float ,double ,int ,long определены операции +, -, *, /, %, +=, -= и др. Но для типов, которые получены с помощью классов, эти операции надо реализовать самостоятельно. С этой целью можно было бы применить
функции-члены, например: plus ( ) для сложения, plusequal ( ) для += и т.д. Но это неудобно. Значительно лучше применить общеупотребительные знаки +, += и прочие.А для этого надо перегрузить упомянутые или другие операции для объектов описанного класса.
Перегрузить можно любую операцию, кроме следующих:.,.*,::, ?:.
Это можно сделать двумя способами:
1. С помощью перегруженных операторов - функций, которые являются членами класса;
2. С помощью перегруженных функций, которые являются friend (дружественными функциями) для данного класса.
Рассмотрим первый способ. В этом случае синтаксис для перегруженной операции имеет вид:
имя _класса&operator операция (имя _класса& параметр)
Рассмотрим пример для перегруженной операции += для комплексных чисел.
#include <stdio.h>
class comp
{
float Re, Im;
public:
comp (float a, float b)
{
Re=a;
Im=b;
}
comp& operator += (comp& x)
{
Re+=x.Re;
Im+=x.Im;
return *this;
}
void put_info (char *Str)
{
printf ("%s.Re=%f%s.Im=%f\n", Str, Re, Str, Im);
}
};
void main ( )
{
comp C1 ( 2, -2), C2 (-2, 2);
C1+=C2;
C1.put_info ("C1");
}
В результате перегруженной операции += значение С1 изменится. Ее адрес при вызове операции += был передан в this. Второй параметр был передан в качестве фактического параметра вместо формального х. Результат возвращается через * this. Если нужно сложить два комплексных числа и при этом оставить их значения без изменений, можно использовать второй способ перегрузки операции с помощью дружественной функции. Для этого примера прототип такой функции следующий:
friendcompoperator+( comp &C 1, comp &C 2);
Необходимо еще раз обратить внимание на то, что эта функция не являеться членом класса. Программа для этого случая следующая:
#include <stdio.h>
classcomp
{
float Re, Im;
public:
comp (float a, float b)
{
Re=a;
Im=b;
}
comp ( )
{
}
friend comp operator + (comp &C1, comp&C2);
void put_info (char *Str)
{
printf ("%s.Re=%f%s.Im=%f\n", Str, Re, Str, Im);
}
};
void main ()
{
comp C1 ( 2, -2), C2 (-2, 2);
comp C3;
C3=C1+C2;
C3.put_info ("C3");
}
comp operator +(comp &C1, comp&C2);
{
comp V;
V.Re=C1.Re + C2.Re;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.