类和对象 第三部分第一小节:C++对象模型和this指针

一.成员变量和成员函数分开来存储

在C++中,类内的成员变量和成员函数分开存储

空对象占用内存空间为1,C++编译器会给每一个空对象也分配一个字节空间,是为了区分空对象占内存的位置,每个空对象也应该有一个独一无二的内存地址

类和对象 第三部分第一小节:C++对象模型和this指针_第1张图片

只有非静态变量才属于类的对象上

类和对象 第三部分第一小节:C++对象模型和this指针_第2张图片

静态成员变量,不属于类的对象

类和对象 第三部分第一小节:C++对象模型和this指针_第3张图片

非静态成员函数,不属于类的对象

类和对象 第三部分第一小节:C++对象模型和this指针_第4张图片

静态成员函数,不属于类的对象

类和对象 第三部分第一小节:C++对象模型和this指针_第5张图片

二.this指针的概念

C++中成员变量是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就说多个同类型的对象会共用一块带代码,C++通过提供特殊的对象指针:this解决代码区分对象调用自己,this指针指向被调用的成员函数所属的对象

this指针是隐含在每一个非静态成员函数的一种指针,this指针不需要定义,直接使用即

this指针的用途:

1当形参和成员变量同名时,可以用this指针加以区分

类和对象 第三部分第一小节:C++对象模型和this指针_第6张图片

修改方法:修改形式参数或者成员变量名称;使用this指针指明变量(如下图)

类和对象 第三部分第一小节:C++对象模型和this指针_第7张图片

2.在类的非静态成员函数中返回对象本身,可以使用return *this

#include 
#include
using namespace std;
class person {
public:
	person(int age)
	{
		this->age = age;
	}
	person& personaddage(person& p)
	{
		this->age += p.age;
		//this指向p2的指针,而*this指向p2对象的本体
		//如果要返回本体,要用引用的方式返回
		return *this;
	}
	int age;
};
void test01()
{
	person p1(10);
	person p2(20);
	//链式编程思想,无限向后叠加
	p2.personaddage(p1).personaddage(p1).personaddage(p1);
	cout << "person的年龄为" << p2.age << endl;
}
int main() {
	test01();
	system("pause");
	return 0;
}

类和对象 第三部分第一小节:C++对象模型和this指针_第8张图片

注意,如果将personaddage的返回改成值而不是引用,则会执行拷贝构造函数功能,复制一份新的p2,后面同理,因此p2只能在第一次被改变,其余就是改变新增的p2值

class person {
public:
    person(int age) {
        this->age = age;
    }

    person personaddage(person& p) {
        person newPerson(this->age + p.age);//创建了一个新的 person 对象 newPerson,并将其年龄设置为当前对象的年龄加上参数对象的年龄之和
        return newPerson;
    }

    int age;
};

类和对象 第三部分第一小节:C++对象模型和this指针_第9张图片

你可能感兴趣的:(#,C++核心编程,c++,程序人生,开发语言)