Che*_*eng 8 c++ oop overloading
有时,我觉得方法超载可能会造成混乱.
class a {
public:
void copy(float f);
void copy(double d);
};
Run Code Online (Sandbox Code Playgroud)
a me;
me.copy(1.2); // Not obvious at the first sight on which version we are calling.
Run Code Online (Sandbox Code Playgroud)
对此的解决方法是.
class a {
public:
void copyFloat(float f);
void copyDouble(double d);
};
Run Code Online (Sandbox Code Playgroud)
但是,拥有不同名称的方法,执行相同的功能似乎也不是一个好主意.我可以知道,您考虑什么,在方法重载或具有不同命名的方法中进行选择?
GMa*_*ckG 17
确实超载.
好吧,所以它不是"显而易见"哪个函数被调用(可论证)......那又怎么样?你不关心它可以采取不同类型的参数,它只需要做它的事情.如果你根据不同的重载有不同的行为,你就滥用了重载,没有指出它们中的缺陷.
滥用重载的一个例子:
// good:
struct has_properties
{
void property1(float); // set property1, which happens to be a float
void property2(int); // set property2, which happens to be an int
};
// bad:
struct has_properties
{
void property(float); // set property1, abusing that it's a float
void property(int); // set property2, abusing that it's an int
};
Run Code Online (Sandbox Code Playgroud)
希望你在这里看到问题.如果两个函数具有相同的名称,则它们应该执行相同的操作.
更好的是,如果您只是尝试允许在不同类型上操作的可能性,只需使用模板即可.(这可能是一种超载的形式.)