这是怎么回事——为什么不能编译?
#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)
。但我的印象是函数签名包括参数类型,所以这个掩码应该发生在这里。在基类方法的情况下这不正确吗?