如何将C++ ForceSolver类的函数计算结果传递给FrictionContact类
问题核心
你现有代码输出异常的根本原因是:子类对象创建后,没有先调用父类继承来的solveSystem()方法完成force变量的计算赋值,直接访问的force是未初始化的垃圾值。
由于你使用的是公有继承,父类ForceSolver的所有public成员(包括force变量、solveSystem()方法)都会被FrictionContact子类直接继承,不需要额外写值传递逻辑,只要保证force被计算完成后再使用即可。
实现方案
提供两种常用实现方式,按需选择即可:
方案1:显式调用计算方法
直接在main函数中使用printForce前,先调用继承来的solveSystem方法计算force值,修改后的main函数代码如下:
#include <iostream> // 记得引入两个类的头文件 int main() { FrictionContact contact; // 先执行父类继承的求解方法,计算得到force=10 contact.solveSystem(); std::cout << std::endl; // 换行分隔父类的输出 contact.printForce(); return 0; }
方案2:子类构造自动计算
如果希望force在子类对象创建后自动完成计算,不需要用户手动调用方法,可以在子类的构造函数中调用solveSystem(),修改后的FrictionContact类代码如下:
class FrictionContact : public ForceSolver { public: FrictionContact() { // 对象构造时自动执行force计算 solveSystem(); } void printForce(); }; void FrictionContact::printForce() { std::cout << "获取到的force值为:" << force; }
此时main函数不需要修改,直接运行即可得到正确结果。
内容的提问来源于stack exchange,提问作者B_M
相关产品推荐
相关产品推荐

