第七周项目 用友元函数求两点之间的距离

/*
 *Copyright(c) 2016, 烟台大学计算机与控制工程学院
 *All rights reserved.
 *文件名称:main.cpp
 *作    者:李德坤
 *完成日期:2016年4月8日
 *版本号:v1.0
 *
 *问题描述:求两点之间的距离
 *输入描述:两点坐标
 *输出描述:两点距离
 */
#include <iostream>
#include<cmath>
using namespace std;
class CPoint
{
private:
    double x;  // 横坐标
    double y;  // 纵坐标
 public:
    CPoint(double xx=0,double yy=0):x(xx),y(yy){}
    friend float getjuli(CPoint &p1,CPoint &p2);
};
int main()
{
    double x1,y1,x2,y2;
    float a;
    cout<<"请输入坐标:"<<endl;
    cin>>x1>>y1>>x2>>y2;
    CPoint t1(x1,y1);
    CPoint t2(x2,y2);
    cout<<"两点之间的距离为:";
    a=getjuli(t1,t2);
    cout<<a<<endl;
}
float getjuli(CPoint &p1,CPoint &p2)
{
    double a,b;
    a=(p1.x-p2.x)*(p1.x-p2.x);
    b=(p1.y-p2.y)*(p1.y-p2.y);
    return static_cast<float>(sqrt(a+b));
}

