我必须int&在头文件中的现有函数定义中添加一个默认参数(例如iNewArgument):
初始化最后一个参数以使其采用默认值的语法是什么?
..
virtual int ExecNew
(int& param1, int& RowIn,int& RowOut, char* Msg = '0',
bool bDebug=true, int& iNewArgument = NULL ) = 0 ;
.
.
Run Code Online (Sandbox Code Playgroud)
NULL为#defined为0
错误:默认参数:无法转换
int为int&
您的示例表明您正在创建虚拟功能.虚拟(特别是纯)函数中的默认参数不是一个好主意,因为在调用重写函数时不会考虑它们.
struct A {
virtual void f(int = 4711) = 0;
};
struct B : A {
virtual void f(int) { /* ... */ }
};
Run Code Online (Sandbox Code Playgroud)
现在,如果有人调用f一个B对象,他将不得不提供参数 - 不使用默认值.您必须复制派生类中的默认参数,这会创建丑陋的冗余.相反,您可以使用非虚拟接口模式
struct A {
void f(int a) {
int out;
f(a, out);
}
void f(int a, int &out) {
doF(a, out);
}
protected:
virtual void doF(int a, int out&) = 0;
};
Run Code Online (Sandbox Code Playgroud)
用户现在可以f使用一个,并且使用两个参数调用他调用函数的任何类类型,并且实现者A不必担心默认参数.通过使用重载而不是默认参数,您不需要围绕左值或临时值.