类与对象(上)

目录

一、认识面向过程与面向对象

二、类的引入

三、类的定义

1、类有两种定义方式:

1.定义与声明全部放在类体中。

2.类声明在.h文件中,成员函数定义在.cpp文件中。

2、成员变量命名规则的建议

四、类的访问限定符与封装

1.封装

2.访问限定符

五、类的实例化


一、认识面向过程与面向对象

我们之前学过的c语言是一种面向过程的语言,面向过程指代码关注的是过程,分析求解解决问题的步骤,通过函数调用逐步解决问题。而c++则是面向对象的语言,指关注的是对象,将一件事情拆分成不同的对象,通过不同对象之间的交互来完成。

打个比方:一个外卖系统中,面向过程关注:上架、接单、出餐、送餐等过程。而面向对象则只需关注:商家、骑手、用户三个过程,通过他们之间的交互来完成一次外卖事件。

二、类的引入

在c语言中我们知道一种结构类型叫作结构体,能在其中定义变量。而在c++中,对结构体进行了升级,使其不仅能定义变量,还能定义函数。例如:在实现一个栈时,我们可以将栈的初始化、入栈、栈的销毁等函数都写入栈这个结构体中,比c语言要方便许多。在用c语言实现栈和队列时,每一个功能我们都需要分别写一个函数,在之后调用时也总要打出函数名来调用,非常麻烦。而在c++中,我们可以直接在结构体中找到相应的函数,直接调用,使代码更加高效。

struct stack 
{
	void Init(size_t capacity = 4)
	{
		_a = (int*)malloc(sizeof(int) * capacity);
		_top = 0;
		_capacity = capacity;
	}
	void Push(const int& data)
	{
		_a[_top] = data;
		_top++;
	}
	void destroy()
	{
		if (_a)
		{
			free(_a);
			_top = 0;
			_a = nullptr;
		}
	}
	int* _a;
	int _top;
	int _capacity;
};

而在c++中,我们又给这种升级后的结构体取名叫,用class来代替struct

三、类的定义

class classname
{
	//类体:包括成员函数和成员变量
	//...
};//注意分号

class为定义类的关键字,classname为类的名字,{}内为类的主体,包括成员变量(又叫类的属性)和成员函数(又叫类的方法)。

1、类有两种定义方式:

1.定义与声明全部放在类体中。

这样的话需要注意的是,成员函数如果在类中定义,编译器可能会将其做内联函数处理。但最终是否成为内联函数,仍然取决于编译器。

2.类声明在.h文件中,成员函数定义在.cpp文件中。

注意:成员函数前需要加  类名:: 因为类定义了一个新的作用域,其目的是打开类域

在一般情况中,我们尽量使用第二种。

2、成员变量命名规则的建议

我们首先来看下面这个代码:

class data
{
	void init(int year)
	{
		year = year;
		//这里的year到底是函数形参还是成员变量??
	}
	int year;
	int mouth;
	int day;
};

我们无法辨别成员函数中year=year中的year到底是函数形参还是成员变量,所以为了方便分辨,我们通常在成员变量前加下划线_,可改成如下:

class data
{
	void init(int year)
	{
		_year = year;
		//这里的year到底是函数形参还是成员变量??
	}
	int _year;
	int _mouth;
	int _day;
};

四、类的访问限定符与封装

1.封装

面向对象有三个主要特性:封装、继承、多态。我们这里先来了解封装。

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来
和对象进行交互。
封装本质上是一种管理,让用户更方便使用类 。例如,在博物馆中我们可以看到文物都放在玻璃柜里,玻璃把文物和游客分隔开了,这样就有利于对文物进行管理,使其不被破坏。也就是说文物被封装起来了。在c++中,我们将类进行封装, 通过类将数据以及操作数据的方法进行有机结合,通过访问权限来隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。
使用户只能使用能看到的部分,将其他剩下的重要的部分隐藏了起来,这也就很好的实现了对数据的保护。

2.访问限定符

c++中实现封装的方法便是访问限定符。访问限定符分为三个:public(公有)、protected(保护)、private(私有)。

其中:

1.public修饰的成员在类外可以直接访问。protected和private修饰的成员在类外不能直接访问

2.访问限定符的有效范围从其开始的位置到下一个访问限定符出现为止,或是后面没有访问限定符,到}为止。

3.c++为了兼容c语言,struct的默认访问权限为public,而class的默认访问权限为private

五、类的实例化

用类类型创建对象的过程,称为类的实例化

类是对对象进行描述的,是一个模型。定义一个类时并没有分配实际的内存空间来储存它。一个类可以实际化出多个对象,实际化出的对象占用实际的物理空间,储存类成员变量

打个比方,定义类只是一张房子的设计图纸,没有实际的房子。而实际化出的对象,就是根据这个图纸建造出的实际存在的房子。

如下代码:person只是定义了一个类,man1是类的实际化。

class person//没有开辟空间
{
public:
	char* name[20];
	int age;
	int phone;
};

int main()
{
	person man1;//开辟了空间
	man1.age = 20;
	//...
	return 0;
}

你可能感兴趣的:(c++)