logo
Лабораторная работа 7new

Основные теоретические сведения Объявление базового класса

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

Каждое объявление внутри класса определяет привилегию доступа к именам класса в зависимости от того, в какой секции имя появляется. Каждая секция начинается с одного из ключевых слов: private, protected и public. Пример иллюстрирует обобщенный синтаксис объявления базового класса.

class className

{

private:

<приватные члены данных> <приватные конструкторы> <приватные методы>

protected:

<защищенные члены данных> <защищенные конструкторы> <защищенные методы>

public:

<общедоступные свойства> <общедоступные члены данных> <общедоступные конструкторы> <общедоступный деструктор> <общедоступные методы>

};

Таким образом, объявление базового класса на C++ предоставляет следующие права доступа и соответствующие области видимости:

Следующие правила применяются при образовании различных секций объявления класса:

  1. Секции могут появляться в любом порядке, а их названия могут встречаться повторно.

  2. Если секция не названа, компилятор считает последующие объявления имен класса приватными. Здесь проявляется отличие объявлений класса и структуры - последняя рассматривается по умолчанию как общедоступная.

  3. По мере возможности не помещайте члены данных в общедоступную секцию, если только вы действительно не хотите разрешить доступ к ним отовсюду. Обычно их объявляют защищенными, чтобы разрешить доступ только методам производных классов.

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

  5. Конструкторы и деструкторы являются специальными функциями, которые не возвращают значения и имеют имя своего класса. Конструктор строит объект данного класса, а деструктор его удаляет.

  6. Методы (так же как конструкторы и деструкторы), которые содержат более одной инструкции C++, рекомендуется объявлять вне класса.

Следующий пример представляет попытку наполнить объявление базового класса некоторым конкретным содержанием. Отметим характерное для компонентных классов C++Builder объявление свойства Count в защищенной секции, а метода SetCount, реализующего запись в член данных FCount - в приватной секции.

class TPoint {

private:

int FCount; // Приватный член данных void _fastcall SetCount(int Value);

protected:

_property int Count = // Защищенное свойство

{ read= FCount, write=SetCount };

double x; // Защищенный член данных

double у; // Защищенный член данных public:

TPoint(double xVal, double yVal); // Конструктор |

double getX(); |

double getY() ;

Объявления и определения методов хранятся в разных файлах (с расширениями .h и .срр, соответственно). Пример показывает, что когда методы определяются вне класса, их имена следует квалифицировать. Синтаксис такой квалификации метода, определяющей его область видимости, имеет следующий вид:

<имя класса>::<имя метода>

Пример определения конструктора и методов вне класса:

TPoint::TPoint(double xVal, double yVal)

{ // Тело конструктора

void _fastcall TPoint::SetCount( int Value )

{

if ( Value i= FCount ) // Новое значение члена данных? {

FCount = Value; // Запись нового значения Update(); // Вызов метода Update } } double TPoint::getX()

// Тело метода getX, квалифицированного в классе TPoint

}

После того, как вы объявили класс, его имя можно использовать как идентификатор типа при объявлении объекта этого класса (например, TPoint* MyPoint;).