在C++中,只有被声明为const的成员函数才能被一个const类对象调用。
要声明一个const类型的类成员函数,只需要在成员函数参数列表后加上关键字const,例如,
class Screen {
public:
char get() const;
};
在类体之外定义const成员函数时,还必须加上const关键字,例如
char Screen::get() const {
return _screen[_cursor];
}
若将成员成员函数声明为const,则该函数不允许修改类的数据成员。例如,
class Screen {
public:
int a;
public:
Screen()
{
a=0;
}
void ok() const
{
a=1;//错误
}
};
下面的这个例子比较经典:
int a=0;
const int *p=&a;//把一个可以修改的变成不可以修改的----正确
const int b=100;
int *p=&b; //把一个不可以修改的变成可以修改了----错误
总结:
1.const成员函数可以访问const成员变量和普通成员变量,但不能修改任何变量。检查发生在编译时。
普通函数可访问const成员变量,不可以修改。.(在访问的时候会自动转成const的)
(成员函数和变量之间都是可访问不可以修改)
2.const对象只能访问const成员函数,
(const对象只可访问const的,也只可以被const的访问)
3.const对象的成员变量不可以修改。
4.const成员函数不能调用非const成员函数,因为非const成员函数可以会修改成员变量
5.普通成员函数可以访问非const对象的普通数据成员、const数据成员,但不可以访问const对象的任意数据成员。(除了此点外,普通的都可以访问const的)
6.const成员函数只是用于非静态成员函数,不能用于静态成员函数。
7.const成员函数的const修饰不仅在函数声明中要加(包括内联函数),在类外定义出也要加。
8.作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const 成员函数。
参考资料: