Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++ - ООП.doc
Скачиваний:
11
Добавлен:
21.09.2019
Размер:
399.87 Кб
Скачать

Замечание

Структура программы имеет вид:

#include <iostream.h>

#include <conio.h>

class line; // предварительное объявление класса

class box {..};

class line (…};

….

Класс line объявлен предварительно в начале программы. Это похоже на объявление прототипа функции. Класс line используется в классе box, до того как объявлен шаблон класса line, поэтому необходимо сделать такое объявление.

Дружественная функция может быть не только внешняя функция, но и функция – член другого класса. В предыдущем примере можно было объявить функцию same_color() функцией – членом класса box, а в классе line – дружественной функцией.

class line;

class box

{

int color;

int upx,upy;

int lowx,lowy;

public:

int same_color(line l);

void set_color(int c);

void define_box(int x1, int y1, int x2, int y2);

void show_box(void);

};

class line

{

int color;

int startx,starty;

int len;

public:

friend int box::same_color(line l);

void set_color(int c);

void define_line(int x, int y, int len);

void show_line(void);

};

Следует обратить внимание, что в объявлении класса line указано полное имя функции box::same_color(); Кроме того, можно не указывать в качестве аргумента объект класса box. Функция box::same_color() может быть записана в виде:

int box::same_color(line l)

{

if (l.color==color) return 1;

return 0;

}

Дружественные классы

При объявлении класса можно объявить сразу все функции-члены другого класса дружественными одним объявлением:

class X{…};

class Y

{

// …

friend class X;

// …

};

Объявление класса дружественным предполагает, что приватные и защищенные члены класса Y могут использоваться в классе X.

Аргументы функций, задаваемые по умолчанию

С++ предоставляет пользователю возможность установить значения параметров функции по умолчанию, если при вызове аргументы функции не были указаны.

Например функция f() имеет единственный целый аргумент и его значение по умолчанию должно равняться 10. Описание функции:

void f(int i=10)

{

…..

}

Вызвать функцию, определенную таким образом, можно двумя способами:

f(1); // передаем значение аргумента i, равное 1.

f(); // передаем значение i по умолчанию.

Рассмотрим пример, в котором демонстрируется удобство установки аргументов по умолчанию.

Функция при работе с текстовым экраном выводит указанную строку, начиная с заданного места экрана.

Функция имеет имя stringxy() и не принадлежит <string.h>, <conio.h> и другим библиотекам С++.

void stringxy(char *str, int x=-1, int y=-1)

{

if(x= = -1) x=wherex();

if(y= = -1) y=wherey();

gotoxy(x,y);

cout<<str;

}

wherex(), wherey() принадлежат <conio.h>. Они возвращают текущие координаты курсора x и y соответственно.

Использование stringxy() приведено в следующем примере.

#include <iostream.h>

#include <conio.h>

void stringxy(char *str, int x=-1, int y=-1);

Void main(void)

{

stringxy(“Это строка 11\n”,1,11);

getch();

stringxy(“ продолжение на той же строке\n”);

getch();

stringxy(“Это строка 13\n”,20,13);

getch();

stringxy(“ с позиции 60\n”,60);

getch();

}

// описание функции с аргументами, задаваемыми по умолчанию

// есть отличие заголовка функции от прототипа функции