首页 > 编程语言 > C++概述

C++概述

时间:2023-01-16 11:22:40浏览次数:53  
标签:语言 编程 c++ C语言 ANSI 概述 C++

 C++概述

1 c++简介

“c++”中的++来自于c语言中的递增运算符++,该运算符将变量加1。c++起初也叫”c with clsss”.通过名称表明,c++是对C的扩展,因此c++是c语言的超集,这意味着任何有效的c程序都是有效的c++程序。c++程序可以使用已有的c程序库。

 

    库是编程模块的集合,可以在程序中调用它们。库对很多常见的编程问题提供了可靠的解决方法,因此可以节省程序员大量的时间和工作量。

 

c++语言在c语言的基础上添加了面向对象编程泛型编程的支持。c++继承了c语言高效,简洁,快速和可移植的传统。

c++融合了3种不同的编程方式:

  • c语言代表的过程性语言.
  • c++在c语言基础上添加的类代表的面向对象语言.
  • c++模板支持的泛型编程。

 

c语言和c++语言的关系:

c++语言是在C语言的基础上,添加了面向对象、模板等现代程序设计语言的特性而发展起来的。两者无论是从语法规则上,还是从运算符的数量和使用上,都非常相似,所以我们常常将这两门语言统称为“C/C++”。

 

C语言和C++并不是对立的竞争关系:

1)C++是C语言的加强,是一种更好的C语言。

2)C++是以C语言为基础的,并且完全兼容C语言的特性。

 

c语言和C++语言的学习是可以相互促进。学好C语言,可以为我们将来进一步地学习C++语言打好基础,而C++语言的学习,也会促进我们对于C语言的理解,从而更好地运用C语言。

 

2 c++起源

与c语言一样,c++也是在贝尔实验室诞生的,Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)在20世纪80年代在这里开发了这种语言。

 

 

 

(C++之父-本贾尼·斯特劳斯特卢普)

 

Stroustrup关心的是让c++更有用,而不是实施特定的编程原理或风格。在确定语言特性方面,真正的编程比纯粹的原理更重要。Stroustrup之所以在c的基础上创建c++,是因为c语言简洁、适合系统编程、使用广泛且与UNIX操作系统联系紧密。

用他自己的话来说,“C++主要是为了我的朋友和我不必再使用汇编语言、C语言或者其他现代高级语言来编程而设计的。它的主要功能是可以更方便得编写出好程序,让每个程序员更加快乐”。

3 可移植性和标准

假设为运行windows 2000的老式奔腾pc编写了一个很好用的c++程序,而管理员决定使用不同操作系统(比如说Mac OS 或 Linux)和处理器的计算机替换它。该程序是否可在新平台运行呢?当然,但是必须使用为新平台设计的c++编译器重新编译。但是是否需要修改写好的代码?如果不需要修改代码的情况下,重新编译程序后,程序依然运行良好,该程序是可移植的。

程序是否可移植性有两个问题需要解决。第一是硬件,针对特定硬件编程的程序是不可移植的。第二,语言的实现,windows xp c++ 和 Redhat Linux 或 Mac OS X对c++的实现不一定相同。虽然我们希望c++版本与其他版本兼容,但是如果没有一个公开的标准,很难做到。因此,美国国家标准局(American National Standards Institute,ANSI)在1990年设立一个委员会专门负责制定c++标准(ANSI制定了c语言的标准)。国际标准化组织(International Organization for Standardization,ISO)很快通过自己的委员会加入到这个行列,创建了联合组织ANSI/ISO,制定c++标准。

经过多年的努力,制定出了一个国际标准ISO/IEC 14882:1998 ,并于1998年获得了ISO、IEC(International  Electrotechnical Committee,国际电工技术委员会)和ANSI的批准。这个标准就是我们经常所说的c++98。它不仅描述了已有的c++特性,还对语言进行了扩展,添加了异常、运行阶段类型识别(RTTI)、模板和标准模板库(STL).

2003年,发布了c++标准第二版(IOS/IEC 14882:2003),这一版本对第一版修订了一些错误,但并没有改变语言特性,因此c++98表示c++98/c++2003.

