Классы в C++
Одной из основных черт C++, которой нет в С, является
концепция классов. По существу, классы - самое важное понятие в C++. Классы
похожи на структуры языка С. Однако структура С определяет только данные,
ассоциированные с этой структурой. Вот пример структуры С:
struct CIRCLE
{
int radius;
int color;
{;
После того как вы объявили структуру, вы можете
использовать ее в пределах вашей функции main (), как показано ниже:
void main()
CIRCLE MyCircle;
...
...
MyCircle.radius =
18;
MyCircle.color = 255; // 255 задает цвет
...
...
}
Со структурой MyCircle (представляющей окружность)
ассоциируются данные radius и color (радиус и цвет). Класс в C++, с другой
стороны, имеет как ассоциированные с ним данные, так и функции. Данные класса
называются элементами данных, а функции класса - элементами-функциями.
Следовательно, в программе, которая использует классы, можно написать следующий
код:
MyCircle.radius =
20;
MyCircle.color =
255;
MyCircle.DisplayCircle()
;
Первые два оператора присваивают значения элементам
данных MyCircle radius и color; третий оператор вызывает функцию-элемент
DisplayCircle() для вывода окружности MyCircle. MyCircle называется объектом
класса circle. Ваша программа может объявить другой объект с именем HerCircle
класса circle следующим образом:
CIRCLE HerCircle;
Следующие операторы присваивают значения элементам
данных HerCircle radius и color:
HerCircle.radius = 30;
HerCircle.color = 0;
Затем вы можете использовать функцию-элемент
DisplayCircie () для вывода окружности HerCircle:
HerCircle.DisplayCircle();
Объявление класса
Перед тем как работать с классом, ваша программа
должна его объявить (так же как перед работой со структурой mystructure вы
должны были объявить ее элементы данных). В данном разделе вы познакомитесь с
синтаксисом объявления класса. Вы будете и дальше практиковаться с классом
circle:
class Circle (
public:
Circle () ;
void
SetRadius(void) ;
void
GetRadius(void) ;
~Circle () ;
private:
void
CalculateArea(void);
int radius;
int color;
};
Объявление класса имеет следующее строение:
class Circle {
...
...
Здесь вы вводите объявление класса
...
...
};
Ключевое слово class показывает компилятору, что все
находящееся в фигурных скобках ({}) принадлежит объявлению класса. (Не
забывайте ставить точку с запятой в конце объявления.) Объявление класса
содержит объявление элементов данных (например, int radius) и прототипы
функций-элементов класса. В объявлении класса circle содержатся следующие
элементы данных:
int radius;
int color;
Объявление также содержит пять прототипов
функций-элементов:
Circle();
void
SetRadius(void) ;
void
GetRadius(void) ;
~Circle () ;
void CalculateArea(void);
Первый и четвертый прототипы выглядят странно. Первый
из них является прототипом функции конструктора:
Circle();
Вы узнаете о роли конструктора позже в этом разделе, а
пока запомните синтаксис, который используется в C++ для прототипа функции
конструктора. Когда вы записываете прототип конструктора, вы должны следовать
правилам, приведенным ниже:
• Каждое объявление класса должно включать прототип
функции конструктора.
• Имя функции конструктора должно совпадать с именем
класса, а после него должны следовать круглые скобки (). Если, например, вы
объявляете класс с именем Rectangle, он должен включать объявление функции
конструктора класса: Rectangle (). Следовательно, объявление класса Rectangle
должно выглядеть так:
class Rectangle
{
public:
Rectangle(); // Конструктор
...
...
private:
...
...
};
• Не упоминайте никакого возвращаемого значения для
функции конструктора. (Функция конструктора должна иметь тип void, но не нужно
это указывать.)
• Функция конструктора должна располагаться под
ключевым словом
public.
Функция конструктора всегда возвращает значение типа
void (несмотря на то, что вы не указали его в прототипе). Как вы вскоре
увидите, функция конструктора обычно имеет один или большее число параметров.
Функция деструктора
Функция деструктора записывается в объявлении класса
следующим образом:
class Circle
(
public:
...
...
~Circle (); //Деструктор private:
...
...
};
Обратите внимание на символ тильды (~), который
предшествует прототипу функции деструктора. (На большинстве клавиатур вы можете
найти символ тильды слева от клавиши 1.) При записи прототипа функции
деструктора соблюдайте следующие правила:
• Имя функции деструктора должно совпадать с именем
класса и ему должен предшествовать символ ~. Если, например, вы объявляете
класс с именем Rectangle, именем функции деструктора должно быть ~Rectangle.
Следовательно, объявление класса Rectangle должно выглядеть следующим образом:
class Rectangle
{
public:
Rectangle(); // Конструктор
...
~Rectangle(); // Деструктор private:
...
...
};
• Не указывайте никакого возвращаемого значения для
функции деструктора. (Функция деструктора должна иметь тип void, но не нужно
это указывать.)
• Функция деструктора не имеет никаких параметров.
Ключевые слова public и private
Прототипы функций и объявления элементов данных
включаются в объявлении класса в разделы public (открытый) или private
(закрытый). Ключевые слова public и private говорят компилятору о доступности
элементов-функций и данных. Например, функция SetRadius() определена в разделе
public, и это означает, что любая функция программы может вызвать функцию
SetRadius(). Функция CalculateArea() определена в разделе private, и эту
функцию можно вызвать только в коде функций-элементов класса Circle.
Аналогично, поскольку элемент данных radius объявлен в
разделе private, прямой доступ к нему (для установки или чтения его значения)
возможен только в коде функций-элементов класса Circle. Если бы вы объявили
элемент данных radius в разделе public, то любая функция программы имела бы
доступ (для чтения и присваивания) к элементу данных radius.
Перегруженные функции
В C++ (но не в С) вы можете использовать одно и то же имя
для нескольких функций. Например, вы можете объявить две функции с именем
SetRadius() в объявлении класса CCircle. Такие функции называются
перегруженными функциями.
Список литературы
Для подготовки данной работы были использованы
материалы с сайта http://www.realcoding.net