티스토리 뷰
class Base { public: void Init(){printf("Base");} }; class Inheritance : public Base { public: void Init(int a) { printf("Inheritance %d", a); } };
int main(int argc, char **arv) { Inheritance inheritance; inheritance.Init(); return 0; }
위 코드는 컴파일 에러를 발생시킨다. 내가 이 코드를 작성한 의도는 함수 오버로딩이다. 즉, 같은 이름의 함수가 여러 개가 있고, 파라미터가 다르다면 다른 함수로 인식할거라고 생각한 것이다. 그런데, 같은 이름의 함수가 있을 경우, 자식 클래스의 함수만 유효하다.
int main(int argc, char **arv) { Inheritance inheritance; inheritance.Init(1); return 0; }위와 같이 코드를 수정하면, 정상적으로 동작한다. 하지만, Base클래스에 존재하는 Init은 사용할 수 없어진다.
int main(int argc, char **arv) { Inheritance Inheritance; inheritance.Base::Init(); return 0; }이렇게 바꾸면, Base 클래스의 Init함수를 사용할 수 있어진다. 명시적으로 Base클래스의 Init함수를 사용한다고 알려주지 않으면, 자동으로 Inheritance클래스의 Init함수를 호출 하는 것으로 인식하기 때문에 반드시 그렇게 해주어야만 한다. 전역 변수와 지역 변수의 이름이 같을 때, 전역 변수를 사용하려면 전역 변수의 이름 앞에 ::를 붙여주어야 하는 것과 같은 이유다.
'C++ > General' 카테고리의 다른 글
TCHAR to the rescue! (0) | 2008.01.11 |
---|---|
static을 이해하자 (3) | 2008.01.10 |
함수의 리턴 값의 주소를 사용하려 할 때 생기는 문제 (0) | 2008.01.10 |
C 프로그래머가 알아야 할 것들 - Chapter 7 어셈블리 (0) | 2008.01.10 |
C 프로그래머가 알아야 할 것들 - Chapter 6 자료 구조 (0) | 2008.01.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 게임개발포에버
- Ruby on Rails
- 임백준
- 루비 온 레일즈
- Rails
- 리버스 엔지니어링
- svn
- ftp
- MS-SQL
- 디버깅
- NDC2013
- EzShortcut
- ruby
- 루비
- TDD
- TraceRoute
- SQLite Spy
- 좋은 프로그래머
- 디자인 패턴
- c언어
- EasyExec
- 게임데브포에버
- 바로가기 프로그램
- 조엘 온 소프트웨어
- SDL
- 엘키
- perfmon
- 멀티스레드
- RoR
- CppSQLite
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함