68944

Статичні функції-члени

Лекция

Информатика, кибернетика и программирование

Функції-члени також можуть бути статичними, але на них розповсюджується декілька обмежень. Вони мають прямий доступ тільки до інших статичних членів класу. (Зрозуміло, глобальні функції і дані також доступні статичним функціям-членам.) Статична функція-член не має покажчика this.

Украинкский

2014-09-27

28 KB

0 чел.

Лекція № 6

Тема: Статичні функції-члени

Функції-члени також можуть бути статичними, але на них розповсюджується декілька обмежень. Вони мають прямий доступ тільки до інших статичних членів класу. (Зрозуміло, глобальні функції і дані також доступні статичним функціям-членам.) Статична функція-член не має покажчика this. Одна і та ж функція не може одночасно мати статична і нестатична версії. Статичні функції не можуть бути віртуальними. І на закінчення, статичні функції не можна оголошувати за допомогою ключових слів const або volatile.

Розглянемо злегка змінену версію програми, що надає один і той же ресурс різним об'єктам. Звернете увагу на те, що функцію get_reeource () можна викликати як незалежно від об'єкту, використовуючи ім'я класу і оператора дозволу області видимості, так і через об'єкт.

#include <iostream>

using namespace std;

class cl {

static  int resource;

public:

static  int get_resource() ;

void free_resource()   {  resource =  0;   }

};

int cl::resource;   //  Визначення ресурсу.

int cl::get_resource() {

if(resource)   return  0;   //   Ресурс  зайнятий.

else   {

resource = 1;

return 1;  // Ресурс наданий даному об'єкту.

}

}

int main() {

cl obi, ob2;

/* Функція get_resource() є статичною

тому її можна викликати незалежно від об'єкту. */ if(cl::get_resource()) cout << "Об'єкт obi володіє ресурсом\n";

if(!cl::get_resource()) cout << "Об'єкту оЬ2 доступ запрещен\n";

obi.free_resource() ;

if(ob2.get_resource()) // can still call using object syntax

cout « "Тепер об'єкт оЬ2 може використовувати ресурс\n";

return 0;

}

Статичні функції-члени мають обмежений круг додатків, проте вони бувають корисні для попередньої ініціалізації закритих статичних змінних-членів до створення реальних об'єктів. Наприклад, наступна програма абсолютно вірна.

#include <iostream>

using namespace std;

class static_type {

static int i;

public:

static void init(int x) {i = x;}

void show() {cout « i;}

};

int static_type::i; // визначуваний змінну i

int main() {

// Ініціалізували статичні дані перед створенням об'єкту

static_type::init(100);

static_type х;

x.show(); // Відображається число 100

return 0;

}


 

А также другие работы, которые могут Вас заинтересовать

34255. Антропогенез 18.08 KB
  Место человека в системе животного мира. Биологические особенности человека: сложный мозг; вертикально ориентированный скелет; развитая НС и ВНД; подвижные пальцы; объемное цветовое зрение. Особенности человека связанные с прямо хождением: мощная мускулатура нижних конечностей; Sобразный изгиб позвоночника; широкий таз; сводчатая стопа; более мощное развитие костей нижних конечностей; грудная клетка уплощена в спиннобрюшном направлении; большой палец ноги не противопоставлен остальным.
34256. Медицинская экология. Экологически зависимые заболевания 15.69 KB
  Экологически зависимые заболевания – болезни которые при загрязнении окруж. Это заболевания органов дыхания в т.железы и многие другие заболевания развитие которых обусловлено комплексом генетических иммуногенетических инфекционных и других факторов.
34262. Гаструляция 25 KB
  Зародыш на этой стадии состоит из явно разделенных пластов клеток зародышевых листков: наружного эктодерма и внутреннего энтодерма. Деляминация характерна для кишечнополостных клетки находящиеся снаружи преобразуются в эпителиальный пласт эктодермы а из оставшихся клеток формируется энтодерма. Обычно деляминация сопровождается делениями клеток бластулы плоскость которых проходит по касательной к поверхности. Иммиграция миграция отдельных клеток стенки бластулы внутрь бластоцеля.