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)