Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример 10.4. Реализация принципа композиции классов
Написать программу для вывода на экран определенных значений.
Листинг 10.5
#include < iostream.h> class One { public: One(int = 1); //конструктор по умолчанию void print(); private: int a; };
class Two { public: Two(int = 1); //конструктор по умолчанию void print(); private: int a; };
class OnePlusTwo_Three { public: OnePlusTwo_Three(int=1, int=1); //конструктор по умолчанию void print(); private: One o; Two t; };
One:: One(int a1) { a = a1; } void One:: print() { cout < < a < < endl; } void Two:: print() { cout < < a < < endl; }
Two:: Two(int a2) { a = a2; }
OnePlusTwo_Three:: OnePlusTwo_Three(int a1, int a3): o(a1), t(a3) {
}
void OnePlusTwo_Three:: print() { o.print(); t.print(); }
main() { OnePlusTwo_Three opt(6, 8); opt.print(); return 0; }
В этой программе определено три класса: One, Two, OnePlusTwo_Three. Композиция классов в этом примере реализована в том, что мы включили под директивой private в классе OnePlusTwo_Three, два объекта классов: Two t, One o. А также посмотрев на определение конструктора класса OnePlusTwo_Three мы видим, что он содержит параметры, помогающие определить конструкторы классов One и Two. Использование дружественных функций и указателя this. Дружественные функции определяются вне области действия этого класса, но имеют право доступа к закрытым элементам private данного класса. Функция или класс в целом могут быть объявлены другом (friend) другого класса. Дружественные функции используются для повышения производительности. Чтобы объявить функцию как друга (friend) класса, перед ее прототипом в описании класса ставится ключевое слово friend. Чтобы объявить класс ClassTwo как друга класса ClassOne, запишите объявление в форме friend ClassTwo в определении класса ClassOne. Дружественность требует разрешения, то есть чтобы класс B стал другом класса A, класс A должен объявить, что класс B - его друг. Таким образом дружественность не обладает ни свойством симметричности, ни свойством транзитивности, то есть если класс A друг класса B, а класс B - друг класса C, то от сюда не следует, что класс B друг класса A, что класс C друг класса B, или что класс A - друг класса C. Ниже приведенная программа демонстрирует объявление и использование дружественной функции setX для установки закрытого элемента данных x класса count. Заметим, что объявление friend появляется первым (по соглашению) в объявлении класса, даже раньше объявления закрытых функций элментов.
Пример 10.5. Реализация дружественности классов
Написать программу, выводящую на экран целое значение.
|