Язык С++ для системного программирования. Имена-этикетки. Класс как область действия, страница 9

оperator имя_нового_типа ( )

{

: : : :

}

Вызов: имя_нового_типа (имя_объекта_класса);

Операторы приведения подчиняются следующим правилам:

1.  Не имеют формальных аргументов; Считается по умолчанию, что это имя объекта данного класса.

2.  Нет явного описания типа возвращаемого результата. Считается, что тип результата тот, к которому приводит оператор приведения.

3.  Может описываться как virtual.

4.  Наследуется.

Пример.

#include <stdio.h>
 
class A
 
{
 
int k;
 
char * str;
 
public:
 
A (int a, char * s)
 
{
 
k = a
 
str = s;
 
}
 
operator int ()
 
{
 
return k;
 
}
 
};
 
void main ( )
 
{
 
A q (12, "Coretta");
 
printf("Целая часть для q = % i \ n ", int (q);
 
}

В описании класса А определена функция-элемент этого классаoperator int ( ). Она преобразует объект q класса А в переменную типа int. Этопроисходит в результате вызова операции приведения int (q). Подобным образом можно преобразовать объект класса А в переменную (объект) типа char.

19.1 Друзья

Язык С++ разрешает использовать в качествеаргументов объекты одного класса другому классу или функции, которая не является членом этого класса. Для этого используется ключевое слово friend.

19.1.1 Дружественные функции

Можно разрешить обычной функции или функции - элементу другого класса пользоваться объектами класса , который объявил эту функцию дружественнойс помощью описания friendпри определении класса. То есть при определении классаприводится прототипдружественной функции, перед которым стоит слово friend. Ниже приводится пример дружественной функции kuma( man &), у которой в качестве аргумента является ссылка на класс man. Класс man объявил функцию kuma( ) дружественной для себя.

 #include <stdio.h>
 
class man
 
{
 
 char name [2 0 ];
 
 char adres [25];
 
 public:
 
 friend void kuma (man& x);
 
 void get_info ( );
 
 void put_info ( );
 
};
 
 
void man :: get_info ( )
 
 {
 
puts(" Введите имя ");
 
fflush (stdin);
 
 scanf ("%s", &name);
 
 puts(" Введите адрес ");
 
fflush (stdin);
 
 scanf ("%s", &adres);
 
}
 
 void man :: put_info ( )
 
{
 
 printf (" Имя % s,адрес % s \n", name, adres);
 
}
 
 
 void main ( )
 
{
 
 man V;
 
 V.get_info ( );
 
 V.put_info ( );
 
 kuma (V);
 
}
 
 void kuma (man& x)
 
 {
 
printf(" Я кума у % s . Его адрес %s \n", х. name ,х. adres );
 
}

19.1.2 Дружественные классы

При определении класса можно объявить другой класс в качестве друга. Такое объявление выглядит так:

friendclass имя_дружественного_класса ;

При этом слово class можно не писать.

Благодаря этому объявлению функции-члены дружественного класса могут использовать в качестве аргумента объекты того класса, который объявил его другом.

В приведенном ниже примере в классе man объявлен в качестве дружественного класс kum.

Функция-элемент kum() класса kum использует объект класса man .

 #include <stdio.h>
 
 class man
 
{
 
 char name [ 10 ];
 
 public:
 
 friend class kum; // class можно не писать
 
 void get_info _ man (char* nm)
 
{
 
printf(" Введите имя для % s\ n ",nm );
 
fflush (stdin);
 
 scanf ("%s", &name);
 
}
 
 };
 
 class kum
 
{
 
 char name_children [15];
 
 public:
 
 void get_kum_info ( );
 
{
 
puts(" Введите имя ребенка") ;
 
fflush (stdin);
 
scanf ("%s", &name_children);
 
}
 
 void kuma (man& x)
 
{
 
printf(" У меня есть кум % s\ n ",х. name );