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

C++ const关键字相关作业题要求理解及代码报错咨询

C++ const关键字作业题解

题目核心考察点

这道题核心是考察C++中const关键字在类场景下的三类用法约束,不需要实现复杂业务逻辑,只要把四个约束场景演示正确即可:

  • 类中const数据成员的初始化、使用限制
  • 末尾带const的常量成员函数的权限约束
  • 不同const属性的成员函数操作不同const属性数据成员时的合法/非法边界
    题目要求四个函数都返回int类型值,这里的“返回修改后的整型值”指返回经过逻辑处理后的结果值,不要求必须修改类的成员变量本身——很多编译报错都是因为尝试做C++语法明确禁止的const修改操作。

你现有代码的报错原因

  • 基础语法错误:ConstData函数定义缺少左大括号{,函数体必须被{}完整包裹,属于书写疏漏
  • 函数名不匹配:题目要求的后两个函数名是NonFunction、ConstantBoth,你注释里写的ConstFunction、ConstBoth和要求不符,主函数调用时找不到对应函数定义
  • 返回值违规:你注释里写的ConstBoth返回类型是void,不符合题目“返回类型不得为void”的要求
  • 逻辑违规:你尝试直接在成员函数内给const数据成员赋值、在const成员函数内修改普通成员,这些操作本身就被C++语法禁止,必然触发编译报错,这也是这道题要演示的const约束本身

符合题目要求的可运行代码

#include<iostream>
using namespace std;

class Project
{
private:
    const int const_num; // 题目要求声明的int类型常量数据成员
    int normal_num;      // 普通非常量数据成员
public:
    // const数据成员必须在构造函数初始化列表完成赋值
    Project():const_num(5), normal_num(0){}

    // 1. 非常量成员函数,操作非常量数据:可直接修改普通成员
    int NonConstant(int x) {
        normal_num = x;
        return normal_num;
    }

    // 2. 非常量成员函数,操作常量数据:const成员初始化后不可直接修改,返回计算后的结果值
    int ConstantData(int x) {
        // 放开下一行注释会直接编译报错:不能给const数据成员赋值
        // const_num = x;
        return const_num + x;
    }

    // 3. 常量成员函数(末尾加const),操作非常量数据:const函数内不能修改普通非mutable成员
    int NonFunction(int x) const {
        // 放开下一行注释会直接编译报错:const成员函数内不能修改普通成员
        // normal_num = x;
        return normal_num + x;
    }

    // 4. 常量成员函数,操作常量数据:只读访问const成员合法
    int ConstantBoth(int x) const {
        return const_num + x;
    }
};

int main()
{
    Project obj;
    cout<<"NonConstant(1): "<<obj.NonConstant(1)<<endl;
    cout<<"ConstantData(1): "<<obj.ConstantData(1)<<endl;
    cout<<"NonFunction(1): "<<obj.NonFunction(1)<<endl;
    cout<<"ConstantBoth(1): "<<obj.ConstantBoth(1)<<endl;
    return 0;
}

关键const规则备忘

  • 类的const数据成员必须在构造函数初始化列表赋值,对象创建后任何位置都不能直接修改其值
  • 成员函数参数列表后加const才是常量成员函数,这种函数内的this指针是const属性,不能修改类的非mutable成员,也不能调用类的非const成员函数
  • 非const成员函数可以读写普通成员,但依然没有权限修改const数据成员
  • const成员函数可以被const对象、非const对象调用,非const成员函数只能被非const对象调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:54:30