Синтаксис объявления класса
Понятие класса является наиболее важным в языке 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; просмотров: 1354;