函数后面加const修饰

2018-10-10  本文已影响0人  雨幻逐光

我们经常见到一些函数后面带有关键字 const 的修饰。那么 const 在这里表示什么意思呢?
其实这个 const 的是对函数的一个限定,使其无法修改类内的数据成员。const告诉别人这个函数不会改变对象的状态。
声明一个函数用 const 关键字来说明这个函数是一个只读函数(read only method),即不会修改任何的数据成员也就是不会改变该对象的状态。该类函数的声明和定义时都要加上 const 关键字。
任何不会修改数据成员的函数我们都应该声明为 const 类型。如果我们在编写 const 函数时不小心修改了数据成员,或者调用了其他非 const 成员函数(即会修改数据成员的函数),编译器将会报错。这无疑让我们编写的代码更加的健壮。看如下两端代码:
错误的写法:

#include <iostream>
using namespace std;
class Person
{
public:
    Person(int age);
    void setAge(int age);
    int getAge() const;
private:
    int age;
};

Person::Person(int age){
    this->age = age;
}

void Person::setAge(int age){
    this->age = age;
}

int Person::getAge() const{
    this->age = 23;      // wrong: want to modify data member, the compiler will report error
    return this->age;
}
int main(){
    Person person(13);
    cout << person.getAge() << endl;
    person.setAge(23);
    cout << person.getAge() << endl;
}

编译器所报错误:

Cannot assign to non-static data member within const member function 'getAge'

正确的写法:

#include <iostream>
using namespace std;
class Person
{
public:
    Person(int age);
    void setAge(int age);
    int getAge() const;
private:
    int age;
};

Person::Person(int age){
    this->age = age;
}

void Person::setAge(int age){
    this->age = age;
}

int Person::getAge() const{
    return this->age;
}

int main(){
    Person person(13);
    cout << person.getAge() << endl;
    person.setAge(23);
    cout << person.getAge() << endl;
    return 0;
}

运行结果:

13
23
Program ended with exit code: 0
上一篇 下一篇

猜你喜欢

热点阅读