我知道以下内容适用于VC ++ 12,所以这就是我一直在做的事情:
class IBase
{
virtual void Method(int param = 0) = 0; // default here
}
class Derived
{
void Method(int param = 0); // default here
}
void Derived::Method(int param /*= 0*/) // no default here
{
// do something
}
标准,最佳做法或经验是否建议采用其他方式,或者可以吗?默认情况下应该只在接口类/派生类中,还是两者都有?为什么?
答案 0 :(得分:2)
最佳做法是将默认参数放在声明(Header文件)中,并在源文件中 - 忘记默认参数。你这样做是正确的。这样,此函数的所有用户都可以看到默认参数,并且可以选择不提供一个。
如果将默认参数放在定义中,则使用默认参数(意味着不提供一个参数)的所有其他翻译单元将导致编译错误。
从继承角度来看,不保留默认值。使用的默认值来自用于调用函数的指针类型(基类或派生类型)。所以它真的归结为你的用例。