일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그램 외주
- 게임 개발
- 상호링크
- 포커
- 판매
- holdem
- 포커게임
- 카일레라
- 고스톱
- MAME
- 게임 외주
- 맞고
- 온라인게임
- 윈윈전략
- 윈윈
- 서치아이
- 틀린그림찾기
- 옥션소송
- 영어단어게임
- 옥션해킹
- Mame32
- 맞고게임
- 카일레라서버
- 틀린그림 찾기
- 티스토리 초대장
- 보드게임
- 영어단어
- 홀뎀
- 프로그램 개발
- 써치아이
- Today
- Total
kyuseo의 게임 프로그래밍
암묵적으로 상속받은 부모의 함수 감춤 현상과 해결책 본문
개요.. |
부모 클래스와 자식 클래스가 같은 함수의 이름을 사용하면 발생하는 암묵적으로 상속받은 부모 클래스의 함수 감춤 현상과 해결책을 알려드립니다.
핵심내용은 using 키워드의 사용입니다.
오류 내용 |
class CParent { public: CParent(){}; virtual ~CParent(){};
virtual void Fun( int n ) { printf( "CParent Fuc Int %d\n", n ); }
virtual void Fun( char* sz ) { printf( "CParent Fun String %s\n", sz ); } };
class CChild : public CParent { public: CChild(){}; virtual ~CChild(){};
void Fun( double dbl ) { printf( "CChild Fun Double %f\n", dbl ); } };
int main(int argc, char* argv[]) { CParent parent; CChild child;
parent.Fun( 100 ); parent.Fun( "Hi" );
child.Fun( "Hi" ); //*** 함수명 중목으로 인한 부모의 함수 감춤현상이 일어나서 컴파일시 오류 발생 child.Fun( 100 ); //*** 위와 같은 이유로 Fun( int n ) 호출이 아닌 Fun( double dbl ) 을 호출하게 된다.
child.Fun( 9.11 );
return 0; } |
해결책 |
class CParent { public: CParent(){}; virtual ~CParent(){};
virtual void Fun( int n ) { printf( "CParent Fuc Int %d\n", n ); }
virtual void Fun( char* sz ) { printf( "CParent Fun String %s\n", sz ); } };
class CChild : public CParent { public: using CParent::Fun; //***** 1.using 명령어를 이용하여 부모의 Fun 함수를 자식에서도 이용한다고 명기한다.
CChild(){}; virtual ~CChild(){};
void Fun( double dbl ) { printf( "CChild Fun Double %f\n", dbl ); } };
int main(int argc, char* argv[]) { CParent parent; CChild child;
parent.Fun( 100 ); parent.Fun( "Hi" );
child.CParent::Fun( "Hi" ); //***** 2.명확하게 부모의 Fun 함수를 호출한다. child.Fun( "Hi" ); child.Fun( 100 ); child.Fun( 9.11 );
return 0; } |