【问题标题】:qt c++ new similar method. Do I overload method, write new method, or use default parameter?qt c++ 新的类似方法。我是重载方法、编写新方法还是使用默认参数?
【发布时间】:2016-06-22 16:01:01
【问题描述】:

我有一个问题:

我有一个庞大的 C++ 程序,我必须适应新的需求。在程序中,我有一个现有方法,在我的代码中使用了大约 20 次

void doSomething();

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

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

void doSomethingElse();

想法 2: 重载我的方法(但仍然重复代码)

void doSomething(bool myFlag);

想法 3: 使用默认参数并在旧方法 doSomething() 中包含 if 语句。

void doSomething(bool myFlag=false); 

有没有最好的解决方案?或者更好的解决方案?

谢谢

梅尔卡德斯

【问题讨论】:

  • 这是一个一般的 OO/Architecture/C++ 风格的问题,最好的答案是有点依赖于上下文/环境,这个问题实际上没有提供。建议购买一些介绍 C++ 编程细节的 C++ 书籍,例如 Scott Meyers 的书籍,或者在网上搜索此类讨论。
  • 代码重复不一定是坏事——它取决于代码的意图。也就是说,如果 X 和 Y 相同,并且应该永远和永远相同,无论 X 和 Y 的内容如何,​​那么这可能是一个糟糕的重复。如果代码是巧合地重复 - X 和 Y 恰好是相同的现在 - 那么代码重复可能是最好的解决方案。过早地“不重复”(“DRIED”?)代码可能会变得一团糟。

标签: c++ qt methods overloading default-parameters


【解决方案1】:

将旧方法的公共部分分离为私有/受保护的辅助方法。然后编写您的两个公共方法,以便它们调用辅助方法。

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

使用不同命名的方法明确了每个调用的作用,因为方法名称直接说明了它,而无需检查缺失/真/假参数的实际含义。但是,如果您无论如何都想使用可选的 arg 和单一方法(至少在公共和受保护的接口中),最好声明一个具有描述性值名称的枚举(另外,如果您需要第三个值,很容易添加,与布尔值不同)。这就是 Qt 通常所做的(example)

【讨论】:

    【解决方案2】:

    您可以将不同的部分外包给私有辅助函数。然后用所需的参数重载你的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2012-08-04
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多