Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты_все.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
121.92 Кб
Скачать

Билет 4. Билет 10. Билет 24

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

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

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

К друзьям и дружественности применимы следующие правила:

• на описания friend не влияют спецификаторы public,

protected или private;

• описания friend не взаимны: если А объявляет В другом, то это не означает, что А является другом для В;

• дружественность не наследуется: если А объявляет В другом, классы, производные от В, не будут автоматически получать доступ к элементам А;

• дружественность не является переходным свойством: если А объявляет В другом, классы, производные от А, не будут автоматически признавать дружественность В.

Обычное объявление функции-члена гарантирует три логически разные вещи:

• во-первых, функция имеет право доступа к закрытой части объявления класса;

• во-вторых, функция находится в области видимости класса;

• в-третьих, функция должна вызываться для объекта класса, то есть имеется указатель this,

Объявив функцию-член как static, мы придаем ей только первые два свойства. Объявив функцию как friend, мы наделяем ее только первым свойством.

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

Так же как и объявление члена, объявление friend не добавляет новое имя в охватывающую область видимости.

Описание класса A

class A

{

//...

void z();

};

Описание класса B

class B

{

//...

friend void A::z();

};

class book

{

public:

book(char *, char *, char *);

void show_book(void);

friend char *librarian::get_catalog(book);

friend void librarian: :change_catalog( book *, char *);

private:

char title[64];

char author[ 64 ];

char catalog[64];

};

Задание.frame

<HTML>

<HEAD>

<TITLE>4 билет</TITLE>

</HEAD>

<FRAMESET cols="20%,80%">

<FRAMESET rows="40%, 60%">

<FRAME>

<FRAME>

</FRAMESET>

<FRAMESET rows="40%, 60%">

<FRAME>

<FRAMESET cols="55%, 45%">

<FRAME>

<FRAME>

</FRAMESET>

</FRAMESET>

</FRAMESET>

</HTML>

Задание 10

<HTML>

<HEAD>

<TITLE>10 билет</TITLE>

</HEAD>

<BODY>

<TABLE width=30% BORDER="1" CELLSPACING="0" CELLPADDING="40%">

<TR>

<TD></TD>

<TD COLSPAN="2"></TD>

</TR>

<TR>

<TD></TD>

<TD></TD>

<TD></TD>

</TR>

</TABLE>

</BODY>

</HTML>

Задание: НТМL. Вставить в один документ 2 таблицы и сделать на них гиперссылки

<HTML>

<HEAD>

<TITLE>24 билет</TITLE>

</HEAD>

<BODY>

<a href = #table1>Ссылка на первую таблицу</a>

<br>

<a href = #table2>Ссылка на вторую таблицу</a>

<br>

<a name=table1><TABLE width=30% BORDER="1" CELLSPACING="0" CELLPADDING="100%"></a>

<TR>

<TD></TD>

<TD></TD>

</TR>

<TR>

<TD></TD>

<TD></TD>

</TR>

</TABLE>

<br>

<a name=table2><TABLE width=30% BORDER="1" CELLSPACING="0" CELLPADDING="100%"></a>

<TR>

<TD></TD>

<TD></TD>

<TD></TD>

</TR>

<TR>

<TD></TD>

<TD></TD>

<TD></TD>

</TR>

</TABLE>

</BODY>

</HTML>