类的作用域和实例化

326 阅读1分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战

一、类的作用域

C/C++ 里 {} 定义起来的就是域,就像之前的命名空间域。 这里类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。

class Person
{
public:
	void PrintPersonInfo();
private:
	char _name[20];
	char _gender[3];
	int _age;
};
//这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
	cout<<_name<<" "_gender<<" "<<_age<<endl;
}

在这里插入图片描述 ❓ struct 和 class 在 C++ 中的使用规范 ❔

一般情况下定义类都要使用class,如果全部成员都需要是公有就使用struct。

二、类的实例化

❓ 成员变量/函数的声明和定义 ❔

在这里插入图片描述

📝 说明:

对于成员函数声明是 void Init () ; 定义是 void Queue : : Init () { } ...

对于成员变量声明是 QueueNode* head ; 定义是 Queue q; ...

声明和定义就像借钱,你跟朋友说下午要借你 100 元,朋友承诺了没问题 —— 这就是声明;下午,叮 。。。支付宝收款 100 元,朋友落实了承诺 —— 这就是定义。

再看上图,声明就是告诉你变量的类型、名称,但是还没有开空间;定义就是实例化对象开空间了。

如果 Queue.h 里初始化 ➡ QueueNode* head = nullptr ; ❓

  这里是缺省值,并不是定义,它依然还是声明 (这里以后学到构造函数会证明)。变量的定义是指开空间,跟是否初始化没关系。关于这里的缺省值是 C++11 的语法,后面再详讲。

❗ 用类类型创建对象的过程,称为类的实例化,一个类可以实例化出多个对象 ❕

1️⃣ 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它。

2️⃣ 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量。

3️⃣ 打个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间。 在这里插入图片描述