【发布时间】:2013-07-12 08:27:40
【问题描述】:
我有一个关于方法重载和继承的问题。一世 有以下程序:
class Face {};
class Point {};
typedef double Real;
class Func
{
private:
const char *m_name, *m_desc;
public:
Func(const char *name,
const char *desc) : m_name(name), m_desc(desc) {}
virtual Real value(Face &f) = 0;
Real value(Point &p) {return 0.;}
virtual ~Func() {}
};
class QuadFunc : public Func
{
public:
QuadFunc() : Func("quad", "Quadratic") {}
Real value(Face &f) override {return 0.;}
};
int main(int argc, char **argv)
{
QuadFunc func;
Face f;
Point p;
func.value(f);
// why doesn't this work?
func.value(p);
return 0;
}
遗憾的是,g++ 告诉我“没有匹配的函数可以调用‘QuadFunc::value(Point&)’”。就我而言,如果我打电话 QuadFunc::value(Point&) 调用应该被重定向到父类 Func。 如果我将 value(Point &p) 重命名为 p_value(Point &p) 并改为调用该方法,这确实有效。我能以某种方式让重载的方法按预期工作吗?
【问题讨论】:
-
查找“C++ 名称隐藏”。快捷方式:在
QuadFunc中写入using Func::value;。 -
已删除我的答案...你是对的,它不会有帮助
标签: c++ inheritance overloading