const关键字一般认为是常量的意思,但实际上在C++中const表示在运行时只读的意思。
1 const修饰成员函数
const修饰成员函数表示该函数为常成员函数。
常成员函数的特点是:
- 不能调用非const的成员函数
- 可以调用非const的成员变量,但是不能修改其数值
#include <iostream>
using namespace std;
class Test
{
private:
int number = 0;
public:
void show1()
{
cout << "非const的成员函数" << endl;
}
void show2() const
{
cout << "const的成员函数" << endl;
}
// 常成员函数
void test_const() const
{
// show1(); 错误
show2();
// number++; 错误
cout << number << endl;
}
};
int main()
{
Test t;
t.test_const();
return 0;
}
建议只要类的成员函数不修改属性值就尽量使用常成员函数,以提升程序的安全性,例如getter等。
11.2 const修饰对象
使用const修饰对象,表示该对象为常量对象。
常量对象的特点是:
- 不能修改对象的任何属性值
- 不能调用任何非const的成员函数
#include <iostream>
using namespace std;
class Student
{
public:
string name; // 为了测试,解除“隐藏”
Student(string name):name(name){}
void set_name(string name)
{
this->name = name;
}
string get_name() const
{
return name;
}
};
int main()
{
Student s1("张三");
s1.set_name("张三丰");
cout << s1.get_name() << endl;
Student const s2("李四");
// s2.set_name("李四光"); 错误
cout << s2.get_name() << endl;
const Student s3("王五");
// s3.name = "王老吉"; 错误
cout << s3.name << endl;
return 0;
}
11.3 const修饰成员变量
const修饰成员变量,表示该成员变量为常成员变量。
常成员变量的特点是:
- 该成员变量不能在程序运行时被修改
- 可以在声明时直接赋予初始值,也可以通过构造初始化列表赋值
#include <iostream>
using namespace std;
class City
{
public:
const string name = "济南";
City(string name):name(name){}
void set_name(string name)
{
// this->name = name; 错误
}
string get_name() const
{
return name;
}
};
int main()
{
City c("北京");
// c.name = "北京"; 错误
cout << c.name << endl; // 北京
cout << c.get_name() << endl; // 北京
return 0;
}
11.4 const修饰局部变量
const修饰局部变量,表示该局部变量不能被修改,建议给函数参数尽量使用const修饰。另外,引用参数应该在能被定义为const的情况下,尽量定义为const,这样可以达到引用的安全性。
#include <iostream>
using namespace std;
class Test
{
public:
void test_const(int a,const int b)
{
const int c = 3;
// c++; 错误
a++;
// b++; 错误
cout << a << " " << b << endl;
}
};
int main()
{
Test t;
t.test_const(1,1); // 2 1
return 0;
}