我有一个现有的方法(或一般的函数),我需要增加额外的功能,但我不想在代码的其他地方破坏该方法的任何使用。例子:
int foo::bar(int x)
{
// a whole lot of code here
return 2 * x + 4;
}
在代码库中被广泛使用。现在我需要将 4 变成一个参数,但是任何已经调用 foo::bar 的代码仍然应该收到它所期望的。我是否应该扩展并重命名旧方法并将其包装成一个新方法,例如
int foo::extended_bar(int x, int y)
{
// ...
return 2 * x + y;
}
int foo::bar(int x)
{
return extended_bar(x,4);
}
或者我应该在头文件中声明一个默认参数,比如
int bar(int x, int y=4);
并且只是扩展功能
int foo::bar(int x, int y)
{
// ...
return 2 * x + y;
}
每个变体的优点和缺点是什么?