#include<iostream>
using namespace std;
class AAA
{
public:
void Show(int n)
{
cout<<"called Show(int n)"<<endl;
}
};
class BBB : public AAA
{
public:
void Show(int n, int m)
{
cout<<"called Show(int n, int m)"<<endl;
}
};
int main(void)
{
BBB b1;
b1.Show(3);
b1.Show(3,5);
return 0;
}
------------------------------------------
BBB 클래스에 Show(int n)과 Show(int n, int m)이 오버로딩 된 것 같은데
b1.Show(3); 에서 에러가 난다.
BBB::Show 함수는 1개의 매개 변수를 사용하지 않는단다.
근데 b1.AAA::Show(3); 이라고 하면 잘돌아간다.
(혹은 BBB 클래스에 using AAA::Show; 선언을 해주면 된다)
오버라이딩 개념과 혼란이 오는 것 같다 =_=...
-------------------------------------------------
c++ 에서는 상속을 했다고 해서 오버로딩을 자동적으로 해주지 않습니다
기초클래스와 유도클래스는 일단 다른 네임스페이스고 네임스페이스는 말그대로
이름만 가지고 구분을 하니까 오버로딩된 함수 시그니처에 상관없이 하이딩이 돼요.
그래서 항상 오버로딩이 상속과 연관됐을땐 using CBase::operator=; 또는
그냥 CBase::operator=; 이렇게 유도클래스에 선언해주면 됩니다.
'C++ > 공개글' 카테고리의 다른 글
가상함수는 언제 사용하는가 (0) | 2013.01.26 |
---|---|
객체와 일반자료형의 반환과 참조 (0) | 2013.01.26 |
정의하지 않아도 자동으로 만들어지는 4가지 함수 (0) | 2013.01.25 |
가상함수는 어디에 필요한가? 왜 필요한가? (0) | 2013.01.25 |
cout, cin, endl (0) | 2013.01.25 |