Понедельник, Июль 5th, 2010

Шпоры по С++

member *prev; member *next; char bukva;
public :
member(char cc) { bukva=cc; } // конструктор
void add (void);
static void reprint (void);
};

#include //Member.cpp
#include
#include “member.h”
void member : : add(void) //добавление списка
{ if (last_memb==NULL ) this->prev=NULL;
else {last_memb->next=this; prev=last_memb;}
last_memb=this; this ->next=NULL;
}
void member : : reprint (void)
{ member *uk; uk=last_memb;
if (uk==NULL) { cout<<“\ n Список пуст!”; return ; } else cout<<“\ n Содержимое списка: \ n”; while (uk!=NULL) { cout<bukva<<‘\ t’; uk=uk->prev;}
}

#include //Spisok.cpp Основной модуль
#include “member.cpp”
member *member::last_memb=NULL;
void main()
{ member A(‘a’); member B(‘b’); member C(‘c’); member D(‘d’);
member : : reprint()
A.add(); B.add(); C.add(); D.add();
member : : reprint();
}

27. Друзья классов
Дружественной функцией класса называется функция, которая, не являясь его компонентой, имеет доступ к его защищенным и собственным компонентам. Она расширяет интерфейс класса. Для получения прав друга функция должна быть описана в теле класса со спецификатором friend.
#include
class charlocus
{ int x,y; char cc;
friend void friend_put (charlocus *, char);
public :
charlocus (int xi, int yi, char ci) { x=xi; y=yi; cc=ci;} //конструктор
void display (void) { gotoxy(x, y); putch (cc); }
};
void friend_put (charlocus *p, char c) { p->cc=c; }
void main (void)
{ charlocus D(20,4,’d’); charlocus S (10,10,’s’)’; clrscr();
D.display(); getch(); S.display(); getch(); friend_put (&D,’*’);
D.display(); getch(); friend_put (&S,’#’); S.display(); getch();
}
Дружественные функции при вызове не получают указателя this. Объекты классов должны передаваться другим функциям явно через аппарат параметров. Вызывать дружественные функции как компонентные нельзя, так как они не являются компонентами классов.
Дружественная функция:
не может быть компонентной функцией того класса, по отношению к которому, она дружественна;
может быть глобальной функцией
class CL { friend int f1(. . . ); . . . };
int f1 (. . .) {тело функции }
может быть компонентной функцией другого, ранее определенного класса: class CLASS { . . . char f2(. . .); . . . };
class CL { . . . friend char CLASS : : f2(. . .); . . . };
может быть дружественной по отношению к нескольким классам:
class CL2;
class CL1 {friend void ff(CL1, CL2); . . . };
class CL2 {friend void ff(CL1, CL2); . . . };
void ff( . . . ) { тело функции }
Использование механизма дружественных функций упрощает интерфейс между классами. Дружественная функция позволяет получить доступ к собственным или защищенным компонентам сразу нескольких классов. Таким образом, из классов можно убрать компонентные функции, предназначенные только для доступа к “скрытым” компонентам.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Категория: Шпоры