4Статические_Дружественные

advertisement
Статические элементы класса
Объявление:
static тип имя;
Пример статического метода:
MyClass {
public:
static int a() {…};
}
Обращение (используется полное имя):
MyClass::a();
Пример №11. Определение количества существующих и
созданных объектов класса
class Base{
static int count1;
static int count2;
public:
static void show_count(void);
Base (void);
~ Base (void);
};
Base::Base (void)
{ count1++;
count2++;
}
Base::~Base (void)
{ count2--; }
void Base::show_count(void)
{
cout<<“Создано объектов:”<<count1<<“\n”;
cout<<“Существующих
объектов:”<<count2<<“\n”;
}
int Base::count1;
int Base::count2;
Пример №11 (продолжение)
Результат работы:
int main()
{
Base::show_count();
Base a, b, c, *p;
a. show_count();
Base x, y, z;
Base::show_count();
z. show_count();
p=new Base;
Base::show_count();
delete p;
Base::show_count();
return 0;
}
Создано объектов: 0
Существующих объектов: 0
Создано объектов: 3
Существующих объектов: 3
Создано объектов: 6
Существующих объектов: 6
Создано объектов: 6
Существующих объектов: 6
Создано объектов: 7
Существующих объектов: 7
Создано объектов: 7
Существующих объектов: 6
Дружественные функции
class line;
class point{
int x, y;
int color;
public:
friend int f_color (line l, point p);
void set_color(int c) {color=c};
…
};
class line {
int nx, ny;
int color;
public:
friend int f_color (line l, point p);
void set_color(int c) {color=c};
…
};
// описание функций класса point
// описание функций класса line
// описание дружественной функций
int f_color (line l, point p)
{
If (l.color==p.color)
return 1;
return 0;
}
int main ()
{ line l;
point p;
l.set_color(Red);
p.set_color(Green);
If (f_color(l,p))
cout<<“Одинаковые цвета\n”;
else
cout<<“Разные цвета\n”;
return 0;
}
Дружественная функция – элемент класса
class line;
class point{
int x, y;
int color;
public:
int f_color (line l);
void set_color(int c) {color=c};
…
};
class line {
int nx, ny;
int color;
public:
friend int point::f_color (line l);
void set_color(int c) {color=c};
…
};
// описание функций класса point
// описание функций класса line
// описание дружественной функций
int point::f_color (line l)
{
If (l.color==color)
return 1;
return 0;
}
int main ()
{ line l;
point p;
l.set_color(Red);
p.set_color(Green);
If (f_color(l,p))
cout<<“Одинаковые цвета\n”;
else
cout<<“Разные цвета\n”;
return 0;
}
Дружественные классы
class X {…};
class Y
{
…
friend class X;
…
};
Download