C++/뇌를 자극하는 C++ STL

뇌를 자극하는 C++ STL 2장 중요 예제

꾸준함. 2017. 11. 11. 00:51

[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


반응형