在 C++ 中,const 也可以用来修饰对象,称为常对象。一旦将对象定义为常对象之后,就只能调用类的 const 成员(包括 const 成员变量和 const 成员函数)了。
定义常对象的语法和定义常量的语法类似:
const class object(params);
class const object(params);
当然你也可以定义 const 指针:
const class *p = new class(params);
class const *p = new class(params);
class
为类名,object
为对象名,params
为实参列表,p
为指针名。两种方式定义出来的对象都是常对象。
如果你对 const 的用法不理解,请猛击《C语言const的用法详解》。
一旦将对象定义为常对象之后,不管是哪种形式,该对象就只能访问被 const 修饰的成员了(包括 const 成员变量和 const 成员函数),因为非 const 成员可能会修改对象的数据(编译器也会这样假设),C++禁止这样做。
常对象使用举例:
#include <iostream>using namespace std;class Student{public: Student(char *name, int age, float score);public: void show(); char *getname() const; int getage() const; float getscore() const;private: char *m_name; int m_age; float m_score;};Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }void Student::show(){ cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;}char * Student::getname() const{ return m_name;}int Student::getage() const{ return m_age;}float Student::getscore() const{ return m_score;}int main(){ const Student stu("小明", 15, 90.6); //stu.show(); //error cout<<stu.getname()<<"的年龄是"<<stu.getage()<<",成绩是"<<stu.getscore()<<endl; const Student *pstu = new Student("李磊", 16, 80.5); //pstu -> show(); //error cout<<pstu->getname()<<"的年龄是"<<pstu->getage()<<",成绩是"<<pstu->getscore()<<endl; return 0;}
本例中,stu、pstu 分别是常对象以及常对象指针,它们都只能调用 const 成员函数。