- 论坛徽章:
- 0
|
本帖最后由 vesontio 于 2014-10-29 11:22 编辑
我声明一个类- #include <string>
- #ifndef CLASS_STUDENT
- #define CLASS_STUDENT
- class Student {
- public:
- Student(const std::string &fn, const std::string &ln, int a) :
- firstName(fn), lastName(ln), age(a) {}
- void setFirstName(const std::string &);
- void setLastName(const std::string &);
- void setAge(unsigned);
- std::string getFirstName() const;
- std::string getLastName() const;
- unsigned getAge() const;
- private:
- std::string firstName;
- std::string lastName;
- unsigned age;
- };
- #endif
复制代码 现在的问题是,所有的getter都必须为const,《C++ Primer》的解释是,所有的类方法都被默认添加指针Student *const this,每当我们操作类的属性时,都是通过这个隐性指针进行的。
那this不可以被赋以非const的。那作为getter,本身就不应该改动对象内的属性,对象应当是一个const,所以this的真正类型应当是const Student *const,所以就通过在声明末尾添加const来实现。
但是setter,例如seetFirstName(const std::string &),也被默认添加指针Student *const this,但是因为我们需要给类的属性赋值,所以这时候,对象不是const,所以this的类型是OK的。
我的疑问是,编译器怎么知道当前操作的对象是否是const,当前对象的const属性是可以变的吗?呼叫getter的时候,它就变成const,呼叫setter的时候,它就不是了? |
|