Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
50
Добавлен:
16.02.2016
Размер:
196.61 Кб
Скачать

2.Классы. Конструкторы и деструкторы

Понятие класса является ключевым в ООП и в языке C++, где класс – синтаксическая конструкция с широким функциональным наполнением:

class <имя_класса>

{//закрытые функции-члены и данные-члены класса

public:

//открытые функции-члены и данные-члены класса

}

Функции и переменные, указанные внутри объявления класса, становятся членами этого класса. Переменные, указанные внутри объявления класса, называются данными-членами этого класса; функции, указанные внутри объявления класса, называются функциями-членами класса. По умолчанию, все функции и переменные, объявленные в классе, становятся закры­тыми для этого класса. Это означает, что они доступны только для других членов этого класса. Для объявления открытых чле­нов класса используется ключевое слово public, за которым следует двоеточие. Все функции и переменные, объявленные по­сле слова public, доступны и для других членов класса, и для любой другой части программы, в которой содержится класс.

Вот пример объявления класса:

class AnyClass

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

int a;

public:

int get_a();

Void set_a(int num);

};

Хотя функции get_a() и set_a() и объявлены в классе AnyClass, они еще не определены. Для определения функции-члена нужно связать имя класса, частью которого является функ­ция-член, с именем функции. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Операцию, записываемую в виде двух двоеточий, называют опе­рацией расширения области видимости. Для задания функции-члена используется следующая общая форма:

<Тип> <имя_класса>: : <имя_функции>(<список_параметров>)

{

//тело функции

}

Ниже приведены примеры определения функций-членов get_a() и set_a():

Void AnyClass::get_a()

{

return a;

}

Int AnyClass::set_a(int num)

{

a = num;

}

Объявление класса AnyClass не приводит к созданию объ­ектов типа AnyClass. Чтобы создать объект соответствующего класса, нужно просто использовать имя класса как спецификатор типа данных. Например,

AnyClass ob1, оb2;

После того, как объект класса создан, можно обращаться к от­крытым членам класса, используя операцию "точка".

Например,

obl.set_a(10) ;

ob2.set_a(37) ;

Эти операторы устанавливают значения переменной а в объ­ектах оb1 и оb2. Каждый объект содержит собственную копию всех данных, объявленных в классе. Это значит, что значение переменной а в оb1 отлично от значения этой переменной в оb2.

Доступ к элементам данных класса можно получить и с по­мощью указателя на объект этого класса. Следующий пример это иллюстрирует.

class Coord

{

public:

int x,y;

void SetCoord(int _x, int _y);

};

void Coord::SetCoord(int _x, int _y)

{

x = _x;

у = _y;

}

int main()

{

Coord pt;

Coord *ptPtr = &pt; //указатель на объект

//...

pt.x =0; // объект. член_класса

ptPtr->y = 0; //указатель->член_класса

ptPtr->SetCoord(10,20);

//...

return 0;

}

Среди программистов часто возникает спор о том, какой ме­тод доступа к членам класса - через оператор "." или через опе­ратор "->" - работает быстрее. Внесем ясность в этот вопрос. Оператор выбора члена "." работает в точности так же, как опе­ратор "->", за исключением того, что имени объекта предшеству­ет неявно

Язык C++ накладывает определенные ограничения на данные-члены класса:

• данные-члены не могут определяться с модификаторами auto, extern или register;

• данным-членом класса не может быть объект этого же класса (однако данным-членом может быть указатель или ссылка на объект этого класса, или сам объект друго­го класса).

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

Класс должен быть объявлен до использования его членов. Однако, иногда в классе должен быть объявлен указатель или ссылка на объект другого класса еще до того, как он определен.

В этом случае приходится прибегать к неполному объявлению класса, которое мы не будем рассматривать.

Доступ к элементам класса обеспечивается посредством спецификаторов доступа, которые применяется ко всем элементам клас­са, следующими за ним, пока не встретится другой спецификатор доступа или не закончится определение класса. Следующая таб­лица 6.1 описывает три спецификатора доступа.

Таблица 6.1.

Спецификаторы доступа к классу

Спецификатор

Описание

Private :

Данные-члены и функции-члены доступны только для функций-членов этого класса.

Protected:

Данные-члены и функции-члены доступны для функций-членов данного класса и классов, производных от него.

public:

Данные-члены и функции-члены класса доступны для функций-членов этого класса и других функций программы, в которой имеется представитель класса.

Соседние файлы в папке ЛекцииКарасева