Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / lectures / 1_oop.ppt
Скачиваний:
54
Добавлен:
03.03.2016
Размер:
546.3 Кб
Скачать

//mainfile.cpp

#include "stove.h" #include <conio.h> #include <locale.h>

int main()

{

setlocale(0,"RUS"); stove MyStove; MyStove.Run(); return 0;

}

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

Дружественные классы необходимы в том случае, если не связанным отношением родства классам необходим доступ к закрытым или защищенным секциям одного из них.

Пример.

class A

{ friend class System; double x;

public:

A() {x=3.14;}

};

class System

{

public: A obj;

void f() {cout<<obj.x<<endl;}

};

Свойства друзей:

1) отношение дружественности не наследуются, то есть, если A дружественен B, а C порожден от A, то это не означает, что C становится автоматически дружественным B;

2) свойство дружественности не транзитивно, то есть, если класс А дружественен классу В, а класс В – классу С, то А не становится автоматически дружественным классу С;

3) свойство дружественности не коммутативно, то есть, если A дружественен B, то это не означает, что B дружественен A.

Взаимодружественные классы

class A; //неполное объявление класса

class B

{ friend class A; public: void f(A* c1) {};};

class A;

{ friend class B;

...

};

Раздел, в котором помещено объявление friend, не имеет значения.

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

Объявление friend должно находиться внутри объявления класса.

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

Дружественные функции применяются для доступа к скрытым полям класса и представляют собой альтернативу методам.

Пример использования дружественных функций: переопределенные операции вывода объектов.

Правила описания и особенности

дружественных функций:

1)дружественная функция объявляется внутри

класса, к элементам которого ей нужен доступ, с ключевым словом friend; в качестве параметра ей должен передаваться объект или ссылка на объект класса;

2)дружественная функция может быть обычной функцией или методом другого ранее определенного класса; на нее не распространяется действие спецификаторов доступа, место размещения ее объявления в классе безразлично;

3) одна функция может быть дружественной сразу нескольким классам.

Пример использования дружественных функций.

class One;

class Two { char *s2; public:

Two(){s2="1, 2, 3";} void Show(One &c1);

};

class One

{friend void Two::Show(One &c1); char *s1;

public:

One() {s1="Testing...";}

};

void Two::Show(One &c1)

{

printf("%s %s\n",c1.s1,s2);

}

int main()

{One c1; Two c2; c2.Show(c1); return 0;

}

Соседние файлы в папке lectures