Лекция №2 классы. Синтаксис объявления класса
Понятие класса является наиболее важным в языке C++. Синтаксис объявления класса похож на синтаксис описания структуры. Вот его основная форма:
class <имя_класса>
{
privat:
<закрытые_элементы_класса>
protected:
<защищённые_элементы_класса>
public:
<открытые_элементы_класса>
}<список_объектов> ;
где
<имя_класса> необязательно, хотя его обычно указывают. <имя_класса> становится новым именем типа данных, которое используется для объявления объектов этого класса;
<список_объектов> необязательный, объявить объекты класса можно позже, по мере необходимости.
Функции и переменные, объявленные внутри объявления класса, становятся членами этого класса:
переменные, объявленные внутри объявления класса, называются данными-членами этого класса;
функции, объявленные внутри объявления класса, называются функциями-членами этого класса.
По умолчанию, все функции и переменные, объявленные в классе, становятся закрытыми в этом классе. Это означает, что они доступны только для других членов этого класса. Для объявления открытых членов класса используется ключевое слово public, за которым следует двоеточие. Все функции и переменные, объявленные после слова public, доступны и для других членов класса, и для любой другой части программы, в которой содержится класс.
Примеры объявления класса
Пример 1. Объявим класс, который содержит закрытое данное-член класса x и две открытые функции-члены класса для изменения и получения данного-члена класса x.
class AnyClass
{
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.
class complex // класс комплексных чисел
{
double re, im; // private по умолчанию
public:
double real();
double imag();
void set(double x, double y);
void print();
};
Данный класс содержит объявление собственных данных-членов re, im, обозначающих соответственно действительную и мнимую части комплексного числа и объявление общедоступных функций-членов real(), imag(), set(double x,double y), print(). Эти функции объявлены в классе, но они не определены. Для определения функции-члена нужно связать имя класса с именем функции.