2016-03-08 127 views
1

我有一个问题:qt C++新的类似方法。我是否重载方法,编写新方法或使用默认参数?

我有一个巨大的C++程序,我必须适应新的需求。在节目中我有一个现有的方法,使用约20倍于我的代码

void doSomething(); 

现在我需要在我的程序中使用非常相似的新方法(一次或两次使用)。当设置标志时,这种新方法需要做类似的事情。我有几个想法如何编码。有没有最好的解决方案/风格来做到这一点?

想法1: 写另一个方法,它几乎与doSomething()相同。但是这意味着复制代码。

void doSomethingElse(); 

理念2: 重载我的方法(但仍重复的代码)

void doSomething(bool myFlag); 

思路3: 使用默认参数,包括在老方法DoSomething的if语句( )。

void doSomething(bool myFlag=false); 

有没有最好的解决方案呢?还是更好的解决方案?

感谢老方法,你

Merchaldes

+0

这是一个通用的OO/Architecture/C++ Style类型的问题,最好的答案是有点依赖于上下文/环境,其中在这个问题中确实没有提供。建议让一些C++书籍进入C++编程的内容,比如Scott Meyers的书籍,或者搜索网络进行那些讨论。 – CarlH

+0

代码重复不一定是坏的 - 它取决于代码的意图。也就是说,如果X和Y是相同的,并且永远都是相同的,不管X和Y的内容如何,​​那么这可能是一个错误的重复。如果代码重复复制 - X和Y刚刚恰好相同*现在*代码重复可能是最好的解决方案。过早地“不重复”(“DRIED”?)代码可能会弄得乱七八糟。 – molbdnilo

回答

2

独立的通用部分(S)为民营/保护的辅助方法,(S)。然后编写你的两个公共方法,以便他们调用辅助方法。

所以基本上你的选择1,除非不重复代码。或者可能是选项2,如果重载是有意义的,而不是引入新的方法名称(在这种情况下,请参见下文)。

使用不同名称的方法明确了每个调用的作用,因为方法名称直接表示它,而不需要检查arg实际意味着什么缺失/真/假。但是,如果你想用可选的arg和单一方法(至少在公共和受保护的接口中)来做到这一点,最好声明一个具有描述性值名称的枚举(如果需要第三个值,则很容易添加,不像布尔)。这是Qt通常的做法(example)

0

您可以将不同部分外包给私人帮手功能。然后用所需的参数重载你的函数。