Объявление или спецификация класса — КиберПедия 

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Объявление или спецификация класса

2020-05-08 217
Объявление или спецификация класса 0.00 из 5.00 0 оценок
Заказать работу

Объявление класса (class declaration) представляет собой описание членов класса: данных и методов. Часто объявление класса называют спецификацией. Члены-данные объявляются согласно правилам объявления переменных и могут иметь любой тип, включая тип класса и указателя на тип класса. Функции-члены в спецификации представлены прототипами.

Спецификация класса, как правило, размещается в отдельном заголовочном файле с расширением.h и имеет следующий формат:

class имя_класса {

private:

// закрытые члены класса protected:

// защищенные члены класса

public:

// открытые члены класса

};

Объявление класса начинается с ключевого слова class, за которым следует имя класса, и заканчивается точкой с запятой. Внутри фигурных скобок мо­жет находиться любое количество секций со спецификаторами доступа, при­чем спецификаторы могут повторяться

Спецификаторы доступа к членам класса

Спецификаторы доступа определяют доступность данных и методов в про­грамме. Существуют следующие спецификаторы доступа:

public — открытый режим доступа. Члены класса доступны за пределами класса любым функциям программы;

protected — защищенный режим доступа. Члены класса доступны для методов этого класса, производных классов и дружественных классов. Производные классы и классы-друзья рассматриваются в следующих гла­вах книги;

private — закрытый режим доступа. Члены класса доступны только для методов этого класса и классов-друзей.

Методы, которые предоставляют сервисные услуги класса, всегда объявля­ются со спецификатором public. Методы, используемые классом для собственных нужд, имеют спецификатор доступа private. Эти методы обеспечи­вают реализацию открытых функций-членов и скрывают сложности их реа­лизации.

Реализация класса

Определение объявленных в спецификации класса методов располагается в от­дельном файле с расширением. срр, называемом файлом реализации класса.

Когда файлы спецификации и реализации класса находятся в разных файлах, заголовок функции-члена должен включать область видимости согласно формату:

тип_функции-члена имя_класса:: имя_функции-члена (список параметров)

Оператор разрешения области видимости:: используется в заголовке с той целью, чтобы все объявленные внутри класса идентификаторы обрабатыва­лись внутри их собственного пространства имен, а также во избежание неод­нозначности использования имен. Запись тела метода ничем не отличается от записи в обычной функции. В файл реализации класса следует включить файл со спецификацией класса, а также необходимые при определении функций заголовки стандартных библиотек.

#pragma once

Пример

// Book.h - спецификация класса СВоок

#pragma once class

CBook {

private:

char m_author [ 50 ]; // автор

char *m_pTitle; // указатель на название

int m_year;  // год издания

public:

// методы установки значений

    void setAuthor (const char*);

    void setTitle (const char*);

    void setYear (const int);

    // методы возврата значений

    char* getAuthor (void);

    char* getTitle (void);

    int getYear (void);

};

// Book.срр - реализация класса СВоок

#include "Book.h"

#include <string> // установить автора

void CBook:: setAuthor (const char* author) {

strncpy_s (m_author, 50, author, 49);

if (strlen (author) > 49) m_author [ 49 ] = '\0';

}

// установить название

void CBook:: setTitle (const char* title) {

delete [ ] m_pTitle;

m_pTitle = new char [strlen (title)+ 1];

strcpy_s (m_pTitle, strlen (title) + 1, title);

}

// установить год издания

void CBook:: setYear (const int year)

{   m_year = year; }

// вернуть автора

char* CBook:: getAuthor (void)

{   return m_author;   }

// вернуть название

char* CBook:: getTitle (void)

{   return m_pTitle;   }

// вернуть год издания

int CBook:: getYear (void)

{   return m_year; }

Определение класса

Определение класса smallobj в приведенной выше программе выглядит следу­ющим образом:

class smallobj  // определение класса

{

private:

int somedata;   // поле класса

public:

void setdata(int d)  // метод класса, изменяющий значение поля

{ somedata = d; }

void showdata() // метод класса, отображающий значение поля

{cout << "Значение поля равно " << somedata << endl; }

};

Определение начинается с ключевого слова class, за которым следует имя класса; в данном случае этим именем является smallobj. Подобно структуре, тело класса заключено в фигурные скобки, после которых следует точка с запятой (;) (не забывайте ставить этот знак. Конструкции, связанные с типами данных, такие, как структуры и классы, требуют после своего тела наличия точки с за­пятой, в отличие от конструкций, связанных с передачей управления, например функций и циклов).

private и public

Тело класса содержит два не встречавшихся раньше ключевых слова: private и public. Сейчас мы раскроем их смысл.

Ключевой особенностью объектно-ориентированного программирования яв­ляется возможность сокрытия данных. Этот термин понимается в том смысле, что данные заключены внутри класса и защищены от несанкционированного доступа функций, расположенных вне класса. Если необходимо защитить какие-либо данные, то их помещают внутрь класса с ключевым словом private. Такие данные доступны только внутри класса. Данные, описанные с ключевым словом public, напротив, доступны за пределами класса.

Данные класса

Класс smallobj содержит всего одно поле данных somedata, имеющее тип int. Дан­ные, содержащиеся внутри класса, называют данными-членами или полями клас­са. Число полей класса, как и у структуры, теоретически может быть любым. По­скольку перед описанием поля somedata стоит ключевое слово private, это поле доступно только внутри класса.

Методы класса

Методы класса — это функции, входящие в состав класса. Класс smallobj содер­жит два метода: setdata() и showdata(). Тела обоих методов состоят из одного опе­ратора, который записан на одной строке с фигурными скобками, ограничива­ющими тело функции. Разумеется, можно использовать и более традиционный способ оформления функций:

void setdata(int d)  // метод класса, изменяющий значение поля

{ somedata = d; }

void showdata() // метод класса, отображающий значение поля

{cout << "Значение поля равно " << somedata << endl; }

};

В тех случаях, когда тела методов невелики по размеру, имеет смысл исполь­зовать более сжатую форму их записи.

Поскольку методы setdata() и showdata() описаны с ключевым словом public, они доступны за пределами класса smallobj. Мы покажем, каким образом можно получить доступ к этим функциям, чуть позже.


Поделиться с друзьями:

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.013 с.