Головна

типізація

  1. Індустріалізація, уніфікація і типізація в будівництві.
  2. Індустріальні методи будівництва. Уніфікація, типізація і стандартизація
  3. Науково технічний прогрес, сутність, значення та основні напрямки в сучасній торгівлі. Типізація, уніфікація і стандартизація обладнання, поняття і значення.
  4. Узагальнення і типізація
  5. типізація
  6. Типізації БУДІВНИЦТВА ТА МОДУЛЬНА СИСТЕМА

типізація - Це спосіб захиститися від використання об'єктів одного класу (типу) замість іншого, або, принаймні, управляти таким використанням.

Ідея узгодження типів займає в понятті типізації центральне місце. Візьмемо, наприклад, фізичні одиниці виміру. Розділивши відстань на час, ми очікуємо отримати швидкість, а не вагу. У множенні температури на силу сенсу немає, а в множенні відстані на силу є. Все це приклади сильної типізації, коли прикладна область диктує правила і обмеження на використання та поєднання абстракцій.

Розглянемо наступний фрагмент:

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 = 1/2; // Цілочисельне ділення, 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 + (c). В результаті з'являється можливість записувати комплексні вирази у формі, близькій до загальноприйнятої.

Інші типи поліморфізму - Включення і параметричний поліморфізм - Ми розглянемо в п. 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.

ієрархічність | паралелізм


ВСТУП | Складність ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ | Гнучкість програмного забезпечення | абстрагування | інкапсуляція | модульність | збереженість | стан | Поведінка | ідентичність |

© 2016-2022  um.co.ua - учбові матеріали та реферати