Дружественные функции
Применяются для доступа к скрытым полям класса и представляет собой альтернативу методов.
Правила описания и особенности дружественных функций.
Дружественная функция объявляется внутри класса, к элементам которого её нужен доступ с ключевым словом friend, в качестве параметра ей должен передаваться объект или ссылка на объект класса
Дружественная функция может быть обычной функцией или методом ранее определенного класса на нее не распространяется действие спецификаторов доступа.
Место объявления её в классе безразлично.
Одна функция может быть дружественной сразу же к нескольким классам.
Class A {
Private
Int a;
Friend void (int c)
}
Void func (int c) {
A obj;
Obj a=1;
}
Чтобы свойство дружественность выполнялось, заголовок в дружественной функции в классе должен быть аналогичен её заголовку в программе.
Дружественные классы.
Один класс А может быть объявлен дружественен другому классу Б если заголовок класса А описан внутри класса с префиксом FRIEND, тогда все методы класса А смогут использовать защищенное и приватное содержимое класса Б
Class B {
Private
Int a;
Friend class A ;
Pirvate
Int sum();
________________________________________________
Class A {
Void 9 () {
B obj;
Obj a= 1}
};
Операции дружественности несимметрично.
Т.е. если класс А дружественный к классу Б, это не означает что Б дружественен к классу А.
Один класс может быть объявлен дружественным к нескольким классам , для этого его заголовок, надо описать внутри каждого из этих класса. Так же один класс может иметь несколько дружественных ему классов
Статические элементы класса
С помощью идентификатора STATIC можно описать статические поля и методы класса
Статические поля
Применяются для хранения данных, общих для всех объектов класса, эти поля существуют для всех объектов класса в единственном экземпляре, т.е. это такое поле, значение к которому можно обратиться.
Особенности статических полей
Память под статическое поле выделяется один раз при его инициализации независимо о числа созданных объектов и даже при их отсутствии
Статические поля доступа как через имя класса, так и через имя объекта.
Class b {
Public
Static int count
}
A::count;
B obj;
Obj count
На статические поля распространяется действия спецификатора доступа, поэтому статические поля, описанные с идентификатором PRIVATE нельзя изменить.
Class b {
Public
Static int count
}
A::count;
B obj;
Obj count = 3
Это можно сделать только с помощью статических методов
Статические методы
Предназначены для обращения к статическим полям классов
Они могут обращаться только к статическим полям и вызывать только другие статические методы, обращение производится также как и к полям.
ВИРТУАЛЬНЫЕ ФУНКЦИИ
Механизмы виртуальных функций обращаются в тех случаях, когда в базовый класс необходимо поместить функцию, которая должна по разному выполняться в производных классах.
Виртуальные функции важны для того
Полиморфизм поддерживается двумя способами:
Посредством перегрузки виртуальных операций и функций
Посредством виртуальных функций
CLASS Grafic {
PUBLIC class, public Gragic {
Void build (); public
Void Print (); void build();
} void print();
Circle A;
A build ();
Функция класса, причиной этого является то что без использования механизма виртуальных функций вызовы build будут связаны на этапе компиляции с определением функции Build из базового класса.
