首页 > 试题广场 >

若有以下类W说明,则函数fConst的正确定义是( )。

[单选题]
若有以下类W说明,则函数fConst的正确定义是(  )。
class W
{
int a;
public:
void fConst(int&) const;
};

  • void W::fConst( int &k )const  { k = a; }
  • void W::fConst( int &k )const  { k = a++; }
  • void W::fConst( int &k )const  { cin >> a; }
  • void W::fConst( int &k )const  { a = k; }
这道题目考的是const关键字,类的方法后面加了const后,该方法的实现中不能修改类的成员。即不能修改类成员a
选项中,只有选项A,没有修改类成员a的值
发表于 2018-05-18 17:22:52 回复(3)

在看开源代码时,经常会看到在类的成员函数后面加const,之前了没有太关注过,近来闲来无事,就想起这件事,网上查了一下,大概明白了是怎么回事,这里引用CSDN愽文里的段话:“编译器会自动给每一个函数加一个this指针。在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量的(加了mutable修饰的除外)。实际上,也就是对这个this指针加上了const修饰”。举个例子:

class test

{

public:

test(int a=10):aa(a){}

~test(){}

 

int getA() const {aa++,bb++;return aa}

 

private:

int aa;

mutable int bb;

};

int main()

{

test t(100);

int cc = t.getA();

};

这里编译器会报错, C2166: 左值指定 const 对象,getA()函数不能执行aa++操作,但执行bb++是可以的。

发表于 2020-08-10 10:08:25 回复(1)

const函数与非const函数的调用规则

  • const对象默认调用const成员函数,非const对象默认调用非const成员函数;
  • 若非const对象想调用const成员函数,则需要显示的转化,例如(const Student&)obj.getAge();
  • 若const对象想调用非const成员函数,同理进行强制类型转换const_cast < Student&>(constObj).getAge();(注意constObj一定要加括号)
发表于 2018-07-31 08:42:29 回复(1)
const修饰的方法不能修改其中的成员变量
发表于 2018-10-25 08:00:16 回复(0)
一旦类中的函数后加上const,就说明这个一个函数常量,他是不能修改类内的变量的。
发表于 2022-06-29 22:23:28 回复(0)
***题目,没有任何实际意义
发表于 2022-05-18 11:18:12 回复(0)
真坑啊
发表于 2021-12-09 11:36:44 回复(0)
类中成员函数加上const后不能修改成员变量的值
发表于 2021-06-20 21:24:41 回复(0)
<p>为什么不让修改类的成员变量?这是什么需求?</p>
发表于 2020-08-21 19:04:10 回复(0)