ここで何が起こっているのか -- なぜこれはコンパイルされないのですか?
#include <iostream>
class Base {
void print(double d) {
std::cout << "Base: " << d << std::endl;
}
};
class Derived : public Base {
void print(std::string const & str) {
std::cout << "Derived: " << str << std::endl;
}
};
int main(int argc, char* argv[]) {
Derived d;
d.print(2.);
d.print("junk");
}
(MinGW と VC11 の両方で、 と同等のエラーが発生しNo conversion from double to std::string
ます。)
で印刷関数の名前を変更すると、Derived
正常にコンパイルされるため、明らかに何らかの方法Derived::print(string const &)
でマスキングされています。Base::print(double)
しかし、関数のシグネチャには引数の型が含まれているので、このマスキングはここで行う必要があるという印象を受けました。基本クラスのメソッドの場合、それは正しくありませんか?