Классы в 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. Такие функции называются перегруженными функциями.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Классы в C++

Слов:831
Символов:7477
Размер:14.60 Кб.