C++에서 프로토 타입 (매개 변수 개수, 유형 및 constness)이 다른 경우에도 기본 클래스의 멤버 함수는 의 파생 클래스 함수에 의해 재정의됩니까? 많은 웹 사이트에서 기능 프로토 타입이 동일해야한다고 말하기 때문에 이것은 바보 같은 질문입니다. 하지만 왜 아래 코드가 컴파일되지 않습니까? 상속의 아주 간단한 경우입니다.C++ 상속 및 함수 재정의
#include <iostream>
using std::cout;
using std::endl;
class A {};
class B {};
class X
{
public:
void spray(A&)
{
cout << "Class A" << endl;
}
};
class Y : public X
{
public:
void spray(B&)
{
cout << "Class B" << endl;
}
};
int main()
{
A a;
B b;
Y y;
y.spray(a);
y.spray(b);
return 0;
}
GCC는 그래서 '숨어'라고
error: no matching function for call to `Y::spray(A&)'
note: candidates are: void Y::spray(B&)
는 정교한 설명 같은 문제에 대해 말한다 C++ FAQ를 얻었다 :) http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq- 23.9 – legends2k
서명이 동일해야한다고 말하는 것은 약간 위험합니다. 서명은 이름 맹 글링과 링크의 기초입니다. 서로 다른 클래스의 두 멤버는 다른 멤버를 재정의하더라도 항상 다른 서명을가집니다. "더 이상 동일한 매개 변수 유형, 이름 및 constness"라고 말하는 것이 좋습니다. 더 이상 말하지 않아도됩니다. –
@litb : 명확히 해 주셔서 감사합니다! 나는 '프로토 타입'이 적당한 단어라고 생각한다. 나는 질문에서 그것을 바꿨다. :) – legends2k