C++ function overloading, inheritance -

오늘의 점심블로깅은 간만에 코딩 이야기입니다.

며칠전에 인터페이스 새 버전을 디자인하다가 C++을 다시 공부하는 사태-_-가 벌어져서 기록을 남겨둡니다; 어찌되었던 저의 Job position은 C++ 개발자인데 말이에요 ㅎㅎ

 

C++을(혹은  학교에서 배우신 분이라면 Function Overloading을 들어봤을텐데요. 한 Class안에서 다른 파라미터를 받는 경우 다른 함수가 불리도록 한 것입니다

  1. class A
  2. {
  3. public:
  4. int check(int a, int b)
  5. {
  6. return a+b;
  7. }

    int check(int a, int b, int c)
  8. {
  9. return a+b+c;
  10. }
  11. };

와 같이 하면 class A에 대해서 int 파라미터 두개를 넘기든 세개를 넘기든 그 합을 얻어낼 수가 있습니다.

 

그런데 class A를 상속하는 class B에 대해서 check라는 함수로 다른 파라미터를 받도록 define을 하면, 자연히 A의 함수들도 쓸 수 있으면서 overloading이 될 줄 알았는데;

  1. class B : public A
  2. {
  3. public:
  4. int check(int a, int b, int c, int d)
  5. {
  6. return a+b+c+d
  7. }
  8. };

B의 instance를 만들어서 check(1, 2)를 던저 보니 컴파일 에러를 냅니다.

 error: no matching function for call to ‘B::check(int, int)’

라는 군요!

상속을 하면서 그 함수명을 override해버려서 그런 모양이더라구요

살짝 구글링을 해보니, 그렇게 쓰고 싶으면 using A::check을 붙여야 한다고 하네요. 아래처럼요

  1. class B : public A
  2. {
  3. public:
  4. int check(int a, int b, int c, int d)
  5. {
  6. return a+b+c+d
  7. }
  8. using A::check;
  9. };

이상, 삽질기 끝;

 

덧, Java에서는 상속에서도 overloading이 잘 됩니다 @_@/

덧2, C++ 개발자가 몇명이나 이 블로그에 올까요 -_-; 손?

TAG
서비스 선택
댓글
로그인해주세요.
profile image
powered by SocialXE
Total : 10
  • profile image

    C++배우고있는 학생 손! ㅋㅋ

    과제하던중에 위에와 같은문제로 해맷다는..

    분명 부모클래스에서 함수를 선언했는데

    파생클래스에서 함수를 오버로딩한다음에 다른 함수에서 오버로딩한 부모클래스함수를 사용할려고했드니만

    컴파일에러가 .. OTL

    2010.11.15 00:41:15
  • profile image

    나도 2005년까지는 C++ 개발자였다는.. 2006년에 석사 CG 플젝을 마지막으로 접은 코딩;;

    2009.06.05 21:33:08
  • profile image

     전 C++ 코딩 x라 하고 있죠 ㅋㅋ   

    2008.07.05 13:05:04
  • profile image

    업무에서 C++ 안써본지가 수년 된거 같아요 @.@

     

    p.s1 오랜만입니다 @.@

    p.s2 근데 이 댓글 창.. 혹시 사파리에서 테스트 해보셨어요?

    2008.07.04 13:44:12
  • profile image

    사실 개발자는 아니고 '관리자'라서 디자인(이라 말하고 문서라고 읽는) 일만 하지만..;;

    그래도 젊을 때 고생이라고, 직접 부딪혀보고 싶어서 발버둥치다보니,

    얼마전에는 core algorithm과 unit test에 대한 prototype을 작성해서 업체에 줬음! +_+

    아마 좀 극성스러운 갑으로 보였으려나 =ㅅ=

    게다가 due 없이 일을 하다보니, 내 깐에 알흠다운 코드 좀 써 본다고

    template, op. overloading, template specialization으로 잔뜩 치장하고

    논문에 나온 수식이랑 똑같이 생긴 코드 만들고 히죽거렸는데, 아마 변태로 보였을꺼야. ㄷㄷㄷ

    근데 요즘엔 또 DB 디자인 같은거 하고 있어. 이거 없어진 전산학개론도 아니고 ㅡ.ㅜ

    2008.07.03 17:53:19
  • profile image

    음, A::sum이 아니고 A::check를 의도하셨던 거겠지요?;;

    그나저나 C++에서는 저런 특성이 있는지 몰랐군요..

    2008.07.03 15:36:24