应使用class封装圆的计算逻辑,将半径设为private成员,提供只读的周长和面积接口,构造函数需explicit,支持半径/直径两种初始化,统一用double类型,推荐自定义pi常量或c++20 std::numbers::pi。

用 class 封装圆的计算逻辑,避免重复写公式
直接暴露半径和公式容易出错,比如忘记平方、用错 π 值、或混用直径/半径。用 class 把半径作为私有成员,周长和面积作为只读接口,能强制约束使用方式。
-
radius必须在构造时传入,且应设为private,防止外部意外修改 - 周长用
2 * M_PI * radius,面积用M_PI * radius * radius,别手写3.14159—— 系统头文件里的M_PI更准(需定义_USE_MATH_DEFINES或用<numbers></numbers>(C++20)) - 两个计算函数都该是
const成员函数,表明不修改对象状态
注意 M_PI 的跨平台兼容性问题
Windows 的 math.h 默认不暴露 M_PI,Linux/macOS 通常支持。不加处理直接用会编译失败,报错:‘M_PI’ was not declared in this scope。
- Windows 下需在包含
<cmath></cmath>前加#define _USE_MATH_DEFINES - C++20 起推荐用
std::numbers::pi,但需确认编译器支持(GCC 12+、Clang 14+) - 保守做法:自己定义
static constexpr double PI = 3.14159265358979323846;,避免依赖头文件宏
要不要支持直径初始化?得看使用场景
工程中输入可能是直径(比如机械图纸),硬要求用户自己除以 2 再传半径,既不友好也易错。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 提供两个构造函数:一个接受
radius,另一个接受diameter,后者内部自动转为半径存储 - 不要重载
operator=或提供set_diameter()—— 这会让对象状态变得模糊(到底是按半径还是直径存的?) - 如果真需要动态切换,不如另建
CircleFromDiameter类,职责更清晰
性能与精度:double 足够,别盲目上 long double
普通几何计算用 double 完全够用,long double 在多数平台只是别名(如 x86-64 Linux 是 80-bit 扩展精度,Windows MSVC 实际仍是 64-bit),反而可能引入隐式转换开销。
- 所有成员变量和返回值统一用
double,避免混用类型导致意外截断 - 如果输入来自传感器或 CAD 数据,本身只有 3–4 位有效数字,高精度无意义
- 测试时用已知值验证:半径为 1 的圆,周长应 ≈ 6.1415926535,面积应 ≈ 3.1415926535;差一位小数就说明 π 或公式错了
实际代码里最容易被忽略的是构造函数的 explicit 修饰 —— 如果没加,Circle c = 5.0; 这种隐式转换会悄悄发生,而你本意可能是想传直径或搞错单位。这种隐式行为一旦上线,排查成本远高于加一个关键字。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










