《C++ 开发从入门到精通》——2.6 技术解惑

简介:

2.6 技术解惑

2.6.1 C++是面向对象,C是面向过程,那么这个对象和过程是什么意思呢

面向对象指的是把属性和方法封装成类,实例化对象后,要完成某个操作时,直接调用类里面相应的方法。面向过程则不进行封装,要完成什么功能需要详细地把算法写出来。举个例子来说,我要完成买东西这个任务,面向对象的实现方法就是,先对手下的人进行指导,教他们怎么去买(相当于定义类的属性和方法),以后要让他们买东西,只要喊“张三(或者李四,相当于实例化对象),你用上次我教你的方法去买个东西”,这样就可以了。而面向过程的方法则不进行指导,每次要去买东西,都找张三过来,再教他怎么去买,但是下次再喊他去买,又要重新教一次。

2.6.2 面向对象和面向过程的区别

C语言是一门面向过程的语言,C++是一门面向对象的语言。究竟面向对象和面向过程有什么区别呢?面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

例如开发一个五子棋游戏,使用面向过程的设计思路的步骤如下。

① 开始游戏。

② 黑子先走。

③ 绘制画面。

④ 判断输赢。

⑤ 轮到白子。

⑥ 绘制画面。

⑦ 判断输赢。

⑧ 返回步骤②。

⑨ 输出最后结果。

把上面每个步骤用各自的函数来实现,问题就解决了。而面向对象的设计则是从另外的思路来解决问题的,开发整个五子棋游戏的基本过程如下。

① 设计黑白双方,这两方的行为是一模一样的。

② 设计棋盘系统,负责绘制画面。

③ 开发规则系统,负责判定诸如犯规、输赢等。

上述3个过程分别代表3个对象,其中第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

由此可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了诸多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

功能上的统一保证了面向对象设计的可扩展性,比如要加入“悔棋”这一功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的顺序都要进行大规模调整。如果是面向对象的话,只改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

再比如,要把这个五子棋游戏改为围棋游戏,如果使用的是面向过程设计,那么五子棋的规则就分布在了程序的每一个角落,要改动还不如重写。但是如果一开始就使用了面向对象的设计,那么只改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?而下棋的大致步骤从面向对象的角度来看没有任何变化。

当然,要达到“改动只是局部的”,需要设计者有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性。

2.6.3 学好C++的建议

(1)学得要深入,基础要扎实

基础的作用不必多说,在大学课堂上老师曾经讲过很多次了,在此重点说明“深入”。职场不是学校,企业要求你能高效完成项目功能,但是现实中的项目种类繁多,我们需要掌握C++技术的精髓。走马观花式的学习已经被社会所淘汰,入门水平不会被开发公司所接受,他们需要的是高手。

(2)恒心,演练,举一反三

学习编程的过程是枯燥的过程,我们需要将学习C++当成是自己的乐趣,只有做到持之以恒才能有机会学好。另外,编程最注重实践,最害怕闭门造车。每一个语法,每一个知识点,都要反复用实例来演练,这样才能加深对知识的理解。并且要做到举一反三,只有这样才能对知识深入理解。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接

相关文章
|
3月前
|
IDE 开发工具 C语言
C++一分钟之-嵌入式编程与裸机开发
通过这些内容的详细介绍和实例解析,希望能帮助您深入理解C++在嵌入式编程与裸机开发中的应用,提高开发效率和代码质量。
98 13
WK
|
5月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
244 1
|
7月前
|
存储 算法 C++
C++提高篇:泛型编程和STL技术详解,探讨C++更深层的使用
文章详细探讨了C++中的泛型编程与STL技术,重点讲解了如何使用模板来创建通用的函数和类,以及模板在提高代码复用性和灵活性方面的作用。
114 2
C++提高篇:泛型编程和STL技术详解,探讨C++更深层的使用
|
6月前
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
188 7
WK
|
5月前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
145 0
WK
|
5月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
254 0
|
7月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
6月前
|
NoSQL API Redis
如何使用 C++ 开发 Redis 模块
如何使用 C++ 开发 Redis 模块
|
2月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
8天前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
40 12

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等