c++类与对象(c++对象模型和 this 指针)

本文详细介绍了C++中类的成员变量和成员函数的存储方式,指出非静态成员变量占用对象空间,而函数和静态成员变量不直接占用。this指针用于在成员函数中区分调用的对象,并在有同名形参时避免混淆。同时,讨论了空指针调用成员函数的风险以及如何通过检查this指针来增强代码健壮性。此外,还讲解了const成员函数及其限制,以及如何使用mutable关键字允许在const函数中修改特定成员变量。
摘要由CSDN通过智能技术生成

1、 成员变量和成员函数分开存储

1、 在c++ 中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上。所以非静态成员变量占对象空间; 静态成员变量不占对象空间; 函数也不占对象空间,所有函数共享一个函数实例;可以通过 sizeof 关键字求对象所占的字节数进行判断。

2、注意在c++中:
1)
在这里插入图片描述
如果不是空对象,比如有一个int型的非静态成员变量,那么内存空间就是4个字节;

2、this 指针的用途

  • 由于一个函数可能会被多个对象调用,那么怎么区分是哪个对象调用了该函数:可以使用 this 指针来进行区分;
  • this 指针指向被调用的成员函数所属的对象。谁调用 this就指向谁
  • 如果要返回本体要做引用的方式返回;
  • this 指针隐含在每一个非静态成员函数中,不需要定义,可以直接使用

用途:

  • 当没有一个良好的编码习惯时,当形参和成员变量同名时,要用this指针区分。
    注:后一种是属于良好的编码风格的写法。
person (int age)
	{
	this->age = age;
	}
	成员属性为; int age;
或者:
person (int age)
	{
	m_age = age;
	}
	成员属性为; int m_age;
	
  • 在类的非静态成员函数中返回对象本身,可以使用 return * this

3、空指针访问成员函数

注意:空指针访问成员函数时,需要注意遇到 this 指针;成员属性前面默认添加了一个this 指针。
如果空指针调用普通成员函数,看该函数体中是否使用到了this指针(是否访问非静态成员变量)。如果使用到了this指针,程序会崩溃;如果没有使用到this指针,程序不会崩溃。当然,如果访问静态成员变量,是不会使用到this指针的。

例如:

可以加一个判断添加增强代码的健壮性;
if (this == NULL)
{
	return 0;
}

4、const 修饰成员函数

常函数:

  • 成员函数加上 const 之后称为常函数,常函数中的成员属性不可以修改,要想修改必须要在成员属性声明时添加 mutable 关键字。
  • this 指针的本质是指针常量
  • 代码演示:
void getvvv () const //const 要放在后面
{
}

mutable int m_age;  // 要加在前面

常对象:

  • 声明对象前加 const 称该对象为常对象
  • 常对象只能调用常函数,因为普通成员可以修改属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值