Індивідуальні завдання 22. Дружні функції класу та дружні класи Бывают случаи, когда для заданного класса нужно объявить другой класс или функцию, которые должны иметь неограниченный доступ к внутренним переменным и методам класса. Такая необходимость возникает из сути решаемой задачи. Если класс A объявляется «дружественным» к классу B, то объекты класса A имеют доступ ко всем членам данных и методам класса B. Если функция объявляется «дружественной» к некоторому классу, то из этой функции также есть неограниченный доступ к членам данных и методам этого класса. Таким образом, «дружественный» класс или функция дополняют функционал класса в котором они объявлены как «дружественные». Чтобы объявить «друженственный» класс к данному классу, используется ключевое слово friend. Общая форма объявления «дружественного» класса к данному имеет вид: class CClass { // ... friend class CFriendClass; // ... }; class CFriendClass { // ... }; где CClass – класс, в котором объявляется «дружественный» класс CFriendClass. Все переменные (даже и private) и методы этого класса есть доступными для объектов класса CFriendClass; CFriendClass – класс, который есть «дружественным» к классу CClass. Объявление «дружественного» класса CFriendClass к классу CClass может быть в любом месте тела класса – в границах объявления класса (между фигурными скобками { }). Объявление «дружественной» функции к классу начинается из ключевого слова friend. Общая форма объявления «дружеской» функции к классу имеет вид: friend type FunName(parameters); где FunName – имя «дружественной» функции; type – тип, который возвращается функцией FunName(); parameters – параметры «дружественной» функции. Чтобы получить объект нужного класса в функции FunName() целесообразно передать в эту функцию ссылку (или указатель) на объект этого класса. Если нужно объявить «дружественную» функцию в некотором классе, то общий вид такого объявления следующий: class CClass { // ... friend type FunName(parameters); // ... }; где FunName – имя «дружественной» функции; type – тип, который возвращается функцией FunName(); parameters – параметры «дружественной» функции. Задача 6. Створити клас із полями, зазначеними в індивідуальному завданні . Реалізувати в класі методи: - конструктор за замовчуванням; - конструктор перезавантаження з параметрами; - деструктор ; - функцію обробки даних, зазначену в індивідуальному завданні ; - функцію формування рядка інформації про об'єкт. Створити зовнішню функцію ( поза класом) для обробки об'єкта відповідно до індивідуального завдання. Створити проект для демонстрації роботи: введення й вивід інформації про об'єкти.
#include #include using namespace std; class data { private: int hour; int minut; int second; public: data() { hour = 0; minut = 0; second = 0; } data(int hour_, int minut_, int second_) { hour = hour_; minut = minut_; second = second_; } void reduce_data() { second = second + 1; if (second > 60) { second = 1; } } void how_data() { cout << hour << ":" << minut << ":" << second << endl; } }; int main() { int a; data one(24, 24, 59); one.how_data(); cout << "Увеличить время" << endl; cin >> a; one.reduce_data(); one.how_data(); } |