개발자
함수 포인터 배열을 활용한 사칙 계산 문제입니다. 코드는 다음과 같습니다. #include <iostream> using namespace std; #define MAX_OP_COUNT 4 class UserObject { private: int (*mp_func_list[MAX_OP_COUNT])(int, int); public: int Add(int a, int b) { return a + b; } int Sub(int a, int b) { return a - b; } int Mul(int a, int b) { return a * b; } int Div(int a, int b) { return b ? a / b : 0; } UserObject() { mp_func_list[0] = &UserObject::Add; mp_func_list[1] = &UserObject::Sub; mp_func_list[2] = &UserObject::Mul; mp_func_list[3] = &UserObject::Div; } // [문제 2] 아래의 코드에 GetFuncList 함수의 반환값을 적어야 함 GetFuncList() { return mp_func_list; } }; int main() { UserObject data; // [문제 3] 아래의 코드에서 p변수의 자료형을 적어야 함 p = data.GetFuncList(); for (int i = 0; i < MAX_OP_COUNT; ++i) { // [문제 4] 아래의 코드에서 p 변수를 사용하려면 연산잔와 필요 형식을 적어야 함 cout << ( p )(5, 4) << endl; } return 0; } 결과 값: 9 1 20 1 [문제2], [문제3], [문제4]에서 요구하는 사항을 코드로 구현하려고 하는데 도저히 잘 몰라서 고수분께 여쭈어 봅니다.
답변 2
삭제된 사용자
2024년 01월 23일
안녕하세요. 문제가 명확히 의도한 바가 무엇인지 모르겠습니다. 교재나 강의 과제라면 그 흐름 속에서 봐야 할 것 같습니다. 제 나름 문제의 요구사항을 추론해보았을 때, 아시는 것처럼 C++ 함수 포인터 배열 키워드를 구글링해서 나오는 문법만으로도 해결이 가능할 것 같습니다. 이번 기회를 살려 정보를 탐색하며 시도해보는 경험을 추가해보시는 것도 좋을 것 같습니다. 도움이 되셨길 바랍니다.
문성원
작성자
명지전문대학 정보통신공학과 • 2024년 03월 20일
아 두서 없이 질문 한 거 같네요. 저 문제는 다행히 제가 공부하는 커뮤니티 회원님의 도움을 받아 해결했습니다. 답변 감사합니다
문성원
작성자
명지전문대학 정보통신공학과 • 2024년 03월 20일
답변 이제야 보내네요 감사합니다. 답변 해주신대로 다시 코드 작성해서 문제 해결했습니다
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 01월 22일
먼저, 함수 포인터의 배열이므로 GetFuncList는 해당 배열의 주소를 반환해야 합니다. 그러나 C++에서 클래스 형태에 속한 비정적 함수는 this 포인터가 함께 전달되어야 하므로, 일반적인 함수 포인터로 다루기 어렵습니다. 이 문제를 해결하고자 std::function을 사용하거나, 정적 함수를 사용하거나, 람다 표현식을 활용하여 this 포인터를 캡춰할 수 있습니다. 하지만 여기서는 좀 더 간단한 방법으로 가정하겠습니다. 멤버 함수 포인터들을 갖고 있는 것 대신에 일반적인 함수 포인터들을 활용하는 것입니다. 다음은 그 예시입니다. ```c++ #include <iostream> using namespace std; #define MAX_OP_COUNT 4 class UserObject { public: // Make the member functions static static int Add(int a, int b) { return a + b; } static int Sub(int a, int b) { return a - b; } static int Mul(int a, int b) { return a * b; } static int Div(int a, int b) { return b ? a / b : 0; } }; // Define the type of the function pointer outside the class typedef int (*FuncPtr)(int,int); // Declare an array of function pointers with size equal to MAX_OP_COUNT FuncPtr mp_func_list[MAX_OP_COUNT] = {&UserObject::Add,&UserObject::Sub,&UserObject::Mul,&UserObject::Div}; // GetFuncList() which returns the array of function pointers FuncPtr* GetFuncList() { return mp_func_list; } int main() { FuncPtr* p = GetFuncList(); for (int i = 0; i < MAX_OP_COUNT; ++i) { cout << (*p[i])(5, 4) << endl; // Use correct syntax to call function through pointer } return 0; } ```
지금 가입하면 모든 질문의 답변을 볼 수 있어요!