关于C++

一、C++是什么

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

二、C++的发展

20世纪70年代中期,Bjarne Stroustrup在剑桥大学计算机中心工作。他使用过Simula和ALGOL,接触过C。他对Simula的类体系感受颇深,对ALGOL的结构也很有研究,深知运行效率的意义。既要编程简单、正确可靠,又要运行高效、可移植,是Bjarne Stroustrup的初衷。以C为背景,以Simula思想为基础,正好符合他的设想。1979年,Bjame Sgoustrup到了Bell实验室,开始从事将C改良为带类的C(C with classes)的工作。1983年该语言被正式命名为C++。自从C++被发明以来,它经历了3次主要的修订,每一次修订都为C++增加了新的特征并作了一些修改。第一次修订是在1985年,第二次修订是在1990年,而第三次修订发生在c++的标准化过程中。在20世纪90年代早期,人们开始为C++建立一个标准,并成立了一个ANSI和ISO(Intemational Standards Organization)国际标准化组织的联合标准化委员会。该委员会在1994年1月25曰提出了第一个标准化草案。在这个草案中,委员会在保持Stroustrup最初定义的所有特征的同时,还增加了一些新的特征。

三、C++与C语言的区别

宏观角度变化
1、C++基本支持C语言的所有语法。
2、C++支持面向对象的编程思想。
3、C++支持运算符重载和引用。
4、C++支持泛型编程(模板支持)。
5、C++支持异常处理(catch,try)。
6、严格的类型检查。(void* 不能与其他类型进行转换,其他类型的数据不能为枚举赋值)。

细节的变化
1、文件扩展名
C:.c .h
C++: .cpp .C .cc .cxx

2、编译器
g++ 大多数电脑需要额外安装:Ubuntu sudo aptget g++
gcc 也可以继续使用,但需要添加 lstdc++

3、常用的头文件
#include C++原生头文件不带.h以示与C的区分。
C语言的头文件也能继续使用 #include (stdio.h也能继续使用)。

4、数据的输入输出
cout << 数据 / 变量
cin >> 变量
endl 换行
多个数据之间使用 >> <<间隔
不需要再取地址,不需要点位符,C++会自动推导。
scanf/printf也可以继续使用

5、增加的名字空间
std::标识符 //临时使用
using namespace std; //导入空间,只需要导入一次

6、结构体的变化
在定义结构对象时struct关键字可以省略,不需要再typedef
结构体中可以定义成员函数,只能通过结构对象(-> .)调用,在成员函数中可以直接使用成员量。

7、枚举、联合
a、在定义枚举、联合对象时enum,union可以省略。
b、整型数据不能为枚举赋值。
c、联合中也可以有成员函数,用法与struct一致。

8、操作符别名
在某些欧洲语言所使用的键盘上字母比26个字母多,因此就占用了键盘上“~,&”等符号,国际标准化组织就规则了这些运算符的别名,即使有些运算符不存在,也可以正常的进行编程。
&& > and
|| > or
{ > <%
} > %>

二、函数重载
1、什么是重载:
a)、在同一作用域中,函数名相同但参数表不同,即构成重载关系。
b)、重载与返回值类型无关,与参数名也无关。
c)、重载参数通常是为了完成功能相似但类型不同的函数,统一命名有利于代码的阅读。

2、C++是如何实现重载的。
a)、C++在编译时函数名会经历换名的过程,把原本的函数名添加一些参数类型的缩写形成新的函数名,因此函数名不会重复。
b)、换名机制虽然能够实现重载,但会限制C和C++模块之间的交叉引用。C C++

3、extern “C” { 代码 }
a)要求C++编译器按照C的标准处理函数名(不换名,也无法重载)。因此C++编
译出的代码可以被C调用。
b)C++完全兼容C所以C标准处理的函数名,C++可以自动识别。
c)函数的声明也需要extern “C” {#include “filename.h”}

4、重载和作用域
只有同一作用域下的同名函数才会构成重载,不同作用域下的同名函数构成隐藏。

5、重载解析
a)调用函数时,会根据实参的类型推导出一个函数的版本,这个过程叫做重载解析。
b)然后把推导出的结果与重载集合进行匹配(编译器负责匹配过程),会有三种匹配结果:
1、编译器找到实参最佳的匹配函数,并生成调用代码。
2、找不到与推导结果相匹配的函数,编译器将给出错误信息。
3、存在多个匹配的函数,但没有一个最佳的选择,这种错误叫做二义性。

6、实参的类型转换
为了确定最佳匹配,编译器将类型的匹配分为以下等级:
1、最高等级,精准匹配,实参与形参类型一模一样。
2、const属性实现的匹配,带const属性的实参会优先选择带const的形参
(修饰指针类型的参数)
3、通过类型提升的匹配。
4、通过标准转换实现的匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值