46231

Указатели на функции, имитация таблиц виртуальных функций с помощью процедурного подхода

Доклад

Информатика, кибернетика и программирование

Возможны только две операции с функциями: вызов и взятие адреса. Указатель, полученный с помощью последней операции, можно впоследствии использовать для вызова функции.

Русский

2013-11-20

14.47 KB

0 чел.

16.Указатели на функции, имитация таблиц виртуальных функций с помощью процедурного подхода.

Указатель на функцию

Возможны только две операции сфункциями: вызов и взятие адреса.

Указатель, полученный с помощью последней операции, можно впоследствии использовать для вызова функции.

voiderror(char* p) { /* ... */ }

// указатель на функцию

void (*efct)(char*);

void f() {

efct = &error;

 // efctнастроен на функцию error

 // вызов error через указатель efct

(*efct)("error");

}

Реализация таблицы виртуальных функций

Ниже приводится пример имитации ОО стиля. Он демонстрирует те затраты, от которых удалось избавиться, перейдя на объектно-ориентированные языки. Подобный прием наверняка использовался многими программистами еще до наступления эры ООП с целью создания более гибкой конструкции программы.

// Структура таблицы виртуальных функций базового

// класса. Содержит указатели на функции,

// переопределяемые в производных классах.

struct shape_vtbl {

 // ввод данных из стандартного потока

void (*In)(shape *_this);

 // вывод данных в стандартный поток

void (*Out)(shape *_this);

 // вычисление площади фигуры

double (*Area)(shape *_this);

 // удаление обобщенной фигуры

void (*Destroy)(shape *_this);

};


 

А также другие работы, которые могут Вас заинтересовать

28951. Борьба политический партий за власть, большевистский государственный переворот 31.5 KB
  Следствием кризиса был Корниловский мятеж в результате которого все большую популярность получили большевики был окончательно потерян авторитет ВП. ЦИК советов и ИСКД создали чрезвычайный орган Комитет народной борьбы с контрреволюцией в который входили меньшевики эсеры и большевики. В это время большевики активизировали работу в советах стали восстанавливать отряды Красной гвардии направили своих агитаторов в корниловские войска Донскую Уссурийскую и Дикую дивизии. Укрепили свои позиции большевики возросло их влияние в народе.
28952. Возникновение советской государственности. Политика «военного коммунизма» 46.5 KB
  С приходом большевиков к власти возможность расширения правительства за счет вхождения в него других социалистических партий не была утеряна. В рядах партии имелась влиятельная группа большевиков которая отстаивала эту позицию. На заседании ЦК большевиков 1 ноября эта линия была расценена как капитулянтская переговоры были свернуты а Каменев снят с поста председателя ВЦИКа. в него было избрано 715 из800 депутатов: 370 эсеров 175 большевиков 40 левых эсеров 17 кадетов 15 меньшевиков 86 представителей национальных партий.
28953. Гражданская война и военная интервенция в России, причины и последствия 33.5 KB
  Предпосылки и причины гражданской войны После Октябрьской революции сложилась напряжённая социалполитическая ситуация Приступая к грандиозному преобразованию России большевики нуждались в спокойствии на внешних границах. Внутренняя обстановка в России была не менее напряжённой. Вводилось единое для всего населения России наименование гражданин Российской республики.
28954. Теория и практика национальной политики большевиков. Образование СССР 47 KB
  Неустойчивость международного положения молодых советских республик в условиях капиталистического окружения также диктовала потребность в объединении. Значение этого разделения возросло после окончания Гражданской войны когда встала задача восстановления разрушенного хозяйства и преодоления экономической отсталости советских республик. сложился военнополитический союз советских республик. был подписан декрет Об объединении советских республик России Украины Латвии Литвы Белоруссии для борьбы с мировым империализмом.
28955. Новая экономическая политика и ее сущность 34 KB
  Нэп допускал некоторое развитие капиталистических элементов при сохранении командных высот народного хозяйства в руках государства диктатуры пролетариата; обеспечивал подъём производительных сил на базе роста социалистических и вытеснения капиталистических элементов преобразование многоукладной экономики в единую социалистическую на основе индустриализации страны и кооперирования сельского хозяйства. Нарушение в этот период экономических связей промышленности с сельское хозяйством через торговлю сокращение товарооборота подрывали...
28956. Курс большевистской партии на строительство социализма в одной стране. Индустриализация и коллективизация сельского хозяйства и их последствия 43.5 KB
  Предпосылки индустриализации. Техникоэкономическая отсталость могла стать хронической и перейти в историческую  необходимость индустриализации. Необходимость индустриализации. Социальная без индустриализации невозможно развитие экономики а следовательно и социальной сферы: образования здравоохранения сферы отдыха социального обеспечения.
28957. Формирование тоталитарно-бюрократического режима в СССР. Становление режима личной власти Сталина 25.5 KB
  Становление режима личной власти Сталина Борьба за власть среди партийных олигархов во второй половине 20х – начале 30х годов. Постепенно расправившись со внутрипартийной оппозицией новая оппозиция троцкистскозиновьевский блок правый уклон в ВКПб попытка отстранить Сталина от власти на XVII съезде последовательно устранив с политической арены Каменева Зиновьева Троцкого Бухарина Рыкова и Томского Сталин к середине 30х годов сосредоточивает в своих руках все властные полномочия и фактически устанавливает тоталитарную форму...
28958. Обострение международной обстановки во второй половине 30-х годов XX века. Противоречивый характер внешней политики ведущих стран Запада и СССР накануне II-ой мировой войны 30.5 KB
  Противоречивый характер внешней политики ведущих стран Запада и СССР накануне IIой мировой войны. СССР подписал подобные договора с Францией и Чехословакией. СССР осудил введение в Германии всеобщей воинской повинности и нападение Италии на Эфиопию. был подписан договор о взаимопомощи между СССР и Монголией.
28959. СССР в условиях начавшейся II-ой мировой войны. Военные события конца 1939-1940 гг. и их современная оценка 42 KB
  СССР в условиях начавшейся IIой мировой войны. СССР объявил о своём нейтралитете. СССР и Германия подписали договор о дружбе и границе. СССР потребовал перенести границу от Ленинграда на 70 км.