C++ function overloading, inheritance -
2008.07.03 14:13 Edit
오늘의 점심블로깅은 간만에 코딩 이야기입니다.
며칠전에 인터페이스 새 버전을 디자인하다가 C++을 다시 공부하는 사태-_-가 벌어져서 기록을 남겨둡니다; 어찌되었던 저의 Job position은 C++ 개발자인데 말이에요 ㅎㅎ
C++을(혹은 학교에서 배우신 분이라면 Function Overloading을 들어봤을텐데요. 한 Class안에서 다른 파라미터를 받는 경우 다른 함수가 불리도록 한 것입니다
- class A
- {
- public:
- int check(int a, int b)
- {
- return a+b;
- }
int check(int a, int b, int c) - {
- return a+b+c;
- }
- };
와 같이 하면 class A에 대해서 int 파라미터 두개를 넘기든 세개를 넘기든 그 합을 얻어낼 수가 있습니다.
그런데 class A를 상속하는 class B에 대해서 check라는 함수로 다른 파라미터를 받도록 define을 하면, 자연히 A의 함수들도 쓸 수 있으면서 overloading이 될 줄 알았는데;
- class B : public A
- {
- public:
- int check(int a, int b, int c, int d)
- {
- return a+b+c+d
- }
- };
B의 instance를 만들어서 check(1, 2)를 던저 보니 컴파일 에러를 냅니다.
error: no matching function for call to ‘B::check(int, int)’
라는 군요!
상속을 하면서 그 함수명을 override해버려서 그런 모양이더라구요
살짝 구글링을 해보니, 그렇게 쓰고 싶으면 using A::check을 붙여야 한다고 하네요. 아래처럼요
- class B : public A
- {
- public:
- int check(int a, int b, int c, int d)
- {
- return a+b+c+d
- }
- using A::check;
- };
이상, 삽질기 끝;
덧, Java에서는 상속에서도 overloading이 잘 됩니다 @_@/
덧2, C++ 개발자가 몇명이나 이 블로그에 올까요 -_-; 손?

- C++ , Function Overloading , Inheritance , 상속
C++배우고있는 학생 손! ㅋㅋ
과제하던중에 위에와 같은문제로 해맷다는..
분명 부모클래스에서 함수를 선언했는데
파생클래스에서 함수를 오버로딩한다음에 다른 함수에서 오버로딩한 부모클래스함수를 사용할려고했드니만
컴파일에러가 .. OTL
나도 2005년까지는 C++ 개발자였다는.. 2006년에 석사 CG 플젝을 마지막으로 접은 코딩;;
전 C++ 코딩 x라 하고 있죠 ㅋㅋ
업무에서 C++ 안써본지가 수년 된거 같아요 @.@
p.s1 오랜만입니다 @.@
p.s2 근데 이 댓글 창.. 혹시 사파리에서 테스트 해보셨어요?
사실 개발자는 아니고 '관리자'라서 디자인(이라 말하고 문서라고 읽는) 일만 하지만..;;
그래도 젊을 때 고생이라고, 직접 부딪혀보고 싶어서 발버둥치다보니,
얼마전에는 core algorithm과 unit test에 대한 prototype을 작성해서 업체에 줬음! +_+
아마 좀 극성스러운 갑으로 보였으려나 =ㅅ=
게다가 due 없이 일을 하다보니, 내 깐에 알흠다운 코드 좀 써 본다고
template, op. overloading, template specialization으로 잔뜩 치장하고
논문에 나온 수식이랑 똑같이 생긴 코드 만들고 히죽거렸는데, 아마 변태로 보였을꺼야. ㄷㄷㄷ
근데 요즘엔 또 DB 디자인 같은거 하고 있어. 이거 없어진 전산학개론도 아니고 ㅡ.ㅜ
음, A::sum이 아니고 A::check를 의도하셨던 거겠지요?;;
그나저나 C++에서는 저런 특성이 있는지 몰랐군요..