C++ 两点间距离计算程序讲解

这份代码通过面向对象的方式定义了 “点(Point)” 类,实现了计算平面直角坐标系中两点间距离的功能。下面从代码结构、核心知识点、运行逻辑三个维度详细讲解。

一、代码整体结构

代码分为三个核心部分:

  1. 头文件引入:提供输入输出、数学计算的基础功能;
  2. Point 类定义:封装点的坐标和距离计算逻辑;
  3. main 函数:创建点对象、调用方法、输出结果。

二、逐段解析

1. 头文件与命名空间

cpp

运行

#include <iostream>  // 输入输出流(cout、endl 等)
#include <cmath>     // 数学库(sqrt 平方根函数)
using namespace std; // 简化 std:: 前缀,直接使用 cout、endl 等
  • <iostream>:必须引入才能使用 cout 输出内容、endl 换行;
  • <cmath>:提供 sqrt() 函数(计算平方根),是距离公式的核心;
  • using namespace std;:C++ 标准库的内容默认在 std 命名空间下,这行代码避免了写 std::coutstd::sqrt 等冗余写法。

2. Point 类的定义

类是面向对象编程的核心,这里的 Point 类封装了 “点” 的属性和行为:

(1)私有成员(属性)

cpp

运行

private:
    double x;  // 点的横坐标
    double y;  // 点的纵坐标
  • private 访问权限:确保坐标只能通过类的成员函数访问 / 修改,符合 “封装” 特性;
  • double 类型:支持小数坐标(如 (1.5, 2.8)),比 int 更通用。
(2)构造函数

cpp

运行

Point(double x = 0, double y = 0) : x(x), y(y) {}
  • 作用:创建 Point 对象时初始化 x 和 y
  • 带默认参数:如果创建对象时不传入坐标(如 Point p;),则默认坐标为 (0, 0);
  • 初始化列表 : x(x), y(y):直接初始化成员变量,比在函数体内赋值更高效(尤其对复杂类型)。
(3)距离计算成员函数

cpp

运行

double Distance(const Point& other) const {
    double dx = x - other.x;  // 横坐标差值
    double dy = y - other.y;  // 纵坐标差值
    return sqrt(dx * dx + dy * dy);  // 勾股定理计算距离
}

这是核心功能,重点解析:

  • 函数参数 const Point& other
    • & 引用传递:避免拷贝对象,提升效率;
    • const:保证函数不会修改传入的 other 对象,符合编程规范;
  • 函数末尾 const:表示该成员函数不会修改当前对象(this 指向的对象)的成员变量(即 x 和 y);
  • 距离公式:平面直角坐标系中,两点 (x1​,y1​) 和 (x2​,y2​) 的距离为 (x1​−x2​)2+(y1​−y2​)2​,代码中 dx*dx 等价于平方运算,sqrt() 计算平方根。
(4)辅助打印函数

cpp

运行

void Print() const {
    cout << "(" << x << ", " << y << ")" << endl;
}
  • 作用:输出点的坐标,方便测试和查看结果;
  • const:同样保证不修改对象的 xy

3. main 函数(程序入口)

cpp

运行

int main() {
    // 定义两个点,调用构造函数初始化
    Point p1(1, 2);  // p1 坐标 (1,2)
    Point p2(4, 6);  // p2 坐标 (4,6)

    // 计算距离:调用 p1 的 Distance 方法,传入 p2
    double dist = p1.Distance(p2);

    // 输出结果
    cout << "点p1";
    p1.Print();
    cout << "点p2";
    p2.Print();
    cout << "两点间的距离为:" << dist << endl;

    return 0;
}
  • 执行流程:创建对象 → 调用 Distance 计算距离 → 调用 Print 输出坐标 → 输出最终距离;
  • 计算验证:p1 (1,2) 和 p2 (4,6) 的横坐标差 3,纵坐标差 4,距离为 32+42​=5,程序运行结果会输出 5

三、核心知识点总结

  1. 类与对象Point 是类(模板),p1p2 是对象(实例);
  2. 封装:将坐标(属性)和距离计算 / 打印(行为)封装在类中,隐藏内部实现;
  3. const 修饰const 引用参数、const 成员函数,保证代码的安全性和可读性;
  4. 数学公式:勾股定理在平面坐标中的应用;
  5. 构造函数默认参数:简化对象创建(支持无参、单参、双参初始化)。

四、运行结果

程序运行后会输出:

plaintext

点p1(1, 2)
点p2(4, 6)
两点间的距离为:5

五、扩展与优化建议

  1. 可以添加 SetX()SetY()GetX()GetY() 成员函数,灵活修改 / 获取坐标;
  2. 重载 << 运算符,直接用 cout << p1 输出点坐标,替代 Print() 方法;
  3. 支持三维点(添加 z 坐标),修改距离公式为 (x1−x2)2+(y1−y2)2+(z1−z2)2​。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