类的作用域,实例化和this指针

类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员,需要使用::作用域解析符,指明成员属于哪个类域

比如下面这个例子:

#include <iostream>

using namespace std;

class Person
{
public:
	void PrintPersonInfo();
private:
	char m_name[20];
	char m_gender[3];
	int m_age;
};

//这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
	cout << m_name << ' ' << m_gender << ' ' << m_age << endl;
}

类的实例化

当我们使用一个类去创建对象时,就称为类的实例化

  1. 类其实可以看作一个模型一样的东西,限定了类有哪些成员。当我们定义出了一个类并没有分配实际的内存空间来存储它;
  2. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量
  3. 可以看个例子来说明,比如我们在建筑房子的时候需要有设计图,我们需要拿着建筑设计图去建造房子,而类就像是这个设计图,只需要设计出需要什么东西,但是并没有实际的实体建筑物存在,所以说类同样也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。

再来看一个代码示例

#include <iostream>

using namespace std;

class Person
{
public:
	char * m_name;//姓名
	char * m_sex; //性别
	int m_age;    //年龄

	//显示基本信息
	void showInfo();
};

void Person::showInfo()
{
	cout << m_name << ' ' << m_sex << ' ' << m_age << endl;
}

int main()
{
	Person man;
	man.m_name = "Jack";
	man.m_sex = "男";
	man.m_age = 10;

	man.showInfo();

	system("pause");
	return 0;
}

Person是一个类,而man就是Person这个类实例化出的对象。

this指针

this指针的引出

这里我们可以先定义一个日期类

#include <iostream>

using namespace std;

class Date
{
private:
	int m_year;
	int m_month;
	int m_day;
public:
	void SetDate(int year, int month, int day)
	{
		m_year = year;
		m_month = month;
		m_day = day;
	}

	void display()
	{
		cout << m_year << '-' << m_month << '-' << m_day << endl;
	}

};

int main()
{
	Date d1, d2;
	d1.SetDate(2019, 11, 28);
	d2.SetDate(2019, 11, 11);
	
	d1.display();
	d2.display();

	system("pause");
	return 0;
}

在上面的这个类中,我们定义了SetDate和display两个成员函数,那么函数是如何知道应该设置d1对象,而不是设置d2对象的呢?

这就引出了this指针,在C++当中,通过this指针就能解决该问题,即:C++编译器给每个“成员函数”增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象)。
在函数体当中,所有成员变量的操作,都是通过该指针去访问。
比如上面的display函数
其实就是

	void display(Date * this)
	{
		cout << this->m_year << '-' << this->m_month << '-' << this->m_day << endl;
	}

this指针的特性

  1. this指针的类型:是当前类类型的指针,this是一个常量指针,不能更改指向
  2. 只能在“成员函数”的内部使用,成员函数中,this指针中的成员不需要使用this指针访问,直接访问即可
  3. 一般成员函数中都含有一个this指针,这个指针指向调用这个成员函数的对象。
发布了235 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44781107/article/details/103292693
今日推荐