### 回答1: \u5706\u7c7b\u662f\u4e00\u4e2a\u7cbe\u786e\u7684\u6570\u5b66\u6982\u5ff5\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b9a\u4e49\u6765\u8fdb\u884c\u7edf\u8ba1\u3001\u8f93\u5165\u3001\u8f93\u51fa\u7b49\u64cd\u4f5c\u3002\u4e00\u822c\u8003\u8bd5\u4e2d\uff0c\u6700\u5e38\u89c1\u7684\u5706\u7c7b\u51fd\u6570\u6709\u56db\u4e2a\u53c2\u6570\uff1a\u5706\u5468\u3001\u5706\u5f27\u3001\u5706\u9762\u548c\u5706\u4f59\u3002 \u5728\u8f93\u5165\u548c\u8f93\u51fa\u65f6\uff0c\u8981\u6ce8\u610f\u53d6\u6570\u7ed3\u679c\u7684\u53c2\u6570\u662f\u5728\u51fd\u6570\u5185\u5b9a\u4e49\u7684\uff0c\u5e76\u4e14\u7ed3\u679c\u7684\u6570\u503c\u7cbe\u5ea6\u53ef\u80fd\u9700\u8981\u5c0f\u6570\u5b57\u6216\u5c0f\u6570\u5b57\u5c0f\u6570\u70b9\u7cbe\u5ea6\u4ee5\u4fdd\u5b58\u7ed3\u679c\u7684\u7cbe\u5ea6\u3002 \u91cd\u8f7d\u8f93\u5165\u548c\u8f93\u51fa\u7684\u8fd0\u7b97\u7b26\u662f\u53ef\u4ee5\u5bf9\u5176\u4ed6\u51fd\u6570\u8fdb\u884c\u5f15\u7528\u7684\u3002\u4f46\u5728\u51cf\u6cd5\u8fd0\u7b97\u7b26\u7684\u91cd\u8f7d\u4e2d\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u7b97\u6cd5\u7684\u6b63\u786e\u6027\uff0c\u5fc5\u987b\u5c06\u51cf\u6cd5\u8fd0\u7b97\u7b26\u5b9a\u4e49\u6210\u5458\u51fd\u6570\uff0c\u8fd9\u6837\uff0c\u5728\u91cd\u8f7d\u4e2d\u4f7f\u7528\u51cf\u6cd5\u8fd0\u7b97\u7b26\u7684\u7ed3\u679c\u5c06\u4e0d\u4f1a\u51fa\u73b0\u4efb\u4f55\u请问这是什么语言?为什么我看不懂? <br>### 回答2: 题目中的圆类义如下: ```cpp class Circle { private: double radius; // 半径 public: // 构造函数 Circle() : radius(0.0) {} Circle(double r) : radius(r) {} // 成员函数 double getRadius() const { return radius; } void setRadius(double r) { radius = r; } double getArea() const { return 3.14 * radius * radius; } double getCircumference() const { return 2 * 3.14 * radius; } // 友元函数 friend istream& operator>>(istream&, Circle&); friend ostream& operator<<(ostream&, const Circle&); // 成员函数 Circle operator-(const Circle&) const; }; ``` 重载输入、输出运算符为友元函数,可以这样义: ```cpp istream& operator>>(istream& is, Circle& c) { is >> c.radius; return is; } ostream& operator<<(ostream& os, const Circle& c) { os << "圆的半径:" << c.radius << endl << "圆的面积:" << c.getArea() << endl << "圆的长:" << c.getCircumference() << endl; return os; } ``` 重载算术减法运算符为成员函数,可以这样义: ```cpp Circle Circle::operator-(const Circle& c) const { double r = radius - c.radius; if (r < 0) r = 0; // 半径不能为负数 return Circle(r); } ``` 在主函数中使用圆类,就可以实现输入、输出、面积、长和半径差等操作了: ```cpp int main() { Circle c1, c2; cout << "请输入两个圆的半径:" << endl; cin >> c1 >> c2; cout << "第一个圆的信息如下:" << endl << c1; cout << "第二个圆的信息如下:" << endl << c2; Circle c3 = c1 - c2; cout << "两个圆的半径差为:" << c3.getRadius() << endl; return 0; } ``` <br>### 回答3: 圆类义如下: ```c++ class Circle { private: double radius; // 半径 public: Circle(); // 默认构造函数 Circle(double r); // 带参构造函数 double getArea(); // 计算面积 double getPerimeter(); // 计算长 friend ostream& operator << (ostream& os, const Circle& c); // 重载输出运算符 friend istream& operator >> (istream& is, Circle& c); // 重载输入运算符 Circle operator - (const Circle& c) const; // 重载算术减法运算符 }; ``` 重载输出运算符的函数体应该如下所示(其中 `pi` 表示圆率,`precision` 表示输出小数点后的位数): ```c++ ostream& operator << (ostream& os, const Circle& c) { os.setf(ios::fixed); os.precision(precision); os << "半径为 " << c.radius << " 的圆,面积为 " << pi * c.radius * c.radius << ",长为 " << 2 * pi * c.radius; return os; } ``` 重载输入运算符的函数体应该如下所示: ```c++ istream& operator >> (istream& is, Circle& c) { cout << "请输入圆的半径:"; is >> c.radius; return is; } ``` 重载算术减法运算符的函数体应该如下所示: ```c++ Circle Circle::operator - (const Circle& c) const { double r = radius - c.radius; if (r < 0) { r = 0; } return Circle(r); } ``` 在以上代码中,我们首先计算两个圆的半径之差,若结果小于 0,则将半径设为 0,返回一个半径为 0 的圆。否则返回一个半径为结果的圆。 这样,圆类的主要成员函数和重载运算符就全部写完了。我们可以使用以下代码进行测试: ```c++ int main() { Circle c1, c2, c3; cin >> c1 >> c2; cout << c1 << endl << c2 << endl; c3 = c1 - c2; cout << "半径为 " << c3.getRadius() << " 的圆,面积为 " << c3.getArea() << ",长为 " << c3.getPerimeter() << endl; return 0; } ``` 以上代码中,我们义了三个 Circle 类对象 c1、c2 和 c3,通过重载运算符实现了对 c1 和 c2 的输入和输出。然后我们将 c1 和 c2 相减,得到一个新的圆 c3,输出其半径、面积和长。 这样,我们就成功地实现了 Circle 类的义及相关运算符的重载,相信大家已经掌握了相关知识点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值