求助:C++圆形类中极小数值的来源排查
解决C++圆形类的get_Diameter()添加与极小数值问题
一、给圆形类添加get_Diameter()函数
咱们直接在roughCirc.h的圆形类里,加一个只读的成员函数来获取直径就行。因为直径是半径的两倍,逻辑很简单,而且要给函数加上const修饰——毕竟只是读取数据,不能修改类的私有成员,这样写更规范安全。
假设你的圆形类私有成员是radius(半径),修改后的类定义参考下面的代码:
// roughCirc.h #include <iostream> using namespace std; class Circle { private: double radius; // 你的私有半径成员 public: // 保留你已有的构造函数、其他成员函数(比如面积计算函数) // 新增的get_Diameter()函数 double get_Diameter() const { return 2 * radius; } };
二、揪出极小数值的根源
那个莫名其妙的极小数值,大概率是私有成员未初始化导致的内存垃圾值。咱们来拆解可能的原因:
- 默认构造函数没给radius赋值:如果你的圆形类有默认构造函数,但没初始化
radius,创建对象时radius会被分配一个随机的垃圾值——通常是接近0的奇怪小数或者极小负数,调用get_Diameter()自然就会返回这个垃圾值的两倍。 - 创建对象时没传初始化参数:比如你在main里写了
Circle circ;而不是Circle circ(2.5);,这时候会调用默认构造函数,直接导致radius处于未初始化状态。
解决办法
给构造函数加上初始化逻辑,确保radius从一开始就有合理的值:
// 修改默认构造函数,初始化radius为0 Circle() : radius(0.0) {} // 带参数的构造函数正常赋值 Circle(double r) : radius(r) {}
然后在驱动代码里创建圆形对象时,记得正确初始化:
int main () { // 忽略Rectangle相关内容... Circle myCircle(3.0); // 初始化半径为3.0 cout << "Circle diameter: " << myCircle.get_Diameter() << endl; // 应该输出6.0 }
这样调整后,就不会再出现莫名其妙的极小数值啦。
内容的提问来源于stack exchange,提问作者nate
相关产品推荐
相关产品推荐

