반응형
함수 포인터 배열
- 함수 포인터 배열은 함수 포인터를 선언할 때 함수 포인터 이름 뒤에 [ ] 대괄호 안에 배열의 크기를 지정하면 된다
반환값자료형 (*함수포인터 이름)[크기](매개변수자료형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 |