Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
77
Добавлен:
07.03.2016
Размер:
1.78 Mб
Скачать

Void b::fb()

{

val = 0;

}

Void c::fc()

{

val = 0;

}

Якщо функція-член приймає вказівку або посилання на інший об’єкт, то правила вже інші. Розглянемо модифікований клас С:

class C: public B

{

public:

void FC(A&);

};

Void c::fc(a&a)

{

val = 0; //доступ дозволений

a.val = 0; /*тут використовується посилання A&:

порушення прав доступу, може бути використаний

загальнодоступний інтерфейс класу А.*/

}

Доступ до val через посилання на об’єкт класу А не дозволений, незважаючи на те, що функція розташована усередині класу, породженого від А, що має доступ до захищених членів класу.

Докладно про захищені члени класу буде розглянуто в розділі 3 "Спадкування класів". Можна створювати об’єкти класу або вказівку на об’єкти класу в основній або динамічній пам’яті.

Приклад:

class Co

{

public:

int GetVal() {return 1;}

};

Void main()

{

Co ct;

Co*pt; //вказівка на об’єкт в основній пам’яті

Co *ptt=new Co; //вказівка на об’єкт у динамічній пам’яті

pt = ptt;

GetVal(); // не в області видимості: невідома функція

ct.GetVal(); // нормально

pt->GetVal(); // нормально

ptt->GetVal(); // нормально

delete ptt; // вивільнення динамічної пам’яті

}

1.3.4. Організація загального інтерфейсу

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

Добре розроблений інтерфейс звичайно містить у собі функції-члени, що виконують такі дії:

  • ініціалізують змінну типу даного класу. Конструктори завжди мають тип public;

  • звільняють пам’ять, яка використовується змінною класу. Деструктори завжди мають тип public;

  • проводять початкову установку значень приватних змінних-членів класу;

  • обчислюють значення приватних змінних-членів класу;

  • виконують реальну роботу об’єкта.

Приклад: У цьому прикладі показана версія програми Sf із розширеним загальним інтерфейсом. У програмі реалізується повний набір загальних функцій-членів, що нададуть функції main() доступ до приватних даних-членів.

#include <iostream>

using namespace std;

#define M_PI 3.14159265358979323846

class Sf

{

private: //це не обов’язково - по умовчанню рrivate

float r, x, y, z;

float cub() {return (r*r*r);}

float kv() {return (r*r);}

public:

Sf(float xk, float yk, float zk, float rk)

{ x = xk; y = yk; z = zk; r = rk;}

~Sf(){ cout << "\n Кінець \n";}

float ob(){return (cub()*4*M_PI/3);}

float pl(){return (kv()*4*M_PI);}

void Setx(float newx){x = newx;}

void Sety(float newy){y = newy;}

void Setz(float newz){z = newz;}

void Setr(float newr){r = newr;}

float Getx() {return x;}

float Gety() {return y;}

float Getz() {return z;}

float Getr() {return r;}

};

Void main()

{

Sf s(1.0, 2.0, 3.0, 4.0);

cout << "x = " << s.Getx() << "\n";

cout << "Площа = " << s.pl() << "\n";

s.Setx(5.0); s.Setr(8.0);

cout << "x = " << s.Getx() <<"\n";

cout << "Площа = " << s. pl() << "\n";

}

Результат: х = 1

Площа = 201,062

х = 5

Площа = 804. 248