Заказать курсовые, контрольные, рефераты...
Образовательные работы на заказ. Недорого!

Типизация. 
Объектно-ориентированное программирование

РефератПомощь в написанииУзнать стоимостьмоей работы

Если в описание класса ввести определение функции-члена с именем типа «operator оператор», то это означает, что данный оператор может быть применен к объектам или объекту данного класса, так же как и к переменным стандартных типов. При этом тело данной функции определяет смысл оператора. Например: В данном примере значение переменной i будет преобразовано к типу double и результат сложения также… Читать ещё >

Типизация. Объектно-ориентированное программирование (реферат, курсовая, диплом, контрольная)

Типизация — это способ защититься от использования объектов одного класса (типа) вместо другого, или, по крайней мере, управлять таким использованием.

Идея согласования типов занимает в понятии типизации центральное место. Возьмем, к примеру, физические единицы измерения. Разделив расстояние на время, мы ожидаем получить скорость, а не вес. В умножении температуры на силу смысла нет, а в умножении расстояния на силу есть. Все это примеры сильной типизации, когда прикладная область диктует правила и ограничения на использование и сочетание абстракций.

Рассмотрим следующий фрагмент:

typedef char* Pchar;

Pchar p1, p2;

char *p3 = p1;

Поскольку объявление, начинающееся с ключевого слова typedef, вводит новое имя для типа, эти имена можно свободно смешивать в вычислениях. В этом смысле C++ имеет слабую типизацию.

При проверке типов у классов C++ типизирован гораздо строже. Выражения, содержащие вызовы операций, проверяются на согласование типов во время компиляции.

Важным понятием объектно-ориентированного подхода в целом и языка С++ в частности является полиморфизм.

Полиморфизм — это способ присваивать различные значения (смыслы) одному и тому же сообщению. Смысл зависит от типа обрабатываемых данных.

Имеется несколько типов полиморфизма.

Принудительное приведение. Функция или оператор работает с несколькими различными типами, преобразуя их значения к требуемому типу. Например,.

int i = 1;

double a, b = 4.5;

a = b + i;

В данном примере значение переменной i будет преобразовано к типу double и результат сложения также будет иметь тип double. Заметим, что значение i в памяти останется неизменным, преобразуется только временная копия i, используемая при вычислении значения выражения.

Перегрузка. Функция или оператор вызывается на основе сигнатуры. Например,.

double a;

a = ½; // целочисленное деление, a = 0.

a = 1./2.; // деление вещественных чисел, a = 0.5.

Если в описание класса ввести определение функции-члена с именем типа «operator оператор», то это означает, что данный оператор может быть применен к объектам или объекту данного класса, так же как и к переменным стандартных типов. При этом тело данной функции определяет смысл оператора. Например:

class complex {.

double re, im;

public:

.. .

complex operator+(complex);

complex operator*(complex);

};

Мы определили простую реализацию понятия комплексного числа: число представляется парой чисел с плавающей точкой двойной точности, вычисления осуществляются посредством операций + и *. Теперь, определив переменные b и c типа complex, можно записать b+c, что означает (по определению) b. operator+©. В результате появляется возможность записывать комплексные выражения в форме, близкой к общепринятой.

Другие типы полиморфизма — включение и параметрический полиморфизм — мы рассмотрим в п. 4.3 и 4.5 соответственно.

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

Оператор static_cast используется для преобразования родственных типов и позволяет провести преобразование типа корректно, переносимо и обратимо. Например,.

int i;

double a, b;

.. .

а = static_cast (i);

а = static_cast (static_cast (b) + 1);

Оператор reinterpret_cast позволяет провести явное преобразование между несвязанными (неродственными) типами. Например,.

i = reinterpret_cast (&x);// системно-зависимое Использование модификатора const приводит к тому, что значение переменной нельзя изменить. Если данное ограничение необходимо обойти, используется оператор const_cast.

Преобразование static_cast предполагает, что типы, участвующие в преобразовании, известны во время компиляции. В случаях когда это не так, используется оператор приведения dynamic_cast. Данные ситуации мы рассмотрим в п. 4.3.

Показать весь текст
Заполнить форму текущей работой