4.3 C++ 对象模型和this 指针
4.3.1 成员变量和成员函数分开存储
只有非静态成员变量 属于类对象上。
4.3.2 this指针概念
this指针 指向被调用的成员函数所属的对象。 隐含在每个非静态成员函数内。 不需要定义,直接使用。
this用途: 1.形参和成员变量同名,用this区分 2.返回对线本身用 *this
class Person
{
public:
Person(int age){
this->age = age; // 1.解决名称冲突
}
Person& addPersonAge(Person & p){
this->age += p.age;
return *this;
}
int age;
}
...
Person p1(10);
Person p2(10);
p2.addPersonAge(p1).addPersonAge(p1).addPersonAge(p1);
4.3.3 空指针访问成员函数
使用空指针(NULL)访问成员,会报错。 可以在访问前判断NULL。
4.3.4 const 修饰成员函数
常函数:
成员函数后加,称为常函数;
常函数内不可以修改成员属性;
成员属性声明时加
mutable
,则常函数内仍然可以修改。当做特例。
常对象:
声明对象前加const const Person p
常对象只能调用常函数
class Person{
public:
void showPerson() const{
// this->m_A = 100; 不能修改
this->m_B = 100; //mutable变量可以修改。作为特例
}
int m_A;
mutable int m_B;
};
this指针的本质是 指针常量(Person* const this),指向当前对象this的指向不能修改。
在成员函数后加上const,则this所指的变量也不能修改了。(const Person * const this)