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);

};


 

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

9235. Коронарная недостаточность 25.98 KB
  Коронарная недостаточность Коронарная недостаточность - это типовая форма патологии сердца, которая характеризуется превышением потребности миокарда в кислороде и субстратах метаболизма над их притоком по коронарным артериям, а также нарушение ...
9236. Коронарная недостаточность. Заболеваемость ИБС 28.66 KB
  Коронарная недостаточность. Заболеваемость ИБС Симптомы: боль, СЖК, Брадикинин, Гистамин, Серотонин, внеклеточный К+, Аденозин, Лактат. Основной синдром: боль левосторонняя, реагирует на нитрогилцерин. Резорбтивно-некротический синдром. Состои...
9237. Патофизиология сосудистого тонуса 28.74 KB
  Патофизиология сосудистого тонуса Основные причины снижения импульсации от барорецепторов сосуда и развития гипертензии: Повреждение барорецепторов Адаптация барорецепторов к длительно повышенному АД Снижение растяжимости стенок ...
9238. Гипоксия - состояние, возникающее в результате недостаточного обеспечения тканей организма кислородом 27.55 KB
  Гипоксия Суточные потребности: 1 кг еды, 2 литра воды + 220 литров кислорода - пропустить 12000 литров воздуха. Впервые о гипоксии заговорил Виктор Васильевич Пашутин (1845-1901) - один из основателей патофизиологии. Иван Михайлович Сечено...
9239. Нарушения кислотно-щелочного равновесия 30.8 KB
  Нарушения кислотно-щелочного равновесия Кислотность или щелочность раствора зависит от содержания в этом растворе протонов водорода (или водородных ионов). Показатели этого содержания служит величина рН - отрицательный десятичный логарифм моляр...
9240. Патофизиология углеводного обмена 23.96 KB
  Патофизиология углеводного обмена В крови циркулирует около 20 г сахара, при этом в запасе 480 г гликогена (из них 400 г - гликоген мышечной ткани, 80 г - в печени). Большой потребитель - головной мозг - 115г/сут, 80 мг/мин. Глюконео...
9241. Кома. Общее, крайне тяжелое состояние организма 30.5 KB
  Кома Кома: Общее, крайне тяжелое состояние организма. Возникает в результате действия экзо- и эндогенных повреждающих факторов. Характеризуется угнетением нервной деятельности, потерей сознания, гипо- и арефлексией, недостаточности...
9242. Патофизиология почек 32.36 KB
  Патофизиология почек Заболеваемость в России: Около 14 млн. человек с заболеваниями почек Ежегодный прирост больных ХПН - 10-12% Инвалидизация вследствие болезней почек признаются 41.5 тыс.человек Участие почек в процессах гоме...
9243. Нарушения Водно-электролитного баланса 28.23 KB
  Нарушения Водно-электролитного баланса Изменение содержания воды в организме в зависимости от возраста: Возраст Содержание воды в % Недоношенный новорожденный 80-83 Доношенный 79 Взрослый мужчина 60 Взрослая женщина 58 Взрослый с ожирением 40-50 Худ...