【C++】【类和对象】this指针

1.this指针的特性:

1.1this指针的引入:

class Date
{
public:
	void Init(int year,int month,int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void Display()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};

【C++】【类和对象】this指针_第1张图片
其中这一部分就等价于:

void Display(Date*this)
{
 cout << thijj->_year << "-" <<this-> _month << "-" << this->_day << endl;
}

1.2 this指针的特性:

1.this指针的类型是:const Type*const pointer ,所以它存储了调用它的对象的地址,指向空间的值不能改变,指向哪块空间不能改变,不能对this指针进行赋值。
2.this指针的本质是成员函数的形参,所以当对象调用成员函数时,将对象的地址作为实参传给形参this指针,对象中不储存this指针。
3.this指针只能在成员函数内部使用。
4.作为形参,this指针存储在栈区。

注意:不能把this指针在形参的位置写出来,会报错!

2.this指针的深入理解:

1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行

class A 
{
public:
	void Print()
	{
		cout << "Print()" << endl;
	}
private:
	int _a;
};
int main()
{
	A* p = nullptr;
	p->Print();
	return 0;
}

【C++】【类和对象】this指针_第2张图片

正常运行
因为Print()这个函数存储不在对象里,而是一块公共的空间,所以函数不在p指向的对象里,调用函数时不对p解引用,所以虽然p是空指针,但并没有解引用成为野指针。

2.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行

class A 
{
public:
	void Print()
	{
		cout << "Print()" << endl;
	}
private:
	int _a;
};
int main()
{
	A* p = nullptr;
	(*p).Print();
	return 0;
}

【C++】【类和对象】this指针_第3张图片
正常运行
(*p).Print()等价于p->Print() 并没有对p解引用,因为函数不存储在对象里

3.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行

class A 
{
public:
	void PrintA()
	{
		cout << _a << endl;
	}
private:
	int _a;
};
int main()
{
	A* p = nullptr;
	p->PrintA();
	return 0;
}

【C++】【类和对象】this指针_第4张图片
运行崩溃
_a是存储在对象里的,p->_a会对p所指向的空间,也就是空指针解应用

你可能感兴趣的:(c++,开发语言,笔记,学习)