П. 5.4. Закрытые и открытые члены класса




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

Если из определения класса Car убрать строку «public: », тогда все переменные и метод класса Car окажутся закрытыми, и любое обращение к ним извне объекта вызовет ошибку компиляции.

Область public в объявлении класса – это посредник между объектом и внешним миром. Эта часть класса называется открытым интерфейсом класса и может рассматриваться как соглашение с той частью программы, в которой создается и используется объект – клиентом. К открытому интерфейсу не относится ничто в объявлении класса из области private.

 

Ниже приведен пример объявления класса и определение его объекта.

 

#include <iostream>

using namespace std;

// объявление класса Car

class Car

{

unsigned short Key;

public:

unsigned int itsYear;

unsigned int numbDoors;

void Start();

};

 

int main()

{

//определение объекта класса Car

Car myZaparozec;

myZaparozec.itsYear =20; //обращение к данным-членам

myZaparozec.numbDoors =2;

 

cout<<"To my automobile "<<myZaparozec.itsYear <<" years"<<endl;

cout<< "At my automobile "<<myZaparozec.numbDoors<<" doors"<<endl;

return 0;

}

 

Результат работы программы:

To my automobile 20 years

At my automobile 2 doors

 

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

Пример1. Здесь показан класс Car, в котором объявлены закрытые переменные-члены и открытые методы доступа к закрытым данным[16].

 

class Car

{

// Закрытый элемент класса

private:

unsigned short Key;

// Открытые методы доступа (функции-члены)

public:

void SetKey (unsigned short Num);

unsigned short GetKey();

};

 

Поскольку Key является закрытой переменной класса, она не доступна для любой функции вне Car. Однако, поскольку методы SetKey() и GetKey() являются членами Car, они имеют доступ к Key. Более того, SetKey() и GetKey(), являясь открытыми членами Car, могут вызываться из любой части программы, использующей данный класс.

Для чего нужен подобный косвенный доступ? Ведь значительно проще и легче использовать сами данные вместо того, чтобы работать с ними через дополнительные функции доступа. Дело в том, что применение методов доступа позволяет скрыть от пользователя подробности хранения данных в объектах, предоставляя в то же время методы использования этих данных. В результате можно совершенствовать способы хранения и обработки данных внутри класса, не переписывая при этом методы доступа и вызова их во внешнем программном коде.

Вернемся к примеру. У класса Car есть функция GetKey(), позволяющая получать данные для какой-либо внешней функции. Тогда класс можно модернизировать сколько угодно, и это никак не повлияет на возможность функции передавать данные в основной коде программы.

 
 

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

 

Параметр Num служит для присваивания переменной Key значения извне объекта.

Пример2. Чтобы установить значение ключа для автомобиля извне, нужно передать соответствующее значение методу SetKey () (установить ключ):

 

Car myZaparozec;

unsigned short Pass;

 

myZaparozec.SetKey (65000); // значение параметра Num =65000

Pass =myZaparozec.GetKey ();

 

cout<<"The key of my automobile "<<Pass<<endl;

 

Но прежде необходимо провести процедуру реализации методов класса.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-15 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: