Объективное программирование — страница 3

  • Просмотров 10322
  • Скачиваний 358
  • Размер файла 45
    Кб

непосредственно к классам, с их помощью можно реализовать рассмотренные выше принципы объектно-ориентированного программирования. 2.1. Присваивание структур ------------------------- Операция присваивания может быть применена к структурам одного типа. В этом случае предполагается их побайтное копирование одной в другую. Она (а не ссылка на нее) может быть также фактическим параметром и результатом функции. Если имеется ссылка на

структуру с именем p, то результатом операции *p является структура в целом. Таким образом, структура приближается к базовым типам данных в том смысле, что над ней возможны вышеуказанные операции. Для обозначения структуры можно также использовать имя структуры без ключевого слова struct. struct dat { int day,month,year; } dat NextDat(dat x) // Формальный параметр - структура { ... return(x); } // Возвратить структуру как результат dat Nextdat1(dat *p) { ... return(*p); } // Возврат

структуры косвенно по ссылке dat a,b,c,*q; // Ключевое слово struct не используется void main() { q = &b; a = b; // Прямое присваивание структур a = *q; // Косвенное присваивание по ссылке c = NextDat(b); // Присваивание структуры как результата c = NextDat1(&b); // функции, фактический параметр в } // NextDat - копия структуры 2.2. Обращения по адресу (неявная ссылка) ---------------------------------------- При работе со структурами большого размера - при передаче их в качестве параметров и

результатов функций - копирование их является неэффективной операцией. Гораздо эффективнее передавать ссылку на эту структуру. Для того, чтобы постоянно не указывать операции взятия адреса и косвенного обращения по ссылке в Си++ введен тип - неявная ссылка: при определении переменной неявно вводится ссылка, указывающая на эту переменную. Использование этой переменной в большинстве операций предполагает косвенное обращение

по соответствующей ссылке. При инициализации такой переменной значением другой переменной создается ссылка на эту другую переменную. При использовании в любом выражении переменной - неявной ссылки реально производится косвенное обращение по созданной ссылке. Си++ Эквивалент в "классическом" Си ------------------------ -----------------------------//--------------- Инициализация константой -----------------int &a = 5; int a, *pa =a; *pa = 5; //--------------- Инициализация

переменной -----------------int x; int x,*pa; int &a = x; pa = &x; a = 5; *pa = 5; //-------------- Неявная ссылка на структуру ----------------struct dat struct dat { int day,month,year }; { int day,month, year }; dat x; dat x; dat& b = x; dat* pb = &x; dat& c = {12,12,1990}; dat cc = {12,12,1990}; dat *pc = &cc; b.year = 1990; pb->year= 1990; c.day=b.day+3; pc->day = pb->day+3; c = b; // Копирование pc->day = pb->day; // структуры pc->month = pb->month; pc->year = pb->year; Наиболее часто неявные ссылки используются при передаче параметров и результатов функций. В этом случае