본문 바로가기

프로그래밍/C,C++

[C]

1. c style...............................................................................................................

c 형태의 전역함수

 

void func(int a);  // 함수원형

void (*pCall)(int); // 함수포인터

 

◎ note;

리턴값 void, 인자 int 한개를 가지는 함수의 주소를 담는 변수를 pCall로 선언한다.

 

◎ 값넣기;

pCall = func;

pCall = &func;

 

두가지 모두 가능하나 2번째로 사용하는게 편리.

첫번째는 함수의 호출과 혼돈할 여지가 있음.

 

◎ 호출;

pCall(1);

(*pCall)(1);

 

두가지 모두 가능.

 

 

2. c++ style...........................................................................................................

c++ 의 클래스 함수

 

class CTest

{

     void func(int a); // 함수 원형

     void (CTest::*pCall)(int); // 클래스 멤버 함수 포인터

}

 

◎ note;

void (*pCall)(int); 만으로 선언하게 되면, 일반 전역함수의 포인터가 되므로 주의할것.

클래스내의 멤버함수의 주소를 가질수 있는 포인터함수는 해당 클래스의 스코프를 명기해 주어야 함.

 

◎ 값넣기;

pCall = &CTest::func;

 

 

pCall = CTest::func; // vc2005 에서 에러. 함수 호출로 생각해 인자를 넣으라는 에러를 발생시킴.

 

◎ 호출;

(this->*pCall)(1);

 

호출방법상 차이가 발생하니 주의할것. this-> 연산자를 지정해야함.

지정이 없는 경우 일반 전역 함수 포인터와 동일해 지므로 정확한 형식을 찾지 못해 에러를 냄.

해당 클래스 스코프내의 함수 포인터임을 인지시킴.

 

끝.

'프로그래밍 > C,C++' 카테고리의 다른 글

[C#] 파일 읽고,쓰기 기초  (0) 2013.09.12
[C#] 이미지 처리 기본 사항들  (0) 2013.09.12
[C#] 이벤트  (0) 2013.09.12
[C#] 폼 띄우기  (0) 2013.09.12
GCC 옵션  (0) 2011.07.21
POSIX 쓰레드 함수들  (0) 2010.04.16
[Linux] 세마포어 설정  (0) 2010.04.15
[Linux] 라이브러리  (0) 2010.01.28
바이트오더~ 비트 스트림~  (0) 2009.06.04
delete obj, delete [] obj 차이  (0) 2009.06.04