之前在C++基础开篇中,我提到,C++语言 变量的基础单元是类,大家一定要牢记这个观念,因为C++的很多语法都是围绕的着类展开的,下面看看const关键字在类上是怎么用的。
const关键字在c语言里,修饰一个变量为常量,只能在定义的时候,给变量初值,在其它的地方修改变量的值会报编译错误。
int main()
{
const int a = 10;
a = 50;
}
如上面a=50;就会报错。
编译器处理这种内建类型的const,比较简单。 只要检查在非初始化的地方,是否更改了变量值即可。
如果定义一个类的时候,用const修饰,表示这个类的数据是不能被修改的。
但是类是个整体,除了包含数据,还包含方法。
除了可以直接改变量,还可以通过方法改变量。
class point
{
public:
void set_x(int val)
{
x = val;
}
public:
int x;
int y;
};
void main()
{
point pp;
pp.x = 10;
pp.set_x(20);
}
如上面的代码, pp.set_x(20)就是通过方法改类的数据。 【这里为了讲解方便,类的数据做成了public。非必须的情况下,类的数据都要放到private里】
C++如何解决这个问题呢?
它提供了const成员函数,这个概念。
凡是被标记了const的成员函数,函数体内是无法修改类数据的。
class point
{
public:
void set_x(int val) const
{
x = val;
}
public:
int x;
int y;
};
void main()
{
point pp;
}
如上 在set_x函数中加了const修饰,上面的代码就会提示编译错误,因为在const函数中,修改了类的数据。
有了const成员函数,const的故事就可以讲通了。
当某个类变量被定义成const变量,那么只要保证只调用类的const成员函数,就能保证类数据不会被修改。
class point
{
public:
void set_x(int val)
{
x = val;
}
void show()
{
cout << "x = " << x << " y = " << y << endl;
}
private:
int x;
int y;
};
void main()
{
const point pp;
pp.show();
}
如上代码所示,pp变量只能调用show函数,当调用set_x函数时,报错。
好了,const的故事就讲的这里,敬请期待后续内容。