Статья : Классы в C++ 


Полнотекстовый поиск по базе:

Главная >> Статья >> Информатика, программирование


Классы в C++




Классы в 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

Похожие работы:

  • Классы: копирование и присваивание

    Статья >> Иностранный язык
    ... копированием и присваиванием Положение в классах Блокирование копирования и присваивания Реализация ... и присваивание в производных классах Понятие копирования Здесь мы ... построенный компилятором. В текст определения класса в этом случае полезно поместить ...
  • Класс, нация и общественная политика в русской революции 1917 года

    Реферат >> История техники
    ... испытывали органическую ненависть к господствующему классу, не имеющую аналогов в Европе ... мелкую буржуазию и рабочий класс, т.е. те классы, которые внесли свой вклад ... слоями общества, и языком класса, используемым угнетенными классами. В этом смысле Струве ...
  • Класс жгутиковые (Flagellata)

    Реферат >> Биология и химия
    ... цитоплазму. Многие представители описываемого класса имеют наружные скелеты из ... как гетеротрофы. Таким образом, в классе жгутиковых обе главные ветви органического ... больших озер), многие представители этого класса - паразиты. В стоячих пресных водоемах ...
  • Класс Насекомые

    Доклад >> Биология
    ... – самый разнообразный, многочисленный и высокоорганизованный класс членистоногих. Число видов, входящих в него, ... превышает 750 тыс. Класс включает 30 отрядов. Насекомые встречаются ...
  • Класс хрящевые рыбы - Chondrichthyes

    Курсовая работа >> Биология
    ... – CHONDRICHTHYES Характеристика класса и системы Морские рыбы ( ... один отряд химерообразные – Chimaeriformes. Класс Chondrichthyes – Хрящевые рыбы + Подкласс ... и успешно конкурировать с более разнообразным классом костных рыб. Распространение по всем ...
  • Класс паукообразные

    Реферат >> Биология
    Класс Паукообразные Паукообразные в основном сухопутные членистоногие. ... пауки, клещи, скорпионы. Животные этого класса отличаются от других членистоногих тем ...
  • Класс Инфузории (Infusoria)

    Реферат >> Биология и химия
    Класс Инфузории (Infusoria) Общая характеристика Инфузории - ... в строении жгутиков и ресничек, а также наличие в классе Flagellata видов с большим количеством жгутиков ...
  • Класс Ложноножковые или Саркодовые (Sarcodina)

    Доклад >> Биология и химия
    ... характеристика Характерная особенность представителей этого класса - движение с помощью временных выростов тела ...
  • Класс Строка

    Статья >> Информатика, программирование
    ... довольно реалистичный пример класса string. В нем производится учет ссылок ...
  • Класс хвойные род тис

    Реферат >> Биология
    Класс хвойные род тис Семейство тисовые ( ...