首页 > 试题广场 >

对于类的常成员函数的描述正确的是

[单选题]
对于类的常成员函数的描述正确的是
  • 常成员函数不修改类的数据成员
  • 常成员函数可以对类的数据成员进行修改
  • 常成员函数只能由常对象调用
  • 常成员函数不能访问类的数据成员
我猜A
发表于 2020-04-20 13:36:47 回复(1)
常成员函数是指在函数定义的末尾加一个const. 如: void A (int x ) const{ return x; } 1.它表示这个函数内的代码不会改变传入参数的值,方便了程序员阅读代码和减少bug 2.当一个对象为const时,只有常成员函数才能调用它,没有定义const的函数会有改变其值的嫌疑,故不能成功编译。 如: class Set{ Add(){} Show() const{} } const Set s; s.Add(10); // 非法: AddElem不是常量成员函数 s.Show(10); // 正确
发表于 2020-04-23 11:41:15 回复(3)
常成员函数是类中的成员函数,其特点是在函数声明和定义中使用const关键字修饰函数,例如:
class MyClass {
public:
    void foo() const; // 常成员函数声明
};

void MyClass::foo() const {
    // 常成员函数定义
}

常成员函数有以下特点:

A. 常成员函数不修改类的数据成员:在常成员函数中,不允许对类的非静态数据成员进行修改,包括对数据成员的赋值、修改其值等操作。这是因为常成员函数在语义上被视为对对象的只读操作,不应该对对象的状态进行修改。

B. 常成员函数可以访问类的数据成员:常成员函数可以读取类的数据成员的值,但不能修改其值。

C. 常成员函数可以由常对象和非常对象调用:常成员函数可以被常对象和非常对象调用,但如果通过常对象调用,常成员函数只能访问类的数据成员的值,不能修改它们。

D. 常成员函数不能访问类的静态数据成员:常成员函数不能访问类的静态数据成员,因为静态数据成员属于类而不属于对象,不受对象的const属性限制。

因此,描述A的"常成员函数不修改类的数据成员"是正确的。描述B的"常成员函数可以对类的数据成员进行修改"是错误的。描述C的"常成员函数只能由常对象调用"是错误的。描述D的"常成员函数不能访问类的数据成员"是错误的



发表于 2023-04-11 11:29:52 回复(0)
当const修饰的成员同时被mutable修饰,是可以修改的。
非const对象优先调用非const函数
const对象只能调用const函数
发表于 2022-03-05 19:30:25 回复(0)