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)