[5번]
/*
Point 클래스의 멤버 함수 포인터
*/
#include <iostream>
using namespace std;
class Point
{
private:
int x;
int y;
public:
explicit Point(int _x = 0, int _y = 0) :x(_x), y(_y)
{
}
void Print() const
{
cout << x << ", " << y << endl;
}
void PrintInt(int n)
{
cout << "테스트 정수: " << n << endl;
}
};
int main(void)
{
Point pt(2, 3);
Point *p = &pt;
void (Point::*pf1)() const; //멤버함수 포인터 선언
pf1 = &Point::Print;
void (Point::*pf2)(int); //멤버 함수 포인터 선언
pf2 = &Point::PrintInt;
pt.Print();
pt.PrintInt(10);
cout << endl;
(pt.*pf1)(); //객체로 멤버 함수 포인터를 이용한 호출
(pt.*pf2)(10); //객체로 멤버 함수 포인터를 이용한 호출
cout << endl;
(p->*pf1)(); //주소로 멤버 함수 포인터를 이용한 호출
(p->*pf2)(10); //주소로 멤버 함수 포인터를 이요한 호출
return 0;
}
[8번]
/*
함수 포인터를 이용한 콜백 매커니즘 구현
*/
#include <iostream>
using namespace std;
//서버
//배열의 모든 원소에 반복적인 작업을 수행하게 추상화됨
void For_each(int *begin, int *end, void(*pf)(int))
{
while (begin != end)
{
pf(*begin++); //클라이언트 함수 호출(콜백)
}
}
//클라이언트
void Print1(int n) //공백을 이용해 원소를 출력
{
cout << n << " ";
}
void Print2(int n) //각 원소를 제곱해 출력
{
cout << n*n << " ";
}
void Print3(int n) //문자열과 endl을 이용해 원소를 출력
{
cout << "정수: " << n << endl;
}
int main(void)
{
int arr[5] = { 10, 20, 30, 40, 50 };
For_each(arr, arr + 5, Print1); //Print1() 콜백 함수의 주소를 전달
cout << endl << endl;
For_each(arr, arr + 5, Print2); //Print2() 콜백 함수의 주소를 전달
cout << endl << endl;
For_each(arr, arr + 5, Print3); //Print3() 콜백 함수의 주소를 전달
return 0;
}
[9번]
/*
STL의 for_each 알고리즘 사용
*/
#include <algorithm> //for_each() 알고리즘(서버)를 사용하기 위한 헤더
#include <iostream>
using namespace std;
//클라이언트
void Print1(int n) //공백을 이용해 원소를 출력
{
cout << n << " ";
}
void Print2(int n) //각 원소를 제곱하여 출력
{
cout << n*n << " ";
}
void Print3(int n) //문자열과 endl을 이용해 원소를 출력
{
cout << "정수: " << n << endl;
}
int main(void)
{
int arr[5] = { 10, 20, 30, 40, 50 };
for_each(arr, arr + 5, Print1); //Print1() 콜백 함수의 주소를 전달
cout << endl << endl;
for_each(arr, arr + 5, Print2); //Print2() 콜백 함수의 주소를 전달
cout << endl << endl;
for_each(arr, arr + 5, Print3); //Print3() 콜백 함수의 주소를 전달
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 뇌를 자극하는 C++ STL
'C++ > 뇌를 자극하는 C++ STL' 카테고리의 다른 글
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 6장 (0) | 2018.01.07 |
---|---|
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 5장 (0) | 2018.01.06 |
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 4장 (0) | 2017.12.29 |
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 3장 (0) | 2017.11.16 |
뇌를 자극하는 C++ STL 이것만은 알고 갑시다 1장 (0) | 2017.11.03 |