gpt4 book ai didi

c++ - 处理 C++ 类中难以避免的大量 const 成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:47 27 4
gpt4 key购买 nike

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

Initialize const members using complex function in C++ class

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

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

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

最佳答案

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

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

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

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

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

关于c++ - 处理 C++ 类中难以避免的大量 const 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106374/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com