Синтаксис объявления класса

Понятие класса является наиболее важным в языке C++. Синтаксис объявления класса похож на синтаксис описания структуры. Вот его основная форма:

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

{

privat:

<закрытые_элементы_класса>

protected:

<защищённые_элементы_класса>

public:

<открытые_элементы_класса>

}<список_объектов> ;

где

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

<список_объектов> необязательный, объявить объекты класса можно позже, по мере необходимости.

Функции и переменные, объявленные внутри объявления класса, становятся членами этого класса:

· переменные, объявленные внутри объявления класса, называются данными-членами этого класса;

· функции, объявленные внутри объявления класса, называются функциями-членами этого класса.

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

 

Примеры объявления класса

Пример 1. Объявим класс, который содержит закрытое данное-член класса x и две открытые функции-члены класса для изменения и получения данного-члена класса x.

classAnyClass

{

int x;// закрытое данное-член класса

public:// открытые члены класса

int GetX();// функция возвращает значение данного-члена класса x

void SetX(int X);// функция изменяет значение данного-члена класса x

};

Обратите внимание на объявление функции-члена void SetX(int X); Параметр функции X отличен от данного-члена класса x, поскольку компилятор C++ различает прописные и строчные буквы. Использование в списке параметров идентификаторов, совпадающих с данными-членами, усложнит код вашей программы и затруднит её чтение.

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

Пример 2.

class date // дата

{

int month, day, year; // поля: месяц, день, год

public:

void set(int,int,int); // метод – установить дату

void get(int*,int*,int*); // метод – получить дату

void next(); // метод – установить следующую дату

void print(); // метод – вывести дату

};

Пример 3.

classcomplex //класс комплексных чисел

{

doublere, im; // private по умолчанию

public:

doublereal();

doubleimag();

voidset(double x, double y);

voidprint();

};

Данный класс содержит объявление собственных данных-членов re, im, обозначающих соответственно действительную и мнимую части комплексного числа и объявление общедоступных функций-членов real(), imag(), set(double x,double y), print(). Эти функции объявлены в классе, но они не определены. Для определения функции-члена нужно связать имя класса с именем функции.

 

Определение функции-члена класса

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

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

{

<тело_функции>

}

Примеры определения функций-членов GetX( ) и SetX( ) классаAnyClass:

intAnyClass :: GetX()

{

returnx;

}

voidAnyClass :: SetX(int X)

{

x=X;

}

Если тело функции-члена класса невелико по объёму, как в приведённом выше примере, то описание функции удобно привести в объявлении класса в соответствии со следующим синтаксисом:

<тип_результата> <имя_функции> (<список_параметров>) {<тело_функции>}

В этом случае чтение и редактирование класса упростится, и он будет иметь следующий вид:

Пример 4.

classAnyClass

{

int x; // закрытое данное-член класса

public:// открытые члены класса

int GetX()

{return x;} // функция возвращает значение данного-члена класса x

void SetX(int X)

{x=X;} // функция изменяет значение данного-члена класса x

};

Пример 5.Функции-члены класса complex можно описать таким образом:

double complex :: real()

{

return(re);

}

double complex :: imag()

{

return(im);

}

void complex :: set(double x, double y)

{

re = x;

im = y;

}

void complex :: print()

{

cout<<"re = "<<re<<endl;

cout<<"im = "<<im;

}

 

Создание объекта класса

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

Для описания объекта класса (экземпляра класса) используется конструкция

имя_класса имя_объекта;

В определяемые объекты входят данные, соответствующие членам − данным класса. Функции-члены класса позволяют обрабатывать данные конкретных объектов класса. Обращаться к данным объекта и вызывать функции для объекта можно двумя способами. Первый с помощью «квалифицированных» имен:








Дата добавления: 2016-10-17; просмотров: 1311;


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

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.015 сек.