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

本文详细解释了C++中成员变量和成员函数的存储方式,强调了静态与非静态的区别,重点介绍了this指针的作用,包括用于区分同名变量和返回对象本身。此外,还讨论了链式编程和拷贝构造函数的应用示例。
摘要由CSDN通过智能技术生成

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

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

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

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

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

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

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

二.this指针的概念

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

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

this指针的用途:

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

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

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

#include <iostream>
#include<string>
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;
}

注意,如果将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;
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值