294.00K
Категория: ПрограммированиеПрограммирование

Статические функции и члены. Лекция №13

1.

Лекция № 13
Статические функции
и члены

2.

Зачем ?
Совместное использование элемента класса
несколькими объектами
Для совместного использования элемента
объявляем этот элемент как static
Группа радиокнопок.
Единое для них статическое поле – название
этой группы.

3.

Static – элемент
static поле
Объект_1
Объект_2
Объект_3
Существует только одна копия этого члена,
сколько бы объектов этого класса ни
создавалось.

4.

Создаем класс книга
class book
{
public:
book(char *, char *);
void print(void);
~book();
private:
static int k;
char title [128];
char author[128];
};
int book::k = 0;

5.

Конструктор и Деструктор
book::book(char *title, //Констр.
char *author)
{
strcpy(book::title, title);
strcpy(book::author, author);
k++;
}
book::~book() // ----- Деструктор
{
printf("k = %d",k--); getch();
}

6.

Метод печать
// ----- Печать информации о книге
void book::print(void)
{
printf("Author......%s\n",author);
printf("Title.......%s\n",title);
printf("Total.......%d\n\n\n",k);
}

7.

Основная программа
int main(void)
{
book B1("Pushkin A.S.",
"THE GOLDEN FISH");
B1.print();
book B2("Chekhov A.P.",
"SHORT STORIES");
B2.print();
getch(); return 0;
}

8.

Окончательный вариант программы (1)

9.

Окончательный вариант программы (2)

10.

Почему код не компилируется ?
int book::k=0;
int main(void)
{
book::k=10;
book B1("Pushkin A.S.",
"THE GOLDEN FISH");
B1.print();
}

11.

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

12.

Класс контроля файла
enum ac_type {shared, in_use,
locked, unlocked};
class access
{
static enum ac_type acs;
int size;
public:
static void set(enum ac_type a)
{ acs = a; }
static enum ac_type get(void)
{ return acs;}
};

13.

Основная программа
enum ac_type access::acs;
int main(void)
{
access obj1, obj2;
access::set(locked); // имя класса
// ........ код
if (obj2.get()==unlocked)
// вызов с помощью объекта
{
access::set(in_use);
printf("In use....\n");
}
}

14.

Можно ли в методе set обратиться к size ?
class access
{
static enum ac_type acs;
int size;
public:
static void set(enum ac_type a)
{ acs = a; }
static enum ac_type get(void)
{ return acs;}
};

15.

Итоги
Элемент класса static, может совместно
использоваться всеми объектами данного класса.
После объявления static элемента,
объявляем глобальную переменную.
Если объявлен элемент (функция) как public и
static, то программа может использовать такой
элемент, даже если объекты класса не существуют.
Доступ class_name::member_name.
English     Русский Правила