一、C++对象模型和this指针
成员变量和成员函数分开存储
- 在C++中,类内的成员变量和成员函数分开存储
- 只有非静态成员变量才属于类的对象上
对象所占用内存大小:
#include <iostream>
using namespace std;
//成员变量和成员函数分开存储
class Person
{
};
void test01()
{
Person p;
//C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占用内存的位置
//每个空对象也应该有一个独一无二的内存地址
cout << "sizeof p:" << sizeof(p) << endl;//1个字节
}
int main()
{
test01();
return 0;
}
静态成员变量,静态成员函数和普通成员函数都不属于类的对象上
举例如下:
#include <iostream>
using namespace std;
//成员变量和成员函数分开存储
class Person
{
int m_A;//非静态成员变量属于类的对象
static int m_B;//静态成员变量,不属于类的对象
void func(){
}//非静态成员函数,不属于类的对象
static void func2(){
}//静态成员函数,不属于类的对象
};
int Person::m_B = 4;
void test01()
{
Person p;
//C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占用内存的位置
//每个空对象也应该有一个独一无二的内存地址
cout << "sizeof p:" << sizeof(p) << endl;
}
int main()
{
test01();
return 0;
}
**总结:**只有非静态成员变量才属于类的对象上
this指针
- C++通过提供特殊的对象指针,this指针指向被调用的成员函数所属的对象
- this指针是隐含每一个非静态成员函数内的一种指针
- this指针不需要定义,直接使用即可
this指针的用途:
- 当形参和成员变量同名时,可用this指针来区分
- 在类的非静态成员函数中返回对象本身,可使用
return *this;
练习代码如下:
#include <iostream>
using namespace std;
//解决名称冲突问题
//this指针指向被调用的成员函数所属的对象
class Person
{
public:
Person(int age