Раздел 'public', 'private', или 'protected' класса, в котором сделаны
объявления дружественности роли не играет.
Определение полей (данных) класса происходит так же как и определение
любых объектов , но делается это внутри класса:
//c.h
class
С
{
//по умолчанию все поля закрыты
public:
double x,y;
//открытые поля класса
protected:
string description;
//защищенные поля класса
private:
double x2,y2;
//закрытые поля класса
};
Доступ к полям осуществляется с помощью селекторов доступа '.' для
объекта класса или '->' для указателя на объект класса.
//main.cpp
#include "c.h"
int main()
{
С obj, pobj={&obj};
obj.x = 0.0;
// Изменение открытых полей
obj.y = 0.0;
pobj->x = 1.0;
// Опа, снова поменяли
pobj->y = 1.0;
obj.x2 = 0;
// Ошибка. Доступ закрыт.
}
Объявление и определение методов класса происходит подобно
объявлению и определению функций, но только внутри класса
//c.h
class
С
{
public:
double x,y;
// открытые поля из предыдущего примера
double mod(); //
открытый метод класса. здесь только объявление,
//
определение метода (тело функции) сделано отдельно, хотя
//
можно было бы определить здесь
protected:
string description; //
метод 'mod()' имеет доступ к этому полю
private:
66
double x2,y2;
// и к этим полям тоже. а извне к ним доступа нет
};
Метод, объявленный в классе, но не определенный там же, должен быть
определен отдельно. Определение вне класса дается аналогично определению
функции, но добавляется оператор разрешения доступа '::', указывающий на то,
что метод определен внутри класса. Имя класса указывается в определении.
Обычно объявления классов выделяются в заголовочные файлы. Это
позволяет использовать имя класса во всех файлах реализации, в которых
включен данный заголовочный файл. А определение методов, которое не может
дублироваться, производится единожды в файле реализации.
//c.cpp
#include "c.h"
// включение заголовка для использования объявлений класса 'C'
double C::mod()
// определение метода <имя класса>::<имя метода>
{
x2 = x*x;
// внутри методов класса доступ к другим полям и методам
//
осуществляется без селектора доступа. Здесь это
//
иллюстрирует запись значений в 'x2' и 'y2'.
y2 = y*y;
return( squareroot(x2+y2) );
}
//main.cpp
#include "c.h"
// снова включение того-же заголовка для того, чтобы ниже
//
создать объект класса 'C'
int main()
{
С obj1, obj2;
obj1.x = 0.0; //
Изменение открытых полей
obj1.y = 0.0;
obj2.x = 1.0;
// Изменение открытых полей
obj2.y = 1.0;
double abs1 = obj1.mod();
//вызов метода класса первого объекта
double abs2 = obj2.mod();
//вызов того же метода для второго объекта
}
Вот в этом месте очень важно понять различие между классом и
объектом. Класс определяет тип и свойства типа - поля и методы. Объект
является экземпляром класса и имеет все свойства класса при этом значение
этих свойств у каждого экземпляра может быть разным. У одного класса может
быть множество объектов.
67
Do'stlaringiz bilan baham: |