2

这是我上一个问题的后续问题:

在 C++ 类中使用复杂函数初始化 const 成员

简而言之,我有一个程序,它有一个 Grid 类,其中包含 3D 网格的属性。我希望这个网格的属性在创建后是只读的,这样类中的复杂函数就不会意外地弄乱网格(例如 if(bla = 10),而不是 if(bla == 10))等. 现在,这个问题在前面的讨论中已经得到了很好的回答:通过 create 函数调用初始化列表。

我的新问题来了。My Grid 有许多属性只是简单地描述了网格(网格点的数量、网格点的坐标等),在不同的对象之间重新分配它们是没有意义的。尽管如此,C++ 的基本教科书总是将带有大量参数的函数与糟糕的设计联系起来,但我需要它们才能拥有 const 成员变量。

是否有任何标准技术来处理此类问题?

4

1 回答 1

1

答案取决于您要保护的内容。

  1. 如果您试图确保类的用户不会无意中更改关键参数,那么做到这一点的方法是将这些成员声明为privateor并且仅在类实现之外完全需要它们protected时才提供getter。const

  2. 如果您试图确保实现Grid不会更改这些值,那么有几种方法可以做到这一点。一种简单的方法是创建一个只包含这些参数的子类,然后答案看起来就像 1。另一种方法是声明它们const,在这种情况下,它们必须在Grid构造实例时初始化。

如果答案是 2,那么还可以采取一些其他措施来防止无意中更改临界值。在您编写和测试类实现期间,您可以暂时const对关键参数使用固定的虚拟值,以确保您编写的其他函数不能更改这些值。

if (i=7) ...当您打算编写时,另一个避免具体错误的技巧if (i == 7) ...是始终将常量放在第一位。也就是写if (7 == i) ...。此外,任何体面的编译器都应该能够为此类错误标记警告——确保您通过打开编译器提供的所有警告和错误报告来利用该功能。

于 2014-08-03T16:12:49.093 回答