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
称该对象为常对象 - 常对象只能调用常函数,因为普通成员可以修改属性