C++ 포인터 멤버 함수 사용 질문 드립니다.
글쓴이: ksh0375 / 작성시간: 월, 2019/01/28 - 3:20오후
C언어 함수 포인터처럼 이용해서 맴버 함수를
사용 하려고 합니다. 구글링으로 4시간정도 찾아봤는데
아무것도 안나오네요...
어떻게 해야할까요?
#g++ 1.cpp
1.cpp:30:7: error: cannot convert ‘void (B::*)()’ to ‘void (*)()’ in assignment
fptr = &B::act;
^
1.cpp:35:7: error: cannot convert ‘void (C::*)()’ to ‘void (*)()’ in assignment
fptr = &C::ccc;
#include <iostream> using namespace std; class A { public: void action(void){} //void (*f)(void); }; class B : public A { public: void act(void) { cout << "B : act"<< endl; } }; class C : public A { public: void ccc(void) { cout << "C : ccc"<< endl; } }; int main() { A a; int number_type = 1; void (*fptr)(void); switch(number_type) { case 1 : { fptr = &B::act; break; } case 2 : { fptr = &C::ccc; } default: { break; } } fptr(); }
Forums:
함수를 static으루 선언해서 한번 해보시죠?
함수를 static으루 선언해서 한번 해보시죠?
감사합니다!
조금 변형을 하니까 제가 원하던 대로 되었습니다..^^!!
댓글 감사합니다!
질문자의 수준을 예측하기가 힘들어서 장황하게
질문자의 수준을 예측하기가 힘들어서 장황하게 답글다는것을 죄송하게 생각합니다.
각설하고, 일단은 멤버함수를 static 으로 하는것은 정석적인 멤버함수포인터가 아닙니다.
그리고 자식의 함수포인터를 가지는것은 에러를 피할 방법이 없어보이구요.
백번 양보 한다셈 쳐도
void (A::*f1)(); 식으로 자기자신의 멤버함수포인터를 가지는것이 될겁니다.
코드의 의도는 잘 모르겠으나 자식의 멤버함수 포인터를 쓰는 개념이 곧 다형성(polymorphism)이라고 합니다.
굳이 코드를 작성해본다면
void (A::*f1)(void);
void (A::*f2)(void);
이 부분을 전방선언으로 B나 C로 바꿀 수 없습니다. (혹시 아시는분은 댓글좀)
의도하신게 이런코드가 아닐까 싶은데...
----------------------------------------------------
개인 블로그: https://kangssu.com
댓글 달기