АкушерствоАнатомияАнестезиологияВакцинопрофилактикаВалеологияВетеринарияГигиенаЗаболеванияИммунологияКардиологияНеврологияНефрологияОнкологияОториноларингологияОфтальмологияПаразитологияПедиатрияПервая помощьПсихиатрияПульмонологияРеанимацияРевматологияСтоматологияТерапияТоксикологияТравматологияУрологияФармакологияФармацевтикаФизиотерапияФтизиатрияХирургияЭндокринологияЭпидемиология

Использование указателей на функции-члены класса

Прочитайте:
  1. В чем состоит МФА и его использование в диагностике вирусных болезней?
  2. Возведение числа a в степень числа b с использованием понятия логарифма.
  3. Вопрос: Реакции с использованием меченых антител или антигенов.
  4. Графики валовых издержек и валовых доходов, средних издержек и средних доходов. Анализ критических точек и его использование в управлении фирмой.
  5. Замена препаратов внутри класса
  6. ЗАЯВЛЕНИЕ О ПРАВЕ ЖЕНЩИНЫ НА ИСПОЛЬЗОВАНИЕ КОНТРАЦЕПЦИИ
  7. Земельная рента как цена за использование земли. Рента и арендная плата. Цена земли
  8. Значение и использование Классификаций
  9. И класса чистоты
  10. Издержки фирмы. Использование концепций бухгалтерских и альтернативных издержек в практике предпринимательства.

Можно определить указатель на функцию-член класса. Синтаксис определения следующий:

<возвр_тип> (<имя_класса>::*<имя_указателя>) (< параметры>);

Например:

void (T::* funcPtr) (int x, int у);

Таким образом, синтаксис определения указателя на функцию-член класса отличается от объявления указателя на обычную функцию тем, что в круглых скобках указывается имя класса, отделенное от имени указателя оператором расширения области видимости, а само имя указателя предваряется звездочкой. Эта звездочка должна напомнить программисту, что при использовании такой указатель должен разыменовываться (в отличие от указателя на обычную функцию).

Например: this ->* funcPtr (x, y);

или

* this. * funcPtr (x, y);

Указателю на функцию-член класса передается скрытый указатель this (иначе ему нельзя было бы присвоить значение адреса некоторой функции-члена класса).

Следующий пример демонстрирует использование указателей на функцию-член.

class T

{

int a;

public:

T (int A): a (A){}

void MembFunc () { printf ("Hello!");}

void CallMembFunc (void (T::* funcPtr)())

{

this ->*funcPtr();

}

};

int main ()

{

void (T::* funcPtr)()=& T:: MembFunc;

T ob (2000);

ob. CallMembFunc (funcPtr);

}

C++ накладывает определенные ограничения на использование указателей на функции-члены класса:

o указатель на функцию-член класса не может ссылаться на статическую функцию-член класса (так как ей не передается указатель this);

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

 


Дата добавления: 2015-09-27 | Просмотры: 412 | Нарушение авторских прав







При использовании материала ссылка на сайт medlec.org обязательна! (0.003 сек.)