Программирование >>  Структурное программирование 

1 ... 156 157 158 [ 159 ] 160 161 162 ... 342


копирование 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 появляется первым (по соглашению) в объявлении класса, даже раньше объявления закрытых функций-элементов.



1 ... 156 157 158 [ 159 ] 160 161 162 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика