수퍼 클래스의 함수 오버로드를 방지하는 C++ 표준이 있습니까?수퍼 클래스의 함수 오버로드
class A { // super class
int x;
public:
void foo (int y) {x = y;} // original definition
};
class B : public A { // derived class
int x2;
public:
void foo (int y, int z) {x2 = y + z;} // overloaded
};
내가 쉽게 B::foo()
를 호출 할 수 있습니다 :
B b;
b.foo (1, 2); // [1]
을하지만 ...
B b;
b.foo (12); // [2]
A::foo()
를 호출하려고하면 ..
클래스의 쌍을 시작으로 . 컴파일러 오류가 발생합니다.
(210)test.cpp: In function 'void bar()':
test.cpp:18: error: no matching function for call to 'B::foo(int)'
test.cpp:12: note: candidates are: void B::foo(int, int)
그냥 과부하가되지 않도록 내가 모르는 뭔가가되지 않았다 있는지, 내가 B
의 함수의 이름을 변경 만들려면 :
class B : public A {
int x2;
public:
void stuff (int y, int z) {x2 = y + z;} // unique name
};
그리고 지금은 두 번째 예제를 사용하여 A::foo()
를 호출 할 수 있습니다 .
이 표준인가요? g ++를 사용하고 있습니다.
원래 멤버 함수를 숨기기 취소합니다. –
+1 - Scott Meyers의 Effective C++ 항목에서 자세히 설명되어 있습니다. Item 33 : 상속 된 이름은 숨기지 마십시오. –