Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мищишин електронка.doc
Скачиваний:
1
Добавлен:
08.12.2018
Размер:
1.04 Mб
Скачать

Void show_book(void);

friend librarian;

private:

char title[64];

char author[64];

char catalog[64];

};

У такому разі об'єкти класу librarian можуть напряму звертатися (використовуючи оператор крапку) до приватних елементів класу book:

Як бачите, щоб вказати друга, необхідний тільки один оператор всередині визначення класу. Наприклад, наступна програма VIEWBOOK.CPP використовує librarian як друг класу book. Отже, функції класу librarian можуть напряму звертатися до приватних елементів класу book, а тому програма використовує функцію change_catalog класу librarian для зміни номера карточки каталога певної книги:

class book {

public:

book(char *, char *, char *);

void show_book(void);

friend librarian;

private:

char title[64];

char author[64];

char catalog[64];

};

book::book(char *title, char *author, char *catalog)

{

strcpy(book::title, title);

strcpy(book::author, author);

strcpy(book::catalog, catalog);

}

void book::show_book (void)

{

cout << "назва: " << title << endl;

cout << "автор: " << author << endl;

cout << "Каталог: " << catalog << endl;

}

class librarian {

public:

void change_catalog(book *, char *);

char *get_catalog(book);

};

void librarian::change_catalog(book *this_book,

char *new_catalog)

{

strcpy(this_book->catalog, new_catalog);

}

char *librarian::get_catalog(book this_book)

{

static char catalog[64];

strcpy(catalog, this_book.catalog);

return(catalog);

}

Void main(void)

{

book programming( "Вчимося програмувати мовою C++",

"Jamsa", "Р101");

librarian library;

programming.show_book( ) ;

library.change_catalog(&programming, "Легкий C++ 101");

programming.show_book( );

}

Як бачите, програма передає об'єкт book у функцію change_catalog класу librarian за адресою. Оскільки ця функція змінює елемент класу book, програма повинна передати параметр за адресою, а потім використати вказівник для звернення до елемента цього класу.

29. Використовування шаблонів функцій

За допомогою шаблона ваші програми можуть оголошувати конкретні функції з необхідними типами. Наприклад, нижче описаний шаблон для функції з ім'ям max, що повертає більше з двох значень:

template<class Т > Т mах(Т а, Т b)

{

if (а > b)

return(а);

else

return(b);

}

Буква Т в цьому випадку є загальним типом шаблона. Після визначення шаблона всередині вашої програми необхідно оголосити прототипи функцій, для кожного типу. У разі шаблона max наступні прототипи створюють функції типу float та int:

float max(float, float);

int max(int, int);

Коли компілятор C++ зустріне ці прототипи, то при побудові функції він замінить типи шаблона Т вказаними вами типами.

template<class Т > Т mах(Т а, Т b)

{

if (а > b)

return(а);

else

return(b);

}

У випадку з типом float функція max після заміни набуде наступного вигляду:

float max(float, float);

{

if (а > b)

return(а);

else

return(b);

}

Наступна програма МАХ_ТЕМР.СРР використовує шаблон max для створення функцій типу int і float:

template<class T> T mах(Т а, Т b)

{

if (а > b)

return(а);

else

return(b);

}

float max(float, float);

int max(int, int);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]