You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输入三角形底和高后面积始终返回0的C++代码问题排查

问题排查与修复方案

核心问题:整数除法导致计算结果为0

在TRIANGLE的CALC_AREA方法中,1 / 2是整数除法——C++里两个整数相除会直接舍去小数部分,结果为0。后续乘以BASE * HEIGHT自然得到0,最终返回值必然是0。

修复方法:把其中一个数改为浮点数,触发浮点除法:

double TEMP = 1.0 / 2 * (BASE * HEIGHT);
// 或者直接写 0.5 * BASE * HEIGHT,运算效率更高

其他潜在问题修复

  1. 私有继承隐患
    TRIANGLE继承BASIC_SHAPE时未指定继承方式,C++默认是私有继承,这会导致基类的公有成员在派生类中变为私有,后续若想用基类指针指向派生类对象会直接报错。改成公有继承:
class TRIANGLE: public BASIC_SHAPE
  1. 冗余变量重名
    你在全局作用域定义了CIRCLE SHAPE2和TRIANGLE SHAPE3,但main函数内又定义了同名局部变量,全局变量会被完全隐藏,属于冗余代码,建议直接删除全局的两个变量。

  2. 构造函数初始化优化
    CIRCLE的构造函数可以改用成员初始化列表,和TRIANGLE保持一致,代码更规范:

CIRCLE() : RADIUS(0) {}
CIRCLE(double _RADIUS) : RADIUS(_RADIUS) {}
  1. main函数返回值合规性
    C++标准要求main函数必须返回int类型,void main属于未定义行为,修改为:
int main()
{
    // 原有代码
    return 0;
}
  1. 内存泄漏修复
    main函数中用new创建了LEAD1指针,但未释放内存,需添加delete语句:
delete LEAD1;

修复后的完整TRIANGLE类代码

class TRIANGLE: public BASIC_SHAPE
{
public:
    TRIANGLE() : BASE(0), HEIGHT(0) {}
    TRIANGLE(double _BASE , double _HEIGHT) : BASE{_BASE}, HEIGHT{_HEIGHT} {}
    virtual double CALC_AREA() override { // 加override关键字明确重写基类方法
        double TEMP = 0.5 * BASE * HEIGHT;
        return GET_AREA(TEMP);
    }

private:
    double BASE, HEIGHT;
};

内容的提问来源于stack exchange,提问作者Kobrakixx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:20:27