Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Class CRectangle

Class CRectangle

{ public:

int Left; // элементы данных класса

int Top; // элементы данных класса

int Right; // элементы данных класса

int Bottom; // элементы данных класса

void Draw() // метод – компонентная

// функция

{ Line(Left, Top, Right, Top);

Line(Right, Top, Right, Bottom);

Line(Right, Bottom, Left, Bottom);

Line(Left, Bottom, Left, Top);

}

}

 

Когда все компоненты CRectangle общедоступны, к ним возможен доступ с использованием оператора точка (.):

Пример:

CRectangle Rect;

Rect.Left=5;

Rect.Top=10;

Rect.Right=100;

Rect.Bottom=150;

Rect.Draw();

 

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

 

 

Пример:

CRectangle *PRect=new CRectangle;

Rect->Left=5;

Rect->Top=10;

Rect->Right=100;

Rect->Bottom=150;

Rect->Draw();

 

Инкапсуляция:

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

Текущий вариант класса CRectangle явно нарушает этот принцип. Следуя принципу инкапсуляции, в классе CRectangle должен быть общий доступ к методу Draw() и запрет на доступ к элементам данных класса.

Пример:

{ private:

int Left; // элементы данных класса

int Top; // элементы данных класса

int Right; // элементы данных класса

int Bottom; // элементы данных класса

public:

void Draw() // метод – компонентная

// функция

{ Line(Left, Top, Right, Top);

Line(Right, Top, Right, Bottom);

Line(Right, Bottom, Left, Bottom);

Line(Left, Bottom, Left, Top);

}

}

 

Элементы класса получают атрибуты доступа либо по умолчанию (private), либо при использовании какого-либо из трех спецификаторов доступа:

1) public Компонент доступен для любой функции.

2) protected Компонент может быть использован методами или “друзьями” класса, в котором он объявлен, а также в производных от него, но только в объектах производного класса.

3) private Компонент может быть использован только методами или “друзьями” класса, в котором он объявлен.

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

Необходимо реализовать метод для инициализации элементов данных.

Пример:

void SetCoord (int L, int T, int R, int B)

{ Left=L; Top=T; Right=R; Bottom=B; }

void main()

{

CRectangle Rect;

Rect.SetCoord(25,25,100,100);

Rect.Draw();

}

 

Теперь нужен метод для получения текущих координат прямоугольника:

void GetCoord (int *L, int *T, int *R, int *B)

{ *L=Left; *T=Top; *R=Right; *B=Bottom; }

Определение класса согласно принципу инкапсуляции:

<== предыдущая лекция | следующая лекция ==>
Class CRectangle | 
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 507; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.