Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример. «Точка на плоскости».






Точку на плоскости можно представить, например парой (x, y) декартовых координат или (r, j) – полярных. Для пользователя понятие «точка на плоскости» не зависит от способа её представления, решая свои задачи, он пожелает узнать любое из её свойств, когда-то j-угол, а когда-то y-координату. Выбирая способ представления класса, нам придётся выбрать одно из представлений точки, если нам не хочется «возиться» с избыточным представлением, поскольку существенной пользы от этого не предвидим.

Object Pascal 2 C (C++)
unit Unit1; interface TYPE TCPoint= CLASS PROTECTED x: REAL; PRIVATE y: REAL; //Файл unit1.h: class TCPoint{ protected: double x; private: double y;
Спецификатор protected не проявит никаких отличий от private, но это пока, а в будущем (в наследовании) проявит...
Cкрыв способ представления точек, берем на себя ответственность – восстановить доступные инструменты для работы с точками: Ø Селекторы компонентов ¨ Соответствуют использованию выборки поля в правой части оператора присваивания § Выбрать x-координату § Выбрать y-координату
PUBLIC FUNCTION GetX: REAL; FUNCTION GetY: REAL; public: double GetX(); double GetY();
¨ Но в более широком смысле, как селекторы свойств объекта § Выбрать Ro-координату § Выбрать Fi-координату § Сравнить на равенство с другой точкой
FUNCTION GetRo: REAL; FUNCTION GetFi: REAL; FUNCTION GetEq(prmP: TCPoint ): BOOLEAN; double GetRo(); double GetFi(); bool GetEq(TCPoint prmP);  
Ø Модификаторы компонентов ¨ Соответствуют использованию выборки поля в левой части оператора присваивания § Установить значение x-координаты § Установить значение y-координаты
PROCEDURE SetX( prmVal: REAL); PROCEDURE SetY( prmVal: REAL); void SetX(double prmVal);   void SetY(double prmVal);
¨ Но в более широком смысле, как модификаторы состояния объекта § Установить значение Ro-координаты § Установить значение Fi-координаты ¨ Или в еще более широком смысле § Переместить точку поворотом вокруг центра системы координат § Переместить точку параллельным сдвигом, заданным радиус-вектором другой точки
PROCEDURE SetRo( prmVal: REAL); PROCEDURE SetFi( prmVal: REAL); PROCEDURE Rotat{поворот}( prmDFi: REAL); PROCEDURE Sum{сдвиг}( prmP: TCPoint); void SetRo(double prmVal);   void SetFi(double prmVal);   void Rotat/* поворот */( double prmDFi); void Sum/*сдвиг*/( TCPoint prmP);
Ø Генераторы объектов ¨ Конструкторы
CONSTRUCTOR GenXY( prmX, prmY: REAL); CONSTRUCTOR GenRoFi( prmRo, prmFi: REAL);  

 

Прежде чем рассматривать объявление конструкторов в С++ обсудим два возникших вопроса:

§ В Object Pascal объявлено два конструктора, но в С++ конструктор должен иметь имя TCPoint – можно ли объявить два метода с одинаковым именем?

§ В С++ должен быть объявлен конструктор по умолчанию, либо ни одного конструктора не должно быть объявлено (тогда конструктор по умолчанию создается автоматически). Но в Object Pascal оба объявленных конструктора имеют параметры. Обязательно ли объявлять третий – конструктор по умолчанию?

Представить ответы на эти вопросы нам помогут средства программирования в Object Pascal 2 и С++:

¨ Инициализация:

§ переменных при их объявлении, и

§ формальных параметров при их спецификации.

¨ Перегрузка (overload) функций-процедур и методов.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.