声明一个圆,属性为圆心坐标和半径,定义两个友元普通函数分别计算两个圆的圆心间的距离和两个圆的面积之差。


声明一个圆,属性为圆心坐标和半径,定义两个友元普通函数分别计算两个圆的圆心间的距离和两个圆的面积之差。


友元类:友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。

#include<iostream>
#include <math.h>
using namespace std;
class Circle{
private:
 double x;
 double y;
 double r;
public:
 Circle(double x,double y,double r){
 this->x=x;this->y=y;this->r=r;};
 friend double circleDistance(Circle circle01,Circle circle02);
 friend double areaDistance(Circle circle01,Circle circle02); 
};
//圆心距离 
double circleDistance(Circle circle01,Circle circle02){
 double dis = sqrt(pow(fabs(circle01.x- circle02.x), 2) + pow(fabs((circle01.y - circle02.y)), 2));
 return dis;
} 

//面积之差 
double areaDistance(Circle circle01,Circle circle02){
 
 double a = fabs(3.14*pow(circle01.r, 2)-3.14*pow(circle02.r, 2));
 return a;
} 

int main(){
 Circle  circle01(1.5,2.5,1);
 Circle  circle02(3,2.5,2);
 cout<<"圆心距离:"<<endl;
 cout<<circleDistance(circle01,circle02);
 cout<<endl<<"面积之差:"<<endl;
 cout<<areaDistance(circle01,circle02);
}

两圆心距离公式:
d = sqrt(pow(fabs(circle01.x- circle02.x), 2) + pow(fabs((circle01.y - circle02.y)), 2))
圆的面积公式:
s = Pi * r * r.
修改:可从键盘读取两元的圆心坐标和半径。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验内容: 一、定义一个名为Circle的,位于shape包中。要求如下: (1) 该需要描述在二维坐标系中的位置,圆心的横、纵坐标值均取整数;描述半径,取双精度型。 (2) 无参构造方法将圆心坐标设为坐标点,半径设为1.0;有参构造方法需要根据参数值设置圆心坐标半径值。 (3) 提供一个计算面积的方法double getArea()。 (4) 提供一个判断当前对象与参数对象是否相交的方法(相交方式见下图): boolean isIntersected(Circle another) (5) 提供一个判断当前对象是否包含参数对象的方法(包含方式见下图): boolean contains(Circle another) (6) 提供一个判断当前对象与参数对象的大小关系的方法(判断依据是半径半径之差的绝对值小于0.0001认为相等;返回负数表示当前对象小,0表示相等,正数表示当前对象) int compareTo(Circle another) (7) 提供返回当前的字符串的方法,格式为:[Circle(x,y)-raduis] String toString() 二、定义一个包含main方法的TestCircle,位于shape包中。要求如下: (1) main方法中调用以下方法。 (2) 编写静态方法createArray,生成位置和大小均随机的10个对象,置于数组中。 (3) 编写静态方法sort对这10个对象进行升序排序,并输出。 (4) 编写静态方法computeArea计算这10个中互不相交和包含面积之和。 提交要求:打包为可以执行的JAR文档,其中要包含源程序文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值