-Рубрики

 -Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в TheLenka

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 03.01.2009
Записей:
Комментариев:
Написано: 265


Описание класса: зоны доступа, свойства, методы...)

Среда, 24 Июня 2009 г. 16:00 + в цитатник

Построение класса

Класс является производным типом  данных. Для описания класса используется ключевое слово class. Кроме этого, допустимо с аналогичной целью использовать ключевые слова struct и union. В дальнейшем мы будем пользоваться только ключевым словом class.
В описании класса может содержаться три разновидности зон, задаваемых спецификаторами доступа private, protected и public:

class имя_класса  
{
private: // доступны только внутри класса
данные
методы
ргotected: // доступны внутри класса и для производных классов
данные
методы
public: // доступны извне в области действия объекта
данные
методы
};

Спецификаторы доступа определяют права доступа к членам класса. Права доступа одинаковы до появления следующего специ¬фикатора или до конца описания класса. Зоны доступа могут встре¬чаться в описании класса многократно и в любой последовательно¬сти, однако на практике следует использовать не более одной зоны каждого типа. Если спецификатор доступа не указан, то по умолчанию пред¬полагается зона private.

Начнем с небольшого примера. Введем класс Place, описы¬вающий простейший геометрический объект - точку, характеризую¬щуюся только своим местоположением.
class Place  
{
private:
int x; // координата х
int y; // координата y
public:
 int Getx()
{
return x;
}
 int Gety()
{
return y;
}
};
Определение объектов имеет обычный вид, где в качестве типа выступает имя класса:

Place Anypoint; // объект класса Place

Методы класса должны быть объявлены внутри его описания. Само же описание методов может быть встроено внутрь описания классов, или вынесено за его пределы. Так в нашем примере методы Getx(), Gety() описаны внутри класса. Описание методов внутри класса принято в том случае, когда это какие-то короткие методы, в противном случае они описываются вне описания класса:

class Place  
{
private:
int x; // координата х
int y; // координата y
public:
int Getx(); //объявление метода Getx() или его прототип
int Gety();//объявление метода Gety() или его прототип

};

int Place::Getx()
{
return x;
}
int Place::Gety()
{
return y;
}

Здесь через :: указывается методы какого класса мы описываем. Метод с именем данного класса находится внутри области действия класса независимо от расположения. Это означает, что в частности x и y из методов Getx(), Gety() – те самые x и y, которые объявлены в классе Place. Методам класса доступны не только элементы данных, но и другие методы класса, которые могут вызывать друг друга.
Данные внутри класса не инициализируются, т. к. описание класса – это всего лишь шаблон, и память для него будет выделена только при создании экземпляра, или объекта класса. В таком случае было бы ошибкой:
class Place  
{
private:
int x=10; // координата х
};
Введем дополнительный метод Move, который будет инициализировать значения x и y.
class Place  
{
private:
int x; // координата х
int y; // координата y
public:
int Getx(); //объявление метода Getx() или его прототип
int Gety();//объявление метода Gety() или его прототип
void Move(int newx, int newy);
};
void Place::Move (int newx, int newy)
{
x=newx;
y=newy;
}
Вызывая метод Move мы сможем инициализировать x и y, и менять их текущие значения.

Доступ к членам класса

Способ доступа к членам класса существенно зависит от того, производится он из функции, принадлежащей классу, или из какой-либо другой функции. В первом случае доступ осуществляется непо¬средственно, без использования дополнительных операций. Примеры доступа к элементам x и y уже были даны при рассмотрении класса Place.
Для того чтобы использовать метод или элемент данных класра извне класса, существуют четыре механизма, каждому из которых соответст¬вует своя операция: '.', '->'. Допустимым является доступ лишь к public-членам любого класса. Это касается \ как функций, так и данных.
Первый механизм с использованием операции точка '.' имеет синтаксис:

имя_объекта.класс::имя_метода(список параметррв); имя_объекта.класс::элемент_данных;

Имя класса с операцией области действия ': :' обычно может быть опущено. Вместе с тем имя объекта обязательно должно быть указано - ведь обработке подлежит конкретный объект. Вызов методов класса будет иметь вид для объекта Anypoint:
Place Anypoint;
Anypoint.Getx();
Anypoint.Gety() ;

а доступ к данным

int x = Anypoint.x; //если х в зоне public
int y = Anypoint.y; //если у в зоне public

Если имеется указатель на объект, можно применять другой ме¬ханизм доступа и операцию '->' :
имя указателя->имя_метода(список параметров);
имя_указателя->элемент_данных;

Например:
Place Loc, *Pnt = &Loc; //определение указателя
int m = Pnt->Gety () ; // вызов метода
int z = Pnt->x; // если х находите» в зоне public

В языке C++ имеются также две операции '. *' и '->*'; при помощи которых осуществляется косвенный (без указания имени) доступ к членам класса. Эти операции применяются достаточно ред¬ко.

 


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

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