6-10 万有引力 - C/C++ 操作符重载

6-10 万有引力 - C/C++ 操作符重载

分数 15
作者 海洋饼干叔叔
单位 重庆大学

Particle类型用于表示处于三维空间中的质点,其包括如下成员:① 三个浮点数成员x、y和z表示质点在三维空间中的坐标;② 浮点数成员mass表示质点的质量;③ 接受空间坐标和质量参数的构造函数;④ 自定义operator-()操作符函数用于计算两个质点间的万有引力,即表达式p1 – p2调用执行p1的operator-()操作符函数,计算质点p1和p2间的万有引力。

万有引用公式F = GMm/r²中,万有引力常数G = 6.67×10-11N·m²/kg²。
请依据上述描述,设计Particle类,使得下述代码能正常执行。
注意:天文数字都很大,建议浮点数全部采用long double类型。

裁判测试程序样例:

#include <iostream>
#include <cmath>
using namespace std;

//在此处定义Particle类及其重载operator+()操作符函数

int main()
{
    long double x, y, z, mass;
    cin >> x >> y >> z >> mass;
    Particle p1(x,y,z,mass);
    cin >> x >> y >> z >> mass;
    const Particle p2(x,y,z,mass);

    long double force = p1 - p2;
    printf("Gravity between two objects = %.1Lf N",force);
    return 0;
}

输入样例:

0 0 0 5.965e15
0 0 38400000 7.342e14

输出样例:

Gravity between two objects = 198101.7 N

说明:输入输出中的所有数据均为标准单位,坐标为米,质量为kg。

请注意:函数题只需要提交相关代码片段,不要提交完整程序。

解题代码

long double G = 6.67e-11;
class Particle
{
public:
    long double p_x, p_y, p_z, p_mass, result;
    Particle(long double x, long double y, long double z, long double mass);
    long double operator-(const Particle& p2)
    {
        long double r;
        //计算两质点间的距离 r
        r = pow(this->p_x - p2.p_x, 2) + pow(this->p_y - p2.p_y,2) + pow(this->p_z - p2.p_z, 2);
        this->result = G * this->p_mass * p2.p_mass / r;
        return this->result;
    }
};
Particle::Particle(long double x, long double y, long double z, long double mass)
{
    p_x = x;
    p_y = y;
    p_z = z;
    p_mass = mass;
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值