class中的const关键词
in Cpp with 0 comment

class中的const关键词

in Cpp with 0 comment

const的类内方法

前些天面试的时候被问到了一个class中的两个类内方法,函数名和参数都一样,其中一个最后加了const,一个最后没有加。这样会不会编译错误?如果不会编译错误,那函数对象调用这个方法的时候用的是哪个函数?以及const加了之后到底有什么用。

#include<bits/stdc++>
using namespace std;
class dude{
public:
    int a=100,b=200;
    int sum(){return a+b;}
    int sum(){return a+b+100;} const
};

int main()
{
    dude a;
    const dude b;
    cout<<a.sum<<endl;
    cout<<b.sum<<endl;
    return 0;    
}

不会编译错误,具体调用哪个取决于调用对象是const的还是非const的。两个方法都存在的时候,const对象调用const的方法,普通对象调用没加const的方法。
const方法中改变了成员变量的值的时候,编译器会报错,但如果这个成员变量是个指针,指针指向的内容的值可以被改变(只要指针变量的值没改就行了)。
所以加const就是为了防止成员函数意外对变量进行了修改。

Responses