c++不断发展。IOS标准委员会于2011年8月批准了新标准ISO/IEC 14882:2011,该标准被称为c++11,与c++98一样c++11也新增了许多特性。

ISO c++标准还吸收了ANSI c语言标准,c++尽量做到是c的超集。意味着在理想情况下,任何有效的c程序都应该是有效的c++程序。

ANSI不仅定义了c语言,还 定义了一个ANSI c必须实现的标准c库。c++也在使用这个库,另外ANSI/ISO c++标准还提供了一个c++标准类库。、

4 为什么C++会成功

c++最初的目的是将c语言转变为OOP(面向对象程序设计)语言,但是c++后来并没有这么做,而是立足于程序的实际。因为在c语言方面大量投入的程序员使其完全丢掉c语言那种编程的思考方式,转而去接受一种新的语言,新的思维,那么将会导致这些程序员中大部分人在短时间内可能毫无成果,使其生产率降低。但是如果让这些c程序员在已有知识的基础上,再去学习c++语言,理解运用OOP,那么也只是在其已有思维的基础上进行扩展而已,这样可以保持其更好的生产率。

简而言之,强迫程序员放弃c语言和c语言的思考方式,而去转到OOP上是需要代价的,但是从c语言转到c++所花费的代价就会小很多。所以也可以理解为c++的出现并不是去替代c,而是对c的扩展,所以在c++中既可以使用c++新特性,并且可以使用c的过程式思维来编写程序。

 

   对于传统的结构化语言,我们向来没有太多的疑惑,函数调用那么自然而明显,只是从程序的某一个地点调到另一个地点去执行。但是对于面向对象(OO)语言,我们疑惑就会很多。其原因就是c++编译器为我们程序员做了太多隐藏的工作:构造函数,析构函数、虚函数、继承、多态....有时候它为我们合成出一些额外的函数,有时候它又偷偷在我们写的函数里,放进更多的操作。有时候也会给我们的对象里放进一些奇妙的东西,使得我们sizeof的时候结果可我们预期不一样。

标签:语言,编程,c++,C语言,ANSI,概述,C++
From: https://www.cnblogs.com/yaoguaidexiaocao/p/17054989.html

相关文章

  • python和C++调用动态库
    python和C++调用动态库python和C++相互调用动态库的方法有4种:python调用C/C++编译的动态库python调用python编译的动态库C/C++调用python编译的动态库C/C++调用C/C++......
  • 数据库概述
    数据库持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化......
  • C++11的多线程开发
    多线程并发总览创建线程使用互斥量异步线程原子类型生产者消费者模型线程池‍创建线程#include<iostream>#include<thread>#include<mutex>#include<fu......
  • C++|变量
    C++|变量前言在C++编程中,需要用到很多种变量本文将详谈几种常见变量如有错误,欢迎指出一、数字数据类型如图所示,虽然C++提供了许多数据类型,但在最广泛的意义上......
  • 【c++】以函数调用的方式来书写矩阵乘法
    一、第一版/*m:A的行*o:A的列,B的行*n:B的列*res:存储最终的结果*/voidmulti(doubleA0[21][21],doubleB0[21][21],intm,into,intn,doubleres[21][21]){......
  • 【C++高级编程】(五)编码风格
                                                         ......
  • C++中string占用内存大小
    转自:https://blog.csdn.net/DLUTBruceZhang/article/details/98222351.例子intmain(){strings="abc";cout<<sizeof(s)<<"\n";cout<<sizeof(string)<<"......
  • effective modern c++ - 1 理解模板类别推导
    模板中的行参类型推断会省略引用在这两种模板中,行参的引用都会在推断过程中被省略template<typenameT>//templateAvoidf(T&param);template<typenameT>//temp......
  • C++追加单个字符
    在C++中如何在字符串的后面追加单个的字符呢?代码如下:stringstr;for(chari='A';i<='Z';i++){str+=i;}cout<<str<<endl<<endl;------------------------------......
  • C++获取输入的空格
    在控制台输入输出中,有时候我们想获取用户输入的空格,该如何做呢?在C++中通常的获取输入的方法如下:#include"stdafx.h"#include<iostream>#include<string>usingnamespaces......