【发布时间】:2022-02-02 21:32:42
【问题描述】:
我想知道下面代码中是否有减少重载函数(函数编辑)数量的方法。
class foo
{
public:
foo(int _a, char _b, float _c) : a(_a), b(_b), c(_c){};
void edit(int new_a);
void edit(char new_b);
void edit(float new_c);
void edit(int new_a, char new_b);
void edit(int new_a, float new_c);
void edit(char new_b, float new_c);
void edit(int new_a, char new_b, float new_c);
void info();
private:
int a;
char b;
float c;
};
这里是编辑功能的实现:
void foo::edit(int new_a)
{
a = new_a;
}
void foo::edit(char new_b)
{
b = new_b;
}
void foo::edit(float new_c)
{
c = new_c;
}
void foo::edit(int new_a, char new_b)
{
a = new_a;
b = new_b;
}
void foo::edit(int new_a, float new_c)
{
a = new_a;
c = new_c;
}
void foo::edit(char new_b, float new_c)
{
b = new_b;
c = new_c;
}
void foo::edit(int new_a, char new_b, float new_c)
{
a = new_a;
b = new_b;
c = new_c;
}
编辑功能可以让用户随意更改对象的参数。 但问题是,如果我们添加一个新参数,我们必须添加许多重载函数,我认为应该有更好的方法。
这里有 3 个参数,我们需要 7 个重载函数,但如果我们有 4 个参数(a、b、c 和 d),那么我们必须开发 14 个重载函数! 这就是为什么我认为应该有更好的方法。
谢谢。
【问题讨论】:
-
您可以将其设为成员函数模板,但除非您向我们展示这些
edit成员函数的实现,否则我们无法肯定地说/建议任何事情。跨度> -
假设 foo 类是一个联系人管理器,并且该类的每个对象都包含诸如(姓名、电话、电子邮件)之类的参数,并且编辑功能旨在更改这些参数,但您可能不想更改所有参数,也许您需要更改(电话和姓名)或仅更改(电话)或仅更改(姓名),以便您有不同的选项来更改参数。你明白我的意思了吗?
-
让编辑返回对
this的引用,这样你就可以链接它们:f.edit(1).edit(1.0);那么你就不需要组合重载。如果设置多个值需要依赖于两个参数的检查,则使用相同的方法,但edit返回一些执行检查的代理 -
如果我理解您对此代码的注释解释,任何对
edit()的多个参数调用与对edit()的多次调用具有相同的效果,每个调用都有一个参数?如果这是正确的,edit 你的问题可以更好地描述你正在解决的问题。 -
@meysamimani 请edit你的问题是完整的。
标签: c++ overloading