
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
C语言是程序员在学习软件编程开发的时候会接触和学习的一种底层编程开发语言,而今天我们就通过案例分析来了解一下,C语言都有哪些常见子语言。
(1)C
归根结底,C++仍然是基于C的。blocks(模块)、statements(语句、preprocessor(预处理器)、built-indatatypes(内建数据类型)、arrays(数组)、pointers(指针)等,全都是来自于C。在很多方面,C++提出了比相应C版本更高级的解决问题的方法,例如内联函数、引用、函数和操作符重载等。这些特性能够和传统的C很好地结合在一起,可以视对C的扩充体现了C++的“AbetterC”的初衷。
(2)Object-OrientedC++
面向对象的C++就是CwithClasses涉及到的全部:classes(类)、encapsulation(封装)、inheritance(继承)、polymorphism(多态)、virtualfunctions(虚函数)等。C++这一部分直接用于object-orienteddesign(面向对象设计)的规则。
(3)TemplateC++
这是C++genericprogramming(泛型编程)部分,大多数程序员对此缺乏经验。Template(模板)的考虑已遍及C++,而且好的编程规则中包含特殊的template-only(模板专用)条款已经不再不同寻常。实际上,tempalate(功能)极为强大,它提供了一种全新的programmingparadigm(编程范式)——templatemetaprogramming(TMP,模板元编程)。
(4)STL(StandardTemplateLibrary,标准模板库)
STL是个template程序库,看名称就知道,但它是非常特殊的一个。它对容器(container)、迭代器(iterator)、算法(algorithm)以及函数对象(functionobjects)的规约有极佳的紧密配合与协调。但是templates即程序库也可以以其他的方式建立起来。STL有很多独特的处理方法,使用STL编程时,需要遵循它的规则。
C++的四种子语言(sublanguages)紧密地结合在一起,但它们的确又有各自鲜明的风格。当从一种子语言转到另一种时,为了搞笑编程时需要改变编程的策略,这是C++程序员可能遇到的情形,对此必须有心里准备。例如,使用built-in(内建)类型时,pass-by-value(传值)通常比pass-by-reference(传引用)更高效。但当从C++的C部分转移到Object-OrientedC++(面向对象C++),由于传值传值调用会导致建立参数的副本,调用用户自定义的构造函数和析构函数会降低效率,所以更好的做法是传const引用。在TemplateC++中工作时,这一点更加重要。因为在这种情况下,你甚至不知道你的操作涉及到的对象的类型。然而,当你进入STL,由于iterator(迭代器)和functionobjects(函数对象)以C的pointers(指针)为原型塑造出来的,所以对STL的迭代器和函数对象而言,旧式的C中的pass-by-value(传值)规则又重新生效。
因此,C++不是使用一套规则的单一语言,而是由上面四个子语言组成的联邦语言。每一种都有自己的规则。有了这样的理解,就能更清楚地了解C++的内部结构,并能根据不同的应用需求使用不同的子语言,充分发挥C++语言的长处。
C++的的复杂性可以体现在以下三个方面:
(1)学习周期长。C++由于其内在的复杂机制,要想成为一名合格的C++程序员,业界的规律是3到5年。
(2)开发效率低。主要是历史原因,C++诸多库都停留在“很低”的层次上,使用的便利性无法与RAD工具(RapidApplicationDevelop,快速应用开发)相提并论。有人提议将C++库的层次提高,但是这是一件非常苦难的工作,原因是这与C++语言的设计理念是有冲突的,C++希望大限度地保持通用性和底层性。
(3)容易犯错,维护难度大。C++是一种功能强大且自由度极大的语言,使用C++的过程中一不小心就犯下错误,留下代码漏洞,特别对于初学者,要能够自如高效的使用C++语言需要很长时间的磨练。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。