"Addition"两个类
"Addition" of two classes
我一直在以一种相当粗糙的功能方式进行一些动态系统模拟,目前正在尝试弄清楚 cpp 对象可以为我的代码带来什么。更具体地说,我正在考虑以下结构:
我想通过一个抽象类来指定动态系统,比如"DynSys",用一个纯粹的虚拟方法指定动力学(比如"能量"等)。一旦我从 DynSys 派生了两个具体类,我想对它们的实例进行"叠加",以创建一个新的 DynSys 对象,该对象返回两个相应动态成员函数的相加。这可能吗?例如:
DynamicHole Blackhole; // DynSys derived
DynamicDisc Disc; // DynSys as well
vector state; // eg a dynamical array of numbers
Blackhole.energy(state); // returns A(state)
Disc.energy(state); // returns B(state)
??class?? HoleDisc = DynamicAddition(&Blackhole,&Disc); // is a DynSys
HoleDisc.energy(state); // returns A(state)+B(state)
指向 DynSys 对象的指针将传递到模拟本身,因此结果必须是 DynSys 对象非常重要。
我看到一些使用"+"运算符或交朋友来添加类参数的结构。然而,这里的问题似乎是涉及方法加法的加法过程需要定义一个全新的具体类。
我看到了一个相当不优雅的解决方法,分别定义"核心"函数 A(状态,参数)、B(状态,参数),然后手动定义叠加类。我有很多叠加要做,所以我想知道是否有更好的方法来做到这一点。
如果我
理解正确,当您一起"添加"到 DynSys 时,您希望创建一些聚合。这是一个伪代码,可以适应您的需求:
class DynSysGroup : public DynSys
{
DynSys& m_a;
DynSys& m_b;
public:
DynSysGroup(DynSys& a, DynSys& b) : m_a(a), m_b(b) { }
// I'm guessing the signature of energy()...
void energy(vector& v)
{
// Get A(state) with m_a
// Get B(state) with m_b
// Do A(state) + B(state)
}
}
还有你上面的台词
??class?? HoleDisc = DynamicAddition(&Blackhole,&Disc); // is a DynSys
会成为
DynSysGroup HoleDisc(Blackhole, Disc);
当然,对于像m_a
和m_b
这样的参考,你需要确保你不会得到悬而未决的参考。也许您需要使用像 std::shared_ptr
这样的智能指针。
旁注:您可能想研究std::valarray
并更改energy()
的工作方式:与其将向量作为参数,不如简单地返回它(当然,如果适合您的设计)。
std::valarray DynSys::energy() const { return ...; }
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将fold表达式与std::一起用于两个元组
- 如何在C++中比较两个char数组
- 给定两个偶数,求出它们之间所有偶数的平方和
- 比较两个大小不等的映射c++
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 如何在for循环中包含两个索引值的测试条件
- 在声明中合并两个常量"std::set"(不是在运行时)
- "Addition"两个类