类对象存储方式
class Date
{
public:
void Print()
{
cout << _year << "-" << _month << "-" << _day << endl;
}
void Init(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
int main()
{
Date d1;
d1.Init(2022, 8, 24);
Date d2;
d2.Init(2022, 9, 24);
d1.Print();
d2.Print();
}
调的是同一个函数,没有必要在对象中各自存一份,但是成员变量各自存一份,值都不一样,因此在公共区域中存成员函数
❓❓❓如果说函数在公共代码区那么打印的时候怎么区分呢?成员函数如何知道哪个对象的数据成员要被操作呢?d1.Print(); d2.Print();-------this指针,通过该指针来访问自己的地址
隐含的this指针
1️⃣在c++中,每一个对象都能通过this指针来访问自己的地址,this指针是所有成员函数的隐含参数
2️⃣ this只能在成员函数中使用,成员函数的第一个默认参数为T*const this
3️⃣ this指针不能在静态函数中使用,静态函数如同静态变量一样,不属于具体的哪一个对象,它表示了整个范围意义上的信息,而this指针却实实在在的对应一个对象
4️⃣ this指针在成员函数的开始执行前构造的,在成员执行后清除
5️⃣ this指针本身不能被修改,因为const修饰,this指向对象可以被修改
🌰
class A
{
public:
void Show()
{
cout << "show()" << endl;
}
private:
int _a;
};
int main()
{
A* p = nullptr;
p->Show();
}
程序运行结果:正常运行
➡️show函数中打印的值不用this指针去相应对象中寻找,正常打印出来即可
🌰🌰
class A
{
public:
void Show()
{
cout << _a << endl;
}
private:
int _a;
};
int main()
{
A* p = nullptr;
p->Show();
}
程序运行结果:运行崩溃
💕this指针存在栈里面,有些编译器会使用寄存器优化存放到寄存器