|
Программирование >> Структурное программирование
копирование fname в firstName и проверка их совпадения int length = strlen(fname); length = length < 25 ? length : 24; strncpy(firstName, fname, length); firstName[length] = \0; копирование Iname в lastName и проверка их совпадения length = strlen(Iname); length = length < 25 ? length : 24; strncpy(lastName, Iname, 24); lastName[length] = \0; cout << Конструктор объекта Employee: firstName lastName endl; void Employee::print() const { cout lastName , firstName endl Нанят: hireDate.print() ; cout << День рождения: ; birthDate.print() ; cout endl; EMPLYl.H Объявление класса Employee. Функции-элементы определены в EMPLY1.CPP tifndef EMPLY1 H ttdefine EMPLY1 H #include datel.h class Employee { public: Employee(char *, char *, int, int, int, int, int, int); void print() const; Lvate: char lastName[25]; char firstName[25]; Date birthDate; Date hireDate; }; tendif Рис. 7.4. Использование инициализаторов объектов-элементов (часть 3 из 5) EMPLY1.CPP Описания функций-элементов класса Employee. iclude <iostream.h> iclude <string.h> ♦include emplyl.h iclude datel.h Employee::Employee (char *fname, char *lname, int bmonth, int bday, int byear, int hmonth, int hday, int hyear) : birthDate(bmonth, bday, byear), hireDate(hmonth, hday, hyear) return 0; Конструктор объекта Date 7/24/49 Конструктор обгьекта Date 3/12/88 Конструктор об-ьекта Employee: Боб он Джон, Боб J Нанят: 3/12/88 День рождения: 7/24/49 Проверка конструктора Date с неправильными значениями: Месяц 14 неправильный. Установлен месяц 1. День 35 непргшильный. Установлен день 1. Конструктор объекта Date 1/1/94 Рис. 7.4. Использование инициализаторов объектов-элементов (часть 5 из 5) 7.4. Дружественные функции и дружественные классы Дружественные функции класса определяются вне области действия этого класса, но имеют право доступа к закрытым элементам private (и, как мы увидим в главе 9 Наследование , к элементам protected) данного класса. Функция или класс в целом могут быть объявлены другом (friend) другого класса. Дружественные функции используются для повышения производительности. Приведем формальный пример, показывающий, как работает дружественная функция. Далее в этой книге дружественные функции применяются для перегрузки операций, используемых классами, и для создания классов итераторов. Объекты класса итератора используются, чтобы последовательно выделять элементы или выполнять операции над элементами в объекте класса контейнера (смотри раздел 7.9). Объекты классов контейнеров способны хранить множество элементов в форме, подобной массиву. FIG7 4.CPP Демонстрация объекта с объектом-элементом. #include <iostream.h> #include emplyl.h main () { Employee е( Боб , Джон , 7, 24, 49, 3, 12, 88); cout << endl; e.print(); cout << endl Проверка конструктора Date << с неправильными значениями: << endl; Date d(14, 35, 94); Неправильные значения Date FIG7 5.CPP Друзья могут иметь доступ к закрытым элементам класса, ♦include <iostream.h> Измененный класс Count class Count{ friend void setX(Count &, int); объявление друга public: Count 0 { X = 0; } конструктор void print 0 const {cout x endl;} вывод private: int x; элемент данных Рис. 7.5. Друзья могут иметь доступ к закрытым элементам класса (часть 1 из 2) Чтобы объявить функцию как друга (friend) класса, перед ее прототипом в описании класса ставится ключевое слово friend. Чтобы объявить класс ClassTwo как друга класса ClassOne, запишите объявление в форме friend ClassTwo в определение класса ClassOne. Замечание по технике программирования 7.5 Спецификаторы доступа к элементам private, protected и public не имеют отношения к объявлениям дружественности, так что эти объявления дружественности могут помещаться в любом месте в описании класса. Хороший стиль программирования 7.2 Помещайте объявления дружественности первыми в классе непосредственно после его заголовка и не предваряйте их каким-либо спецификатором доступа к элементам. Дружественность требует разрешения, т.е. чтобы класс В стал другом класса А, класс А должен объявить, что класс В - его друг. Таким образом дружественность не обладает ни свойством симметричности, ни свойством транзитивности, т.е. если класс А - друг класса В, а класс В - друг класса С, то отсюда не следует, что класс В - друг класса А, что класс С - друг класса В, или что класс А - друг класса С. Замечание по технике программирования 7.6 Некоторые члены сообщества объектно-ориентированного программирования считают, что дружественность портит скрытие информации и ослабляет значения объектно-ориентированного подхода к проектированию. Программа на рис. 7.5 демонстрирует объявление и использование дружественной функции setX для установки закрытого элемента данных х класса count. Заметим, что объявление friend появляется первым (по соглашению) в объявлении класса, даже раньше объявления закрытых функций-элементов.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |