我很惊讶以下代码在VS2005中编译时没有任何抱怨,因为在实现中对Bar()的调用使我停下来并想知道如何消除歧义。
class Foo
{
public:
void Bar(int param = 0);
private:
void Bar();
};
哪里:
void Foo::Bar(int param)
{
// do something
return Bar();
}
谁能启发我?
编辑:
天哪!
立即意识到我的理解上的空白...
我的实际标题是
class Foo : public IFoo
{
public:
void Bar(int param);
private:
void Bar();
};
class IFoo
{
public:
virtual void Bar(int param = 0) = 0;
};
这与我最初发布的内容不同。我以为是。
最佳答案
首先,您需要使用“void Foo::Bar(int paaram)you do not need the
return”方法签名。
也可以使用默认参数与argumant一起使用。
因此,调用bar()
编译器可以调用(1)或(2),因为它们都同等有效。那么编译器要做什么?它所能做的就是发出一个错误。
class Foo
{
public:
void Bar(int param = 0); (1)
private:
void Bar(); (2)
};
void Foo::Bar(int param) (3)
{
// do something
Bar();
}
关于c++ - 重载的方法带有可选且无参数:为什么没有歧义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18031479/