返回值 函数名() const
{
//在普通成员函数后面加上const就是常成员函数
}
- 注意:
- 只有普通成员函数才能构成常函数,构造函数,静态成员函数,析构函数,全局函数都不能构成常函数。
- 常函数中的this指针是常指针,不能在常成员函数中修改成员变量的值。
- 常成员函数可以修改用mutable修饰的成员变量
- 非常对象可以调用常函数,但是常对象只能调用常函数,不能调用其他任何函数。
- 函数名和形参都相同的 常函数和非常函数构成重载,常对象调用常函数,非常函数调用非常函数。
class Person
{
public:
Person(int aa)
{
this->aa = aa; //this指针,解决名称冲突
}
void aaa() const //常函数
{
this->aa++;
}
//mutable 修饰的变量在常函数中可以修改,也可以在常对象中修改
mutable int aa;
};
int main()
{
Person p4(1);
p4.aaa(); //非常对象也可以调用常函数
const Person p5(12);
p5.aaa(); //常对象只能调用常函数
}
类名 const 对象名(初始化);
const 类名 对象名(初始化);
//这二者等效,都是常对象。
- 注意
- 如果一个对象被声明为常对象,则不能调用该对象的非const成员函数
- 常对象只能调用类中的常函数和mutable修饰的变量,其他的变量和函数均无法修改。