在类中,如果你不希望某些数据被修改,可以使用const
关键字加以限定。const 可以用来修饰成员变量、成员函数以及对象。
const成员变量
const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过参数初始化表
const成员函数
const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。
常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字,请看下面的例子:
1. class Student{ 2. public: 3. Student(char *name, int age, float score); 4. void show(); 5. //声明常成员函数 6. char *getname() const; 7. float getscore() const; 8. private: 9. char *m_name; 10. float m_score; 11. }; 12. 13. Student::Student(char *name, int age, float score): m_name(name), m_score(score){ } 14. void Student::show(){ 15. cout<<m_name<<",成绩是"<<m_score<<endl; 16. } 17. //定义常成员函数 18. char * Student::getname() const{ 19. return m_name; 20. } 21. float Student::getscore() const{ 22. return m_score; 23. }
需要注意的是,必须在成员函数的声明和定义处同时加上 const 关键字。char *getname() const
和char *getname()
是两个不同的函数原型,如果只在一个地方加 const 会导致声明和定义处的函数原型冲突。
const对象
const 也可以用来修饰对象,称为常对象。一旦将对象定义为常对象之后,就只能调用类的 const 成员了。
定义常对象的语法和定义常量的语法类似:
1. const class object(params); 2. class const object(params);
当然你也可以定义 const 指针:
1. const class *p = new class(params); 2. class const *p = new class(params);
一旦将对象定义为常对象之后,不管是哪种形式,该对象就只能访问被 const 修饰的成员了(包括 const 成员变量和 const 成员函数),因为非 const 成员可能会修改对象的数据(编译器也会这样假设),C++禁止这样做。