Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Правила по отношению к друзьям




Void main ()

Class kum

Class man

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

V.put_info ();

V.get_info ();

Void main ()

Class man

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

Лекция 19

19.1 Друзья

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

 

 

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

# include <stdio.h>

{

char name [20];

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);

}

{

man V;

kuma (V);

}

void kuma (man& x)

{

printf (“Я кума у %s. Его адрес %s \n”, х.name, х.adres);

}

 

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

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

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

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

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

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

# include <stdio.h>

{

char name [10];

public:

friend class kum; // class можно не писать

void get_info_man (char* nm)

{

printf (“Введите имя для %s \n”, nm);

fflush (stdin);

scanf (“%s”, &name);

}

};

{

char name_children [15];

public:

void get_kum_info ();

{

puts (“Введите имя ребенка”);

fflush (stdin);

scanf (“%s”, &name_children);

}

void kuma (man& x)

{

printf (“У меня есть кум %s \n”, х.name);

printf (“Имя ребенка %s \n”, name_children);

}

};

{

man a;

a.get_info_man (“a”);

kum b;

b.get_kum_info ();

b.kuma (a);

}

 

Следует обратить внимание, что функция-член kuma () должна быть описана после спецификатора public, так как иначе b.kuma (a) выполнить невозможно.

 

1) На описание friend не действуют спецификаторы public, protected, private.

2) Описание friend не взаимное: если А объявляет В другом, то это не означает, что А является другом для В.

3) Дружественность не наследуется. Если А объявляет В другом, то классы, производные от А, не будут автоматически признавать дружественность В.




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


Дата добавления: 2015-06-27; Просмотров: 342; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.006 сек.