42Seoul/CPP Module 01

ex05(함수 포인터 배열)

재윤 2023. 12. 2. 12:44
반응형

 

함수 포인터 배열

  • 함수 포인터 배열은 함수 포인터를 선언할 때 함수 포인터 이름 뒤에 [ ] 대괄호 안에 배열의 크기를 지정하면 된다
반환값자료형 (*함수포인터 이름)[크기](매개변수자료형1, 매개변수자료형2);

선언 예제

int (*functionPointers[])(int, int) 

전체 코드 예제

#include <iostream>

// 덧셈 함수
int add(int a, int b) {
    return a + b;
}

// 뺄셈 함수
int subtract(int a, int b) {
    return a - b;
}

// 곱셈 함수
int multiply(int a, int b) {
    return a * b;
}

int main() {
    // 함수 포인터 배열 선언 및 초기화
    int (*functionPointers[])(int, int) = { add, subtract, multiply };

    int a = 10;
    int b = 5;

    // 함수 포인터 배열을 사용하여 각 함수 호출
    for (int i = 0; i < 3; ++i) {
        int result = functionPointers[i](a, b);
        
        switch (i) {
            case 0:
                std::cout << "Addition result: " << result << std::endl;
                break;
            case 1:
                std::cout << "Subtraction result: " << result << std::endl;
                break;
            case 2:
                std::cout << "Multiplication result: " << result << std::endl;
                break;
            default:
                break;
        }
    }

    return 0;
}

결과

jaeyojun@c2r10s5 C++ % ./a.out 
Addition result: 15
Subtraction result: 5
Multiplication result: 50

코드

main.cpp

#include "Harl.hpp"

int	main(void)
{
	Harl harl;

	harl.complain("DEBUG");
	harl.complain("INFO");
	harl.complain("WARNING");
	harl.complain("ERROR");
}

Harl.cpp

#include "Harl.hpp"

Harl::Harl(void) 
{
}

Harl::~Harl() 
{
}

void	Harl::debug(void)
{
	std::cout << "I love to get extra bacon for my 7XL-double-cheese-triple-pickle-special-ketchup burger. I just love it!" << std::endl;
}

void	Harl::info(void)
{
	std::cout << "I cannot believe adding extra bacon cost more money. You don’t put enough! If you did I would not have to ask for it!" << std::endl;
}

void	Harl::warning(void)
{
	std::cout << "I think I deserve to have some extra bacon for free. I’ve been coming here for years and you just started working here last month." << std::endl;
}

void	Harl::error(void)
{
	std::cout << "This is unacceptable, I want to speak to the manager now." << std::endl;
}

void Harl::complain(std::string level) 
{
	std::string types[4] = {"DEBUG", "INFO", "WARNING", "ERROR"};
	void (Harl::*fun[4])(void) = {&Harl::debug, &Harl::info, &Harl::warning, &Harl::error};

	for (int i = 0; i < 4; i++)
	{
		if (types[i] == level) 
		   	(this->*fun[i])();
	}
}
반응형

'42Seoul > CPP Module 01' 카테고리의 다른 글

ex06  (0) 2023.12.02
ex04  (0) 2023.12.01
ex03  (0) 2023.12.01
ex02  (0) 2023.12.01
ex01(객체 포인터 배열 할당)  (0) 2023.12.01