C++ 系列 第二篇 你真的了解C++吗?本篇带你走进C++的世界

前言

        本篇从宏观的概念上介绍C++的特性,大家先从整体框架、概念上了解C++ 能干啥,是怎么用的,再去学习具体的语言技术点,这样学习的过程中会始终有指导方针,而不至于懵逼,这和我们平常学习其他知识的套路是一样的,比如学习操作系统,如果一头扎进代码里,是搞不下去的,只有通篇了解了操作系统的组成,及各模块的协作机制再去详细研究具体的点才能有所收获,循序渐进。

C语言特性

        一般来说,计算机语言要处理两个概念--数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。C语言在最初面世时是过程性(procedural)语言,这意味着它强调的是编程的算法方面。从概念上说,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实现这些操作。C语言避免了结构混乱,具有结构化编程的特性,同时具有自顶向下编程的特性。(结构化编程可以参考 之前 软件设计 博文)。

C++语言增强特性      

         C++融合了3种不同的编程方式:C语言代表的过程性编程、C++在语言基础上添加的类代表的面向对象编程、C++模板支持的泛型编程。

面向对象编程(OOP)    

        虽然结构化编程的理念提高了程序的清晰度、可靠性,并使之便于维护,但它在编写大型程序时,仍面临着挑战,比如多驱动的文件系统对用户提供统一的接口(unix里抽象文件系统虽然是C编写,但是用的完全是面向对象和泛型编程思想)。为应付这种挑战,OOP提供了一种新方法。与强调算法的过程性编程不同的是,OOP 强调的是数据。OOP 不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图让语言来满足问题的要求。其理念是设计与问题的本质特性相对应的数据格式

        在 C++中,类是一种规范,它描述了这种新型数据格式,对象是根据这种规范构造的特定数据结构。例如,类可以描述公司管理人员的基本特征(姓名、头衔、工资、特长等),而对象则代表特定的管理人员。通常,类规定了可使用哪些数据来表示对象以及可以对这些数据执行哪些操作。

        OOP 程序设计方法首先设计类,它们准确地表示了程序要处理的东西。例如,绘图程序可能定义表示矩形、直线、圆、画刷、画笔的类。类定义描述了对每个类可执行的操作,如移动圆或旋转直线。然后您便可以设计一个使用这些类的对象的程序。从低级组织(如类)到高级组织(如程序)的处理过程叫做自下向上(bottom-up)的编程。

        OOP 编程并不仅仅是将数据和方法合并为类定义。还有一系列其它特性,比如 封装可以保护数据,使其免遭不适当的访问。多态能够为运算符和函数创建多个定义,通过编程上下文来确定使用哪个定义。继承能够使用旧类派生出新类。

        OOP 引入了很多新的理念,使用的编程方法不同于过程性编程。它不是将重点放在任务上,而是放在表示概念上。有时不一定使用自上向下的编程方法,而是使用自下向上的编程方法。
设计有用、可靠的类是一项艰巨的任务,幸运的是,OOP 语言使程序员在编程中能够轻松地使用已有的类。厂商提供了大量有用的类库,包括设计用于简化 Windows 或 Macintosh 环境下编程的类库。C++真正的优点之一是:可以方便地重用和修改现有的、经过仔细测试的代码。

泛型编程

        泛型编程(generic programming)是C++支持的另一种编程模式。它与 OOP 的目标相同,即使重用代码和抽象通用概念的技术更简单。不过 OOP 强调的是编程的数据方面,而泛型编程强调的是独立于特定数据类型。它们的侧重点不同。OOP是一个管理大型项目的工具,而泛型编程提供了执行常见任务(如对数据排序或合并链表)的工具。术语泛型(generic)指的是创建独立于类型的代码。C++的数据表示有多种类型--整数、小数、字符、字符串、用户定义的、由多种类型组成的复合结构。例如,要对不同类型的数据进行排序,通常必须为每种类型创建一个排序函数。泛型编程需要对语言进行扩展,以便可以只编写一个泛型(即不是特定类型的)函数,并将其用于各种实际类型。C++模板提供了完成这种任务的机制。

C++的发展历史

        这里简单总结下C++的发展历史,及各版本主要差异,主要是想说明,这么多版本,我们该怎么去学习C++。C++98 、C++11、C++20都是比较大的版本更新,中间版本基本都是对 前边版本的补充修改,以我个人来讲,可能会找一本涵盖C++11知识点 的书看起,原因是,C++学习的书籍较其它语言来说真的不多,比较经典的书籍基本都只涵盖到了11,还有一个原因是,从更新历史看,基本都是新特性的增加,找本经典书籍把基本语法和设计思路学明白了,再根据项目需要上手高级特性,相对会轻松,还是 文章开头讲到的,如果开始就一头扎进 去,想了解所有的包括最新的特性,一定是坚持不下去的。

        从这个链接中也可以看到 C++11 的语言特性和功能特性都是增加比较多的,所以找涵盖C++11的书籍去看是没有错的。(https://github.com/AnthonyCalandra/modern-cpp-features)

历史

        C++起源于C语言,Bjarne Stroustrup在C语言的基础上扩展了一些面向对象的特性,从而创建了C++。他的目标是提供一种更加灵活和功能强大的编程语言,以满足大规模软件开发的需求。

C++在发展过程中经历了多个版本和标准的演变。下面是一些重要的版本和特性的概述:

1.C++98/03:这是最早的C++标准,注意之前C++已经有很多年了,但这是第一个制定标准的版本,这个版本称为C++98, 后期修订版为C++03,但是因为并没有增加什么特别新的特性,只是98的修订,所以统称C++98/03。它包含了面向对象编程的基本特性,如类、继承、多态等,同时对该语言进行了扩展,添加了异常、运行阶段类型识别(RTTI)、模板和标准模板库(STL)等。

2. C++11:C++11于2011年发布,是C++的一个重要版本。它引入了许多新特性,如自动类型推导、lambda表达式、右值引用、智能指针、多线程支持等。C++11的发布极大地改进了C++的表达能力和编程体验。

3. C++14和C++17:C++14和C++17是在C++11基础上的进一步改进。它们引入了一些新特性,如通用Lambda表达式、二进制字面量、constexpr函数、变量模板、折叠表达式等。这些版本的发布进一步提高了C++的灵活性和性能。

4. C++20:C++20于2020年发布。它引入了一系列新特性,如概念(Concepts)、协程(Coroutines)、范围(Ranges)、三路比较运算符(Three-way comparison)、模块(Modules)等。C++20的发布使得C++成为一个更加现代化和强大的编程语言,同时C++20的改动量基本能媲美C++11 的改动量了。

5.C++23:C++23引入了许多新的特性和改进,包括模块化、概念、范围、反射等。

总结

        基于以上的一些列总结,大家应该对C++ 设计思路 及能够 解决的场景问题 心里有底了,后续在学习C++的一些特性时 可以始终带着 “类、封装、多态、继承” 这些概念 去进行多范围的思考。同时本文也抛出了C++版本众多的问题,各位可以思考下自己想怎么学,适合怎么学。

你可能感兴趣的:(C++,c++,开发语言,c语言)