[완료] C++에서 오버로딩에 관한 질문입니다.
글쓴이: binoopang / 작성시간: 금, 2009/01/09 - 1:34오전
안녕하세요 .. ^^
C++ 오버로딩에서 해깔리는 부분이 있어서 이렇게 질문 올립니다.
#include <stdio.h> void overloading(); void overloading(int a); int main() { overloading(); overloading(2); return 0; } void overloading() { printf("I have no argument\n"); } void overloading(int a) { printf("I have a argument : %d\n", a); }
위와 같이 코드를 짠 다음 실행하면 인자에 따라서 각기 함수가 호출 됩니다.
이런게 오버로딩이라고 알 고 있는데요 ..
이번에 클래스 상속을 공부하면서 이게 문제가 됩니다.
#include <stdio.h> class BASE{ public: int a; int b; BASE(int ax, int bx){ a = ax; b = bx; } void method(){ printf("This is Method\n"); } }; class overloading : public BASE { public: int c; overloading(int ax, int bx, int cx) : BASE(ax, bx){c = cx;} void method(int a){ printf("overloading??\n"); } }; int main() { overloading loading(10,5,2); loading.method(); loading.method(2); return 0; }
위와 같습니다. 클래스를 상속 받으면 원래 부모 클래스의 멤버들을 모두 가져오는 것으로 알고있습니다.
그럼 자식 클래스에서 부모 클래스에 있던 method()를 오버로딩하게 될 경우 원래 부모 클래스의 method()
는 없는 것으로 되는지 궁금합니다. 이건 오버로딩이 아니라 왠지 오버라이딩 같아서요 ..
물론 컴파일 하게 되면 loading.method()에 적합한 함수가 없다고 나옵니다 ㅠ
정말 궁금하네요 ..
Forums:
파생 클래스에서
파생 클래스에서 기반 클래스에 있던 멤버 함수를 하나라도 재정의하면 이름이 같은 모든 함수가 재정의되게 됩니다. 컴파일러에서도 경고를 띄워 줍니다. 자세한 내용은 Effective C++를 참고하세요.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
우선 이경우는
우선 이경우는 인자가 다르기 때문에 오버라이딩이 될 수가 없습니다.
그리고 오버라이딩이 의미있는 것은 동적바인딩을 했을 경우입니다.
마지막으로 오버로딩으로 자식클래스가 부모 클래스의 함수를 가리는 경우에는 loading.BASE::method();와 같이 함수 호출시에 부모 클래스의 스코프를 명시해줘야 합니다.
using BASE::method;
아 .. 그렇군요 ..
감사합니다 .. ^^
이제 알겠군요 ㅎㅎ
-------- 시그내쳐 ---------
열심히 열심히 열심히 ..
음악을 하는것 처럼!!
댓글 달기