![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Гость_AKTech |
|
|||
Unregistered |
Добрый день!
Как можно функции-члену объекта одного класса передать в качестве параметра функцию-член объекта другого класса. И возможно ли такое в принципе? #include <cstdio> #include <conio.h> Этот мой код не работает на этапе выполнения : //------------------------------------------------ class A; class Op { public: virtual int F1(int);//=0; //{ return 0; } virtual int F2(int (Op::*)(int), int); }; //------------------------------------------------ int Op::F1(int x) { return x*x; } //------------------------------------------------ int Op::F2(int (*f)(int), int x) { return 0;//Op::f(x); } //------------------------------------------------ //------------------------------------------------ //------------------------------------------------ class A :public Op { public: int F2(int (*f)(int), int); int F1(int); int cf(int,int); // int(*MM[])(int)={FIFNH, DBEYDE, DBEUD}; }; //------------------------------------------------ int A::F1(int x) { return x*x; } //------------------------------------------------ int A::F2(int (*f)(int), int x) { return f(x); }; //------------------------------------------------ //------------------------------------------------ class B :public Op { public: int F1(int); int F2(int (*)(int), int); }; //------------------------------------------------ int B::F1(int x) { return x*x; } //------------------------------------------------ int B::F2(int (*f)(int), int x) { return f(x); } //------------------------------------------------ main() { A *pa = new A; B *pb = new B; Op *obj[2]={pa,pb}; int k = obj[0] -> F1(3); // ответ: 9 - ок int k2 = obj[1]->F2(obj[0] -> F1 , 3);// ответ 0 - должно быть 9 printf(" k = %d\n k2 = %d", k, k2); return 0; } |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
По-моему, у тебя определения функции F2 отличается от описания в классе. Попробуй все сделать через
typedef int(Op::*op_fptr)(int) Во-первых и ошибок меньше будет, и писать меньше |
|||
|
||||
LabelZero |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.1.2004 Где: СПБ Репутация: нет Всего: нет |
если у тя билдер
typedef int(__closure *op_fptr)(int) (это проще) или типа того если VC, то typedef int(Op::*funcptr)(int) |
|||
|
||||
Unregistered |
|
|||
Unregistered |
то что ты хочешь сделать, противоречит принципам объектно-ориентированного программирования.
|
|||
|
||||
LabelZero |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 24.1.2004 Где: СПБ Репутация: нет Всего: нет |
если использовать __closure из BCB, то противоречий вроде бы ноль
![]() мне нравится ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |