【C++闯关笔记】封装①:类与对象

 系列前言

为了更好地梳理自己的学习脉络巩固对这些基石概念的理解,并希望能为同样踏上C++ OOP学习之旅的朋友们提供一份参考,我决定将我的学习过程、思考和实践心得整理成这个博客系列。这并不是专家居高临下的指导,而是一位同路人边走边记的手记。

与君共勉,共同进步。

文章前言

C++面向对象编程的三驾马车——封装、继承、多态。

本文主要介绍“封装”,“封装”是C++面向对象编程的基础,但对于刚接触C++的新人而言,上来直接就讲封装可能不是很友好,所有本文先从“为什么C++被称为面向对象编程,而C语言则被称为面向过程编程了”入手,在理解了面向对象编程之后,再给出类的定义以及访问限定符等内容,最后情调类的六个默认构造函数。


一、类是什么?

1.理解面向过程与面向对象

我们拿洗衣服这个例子来理解面向过程与面向对象的不同:

先站在人类的角度思考整个洗衣服的过程:人将衣服放入洗衣机,倒入洗衣液,启动洗衣机。

这用C语言也很容易描述:各种的对象创建相应的变量存储状态,期间可以用不同的函数按照一定顺序实现,从而解决洗衣服这个任务。这其中主要关注先后过程算法。

C语言的实现方式很符合人类的思考过程,也可以说人们就是按照人类解决事物的方法流程发明了面向过程的C语言:

面向过程

C语言是面向过程的,关注的是过程:分析出求解问题的步骤,通过函数调用逐步解决问题。

C语言似乎已经能解决问题,那还为什么要引入C++呢?——这是作者曾经的疑惑,相信也是不少初学者的困惑。

考虑以下场景:如果我们将上述衣服的种类换了,或者洗衣机改成滚筒洗衣机等操作,这些需要修改具体函数,甚至可能需要更改整个代码的执行逻辑:比如有些衣服要先洗,想要执行什么操作得先执行某操作。于是人们发现C语言得可拓展性不好,稍加改动甚至可能要重构整个程序,这显然是很麻烦的。

为了解决上述问题,也为了符合实际生活中快速更新换代的需求,人们又在C语言的基础上发展了C++:

C++程序由对象组成。对象是类的实体,对象里面包含了数据(属性)操作这些数据的函数(功能),通过对象之间交互完成任务。

怎么理解呢?我们还是拿洗衣服举例:

洗衣服这个任务可以拆分成四个关键对象:人、衣服、洗衣机、洗衣液。

这四个对象它们分别有着各自的属性和功能,我们可以抽象提取出它们的属性和功能:

{

人(属性可以有性别、年龄;功能可以是能做的事情);

衣服(属性可以是材质;功能可以是保暖);

洗衣机(属性可以是品牌;功能可以是洗衣、脱水);

洗衣液(属性可以是效果;功能可以是洗衣)。

}

C++就是通过类似上述抽象提取,将任务对象的属性和功能封装成类(类中包含相应的属性和功能),再依任务需求实例化出不同对象,通过对象之间交互完成任务。这种方法就叫做:

面向对象

C++是基于面向对象的,关注的是对象:将一件事情拆分成不同的对象,靠对象之间的交互完成。

小白第一次理解C++面向对象的逻辑可能有些困难,但不必担心随着日后编程的逐渐深入,对于面向对象这一概念的理解会越发清晰,所以大可不必焦虑。但类的实现其实很简单,读者可以将类比作一种特殊的“结构体”,只不过这种结构体里面能定义函数。

2.类的引入

C语言结构体中只能定义变量,但在C++中,结构体内不仅可以定义变量,也可以定义函数。

代码语言:javascript

AI代码解释

struct Node
{
	int _val;
	struct Node* _next;

	void Init()
	{
		_val = 0;
		_next = NULL;
	}
};

在实际过程中,C++更喜欢用class来代替struct:

代码语言:javascript

AI代码解释

class Node
{
	int _val;
	struct Node* _next;

	void Init()
	{
		_val = 0;
		_next = nullptr;
	}
};

所以,刚接触C++的新人朋友如果还是对类的概念模糊,那么大可将类当作“大号结构体”来看待和使用,在后面的学习中再逐渐完善对类的认识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值