Similar presentations:
Статические функции и члены. Лекция №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.