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

Билет 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 ];

charcatalog[64];

};

Задание.frame

<!DOCTYPE HTML>

<HTML>

<HEAD>

<TITLE>Документ с фреймами</TITLE>

</HEAD>

<FRAMESET rows="50%, 50%">

<FRAMESET cols="600, 70%">

<FRAME src="frame1.html">

<FRAME src="frame2.html">

</FRAMESET>

<FRAMESET cols="600, 40%, 30%">

<FRAME src=" frame3.html">

<FRAME src="frame4.html">

<FRAME src="frame5.html">

</FRAMESET>

</FRAMESET>

</HTML>

Задание10

<!DOCTYPE HTML>

<HTML>

<HEAD>

<TITLE>Табличка</TITLE>

</HEAD>

<TABLE BORDER>

<TR>

<TD>table 1</TD>

<td colspan=2>table 2</td>

</TR>

<TR>

<TD>table 3</TD>

<TD>table 4</TD>

<TD>table 5</TD>

</TR>

</TABLE>

</HTML>

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

<html>

<head >

<title>HTML</title>

</head>

<body >

<A NAME="таблица1"></A>

<table >

<tr>

<td >T1</td>

</tr>

<tr >

<td >T2</td>

<td >T3</td>

<td>T5</td>

</tr>

<tr >

<td>T4</td>

</tr>

</table>

<A NAME="таблица2"></A>

<table >

<tr>

<td >T1</td>

</tr>

<tr >

<td >T2</td>

<td >T3</td>

<td>T5</td>

</tr>

<tr >

<td>T4</td>

</tr>

</table>

<A HREF="#таблица1">ссылка на 1 таблицу</a>

<A HREF="#таблица2">ссылка на 2 таблицу</a>

</body>

</html>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]