C++ 科学仿真中正确的类成员访问
我目前正在开发一个程序,一个科学模拟,具有以下结构(第一级-逻辑分组,第二级-实现类,第三级-实现子类):C++ 科学仿真中正确的类成员访问,c++,performance,for-loop,C++,Performance,For Loop,我目前正在开发一个程序,一个科学模拟,具有以下结构(第一级-逻辑分组,第二级-实现类,第三级-实现子类): 输入数据 示例 参数(抽象基类,声明虚拟函数) ParModel1 ParModel2 物理模型 模型(抽象基类,声明虚拟函数) Model1 Model2 模拟 模拟 Model子类(例如ModelX)定义了虚拟计算(intx)函数中的某些算法,代表待描述的物理模型x。此计算中使用的参数将由示例对象和相应的ParModelX对象提供。 模拟类通常知道如何处理模
- 输入数据
示例
(抽象基类,声明虚拟函数)参数
ParModel1
ParModel2
- 物理模型
(抽象基类,声明虚拟函数)模型
Model1
Model2
- 模拟
模拟
Model
子类(例如ModelX
)定义了虚拟计算(intx)
函数中的某些算法,代表待描述的物理模型x。此计算中使用的参数将由示例
对象和相应的ParModelX
对象提供。
模拟
类通常知道如何处理模型
,并最终将对给定的x
执行计算(通过调用公共计算(int x)
函数)。。。在biiigfor
循环中
我们接近实际问题。。。在每次迭代期间,将执行由ModelX
定义的计算,因此需要访问Sample
和ParModelX
对象的各种参数
由于模拟
类仅触发提供的模型
的公共计算功能,因此只有样本
和参数
必须与模型
通信
我应该
private
并提供了get
-功能?(我读到严重依赖getter/setter可能是设计有缺陷的标志。太多的get函数调用可能是丰富的for
循环中的一个问题,还是分别是“糟糕的风格”const
(它们不需要更改!),以便“Model”可以在不调用函数的情况下访问它们?(在我看来,这不是一种好的风格…)模型
构造函数从给定的样本
和参数
对象中提取参数,并将它们存储在自己的成员中,以便快速访问(这将使参数
类冗余!)friend
样本
和参数
(等)与相应的模型
s我关心的是速度(即使它在我的特定计算中可能并不重要,我想知道什么是好的编程风格!)和我的程序结构。一、 例如,不希望模型与模拟/计算过程混合。输入数据和模型的分离对我来说似乎很好,因为一个模型可能有多个参数集…所有这些都取决于很多情况,因此请注意以下一般考虑事项 只要你不知道你正面临性能问题,我肯定会支持结构良好的设计而不是性能优化。如果你需要回到这段代码,例如,如果你需要以某种方式扩展它,你会感谢你自己。将数据结构与操作它们的对象分离显然是一个很有价值的想法。引入常量值,希望获得更好的性能,同时牺牲在计算中使用不同值集的能力,听起来是个坏主意。就个人而言,我喜欢getter和setter,因为它们提供了访问数据的接口,同时抽象了数据在内部的表示方式。我不期望它们会对性能造成很大的影响,它们甚至可能被编译器使用“”。
friend
关键字是一个访问修饰符,并且(除了某些特定于编译器的黑魔法)可能不会对性能产生太大影响——我只在单元测试的上下文中使用过它
在考虑您的场景中的性能瓶颈时,我的直觉告诉我,要注意像按值传递大数据结构和不必要的重新计算之类的事情,而不是重用中间结果。如果你真的对性能洞察感兴趣,停止猜测,抓住其中一个,开始测量 “糟糕的设计,因为所有成员都需要getter?性能问题,因为在一次迭代中多次调用getter?”对不起,这是胡说八道。谁告诉你的?@πάνταῥεῖ 实际上我没有被告知,但在很多问题和链接的评论中,我读到基于get和set函数的使用的类设计在这一点上可能被认为是糟糕的(考虑到封装等)。到目前为止,我至少在一定程度上同意这一点。现在,如果GET/SET是必需的,那么它并没有错。我只是想知道(我的问题)它们是否在我的情况下,或者是否有更好的选择我还没有考虑。@πάνταῥεῖ 那么,您认为我应该为所有与模拟相关的成员(实际上都是成员)编写getter吗?如果你真的想一直使用纯的,你可以放弃getter/setter函数。尽管考虑一些类似生成的类,它们甚至有意识地拒绝显示为POD结构。这完全取决于在系统中传递参数数据的实际需求,以及构建块中的接口类型。(临屋区)