细说C++(一):C与C++对比

<1>.C/C++

C过程性语言,重点在算法和数据结构。

(C作为C++自洽子集)

C++面向过程语言,首要考虑如何构造一个对象模型

 

 

 

<2>.C++的主要内容

基础知识

关键字

数据类型

C++输入输出

函数

指针

标准库

迭代器

容器类库

输入输出类库(C++标准输入输出)

算法(泛型算法)

字符串库(字符串数字,字符串函数)

正则表达式

线程库

实用库等.

(C++语言中的封装、数据隐藏、继承、多态的实现,主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现)

 

 

<3>.C++相比C支持的新特性:

  • 支持函数重载:C语言对变量类型最为敏感,不支持函数重载。而C++语言支持函数重载。 1). 由于参数有类型提升和隐式转换的需求(例如可以将short提升为int,将int提升为long或者double等),所以C++还定义了一套复杂的规则来实现数据类型的显示和隐式转换

2). 同一个作用域内,函数名相同,参数列表不同

3). 函数匹配,编译器首先将调用的实参与重载集合每一个函数形参进行比较,然后决定调用那个函数

 

  • 支持操作符重载:操作符重载也是C++的典型高级应用,和函数重载有类似的地方,可以让代码更加简洁和通俗易懂。

1). C++中只有五个操作符不支持重载:. (成员访问运算符),.* (成员指针访问运算符),:: (域运算符),sizeof(长度运算符)和?:(条件运算符*),其余运算符理论上都可以被重载

2). 作用于类类型运算对象,重载运算符即为具有特殊名字的函数,name=operator+“运算符”

3).对于运算符函数,要么是类的成员,要么至少含有一个类类型的参数

4).重载运算符函数参数=运算符作用对象

 

  • 支持内联函数:1).由于内联函数在函数调用点直接在编译阶段就将代码展开,所以其实是以代码膨胀的代价来减少了函数调用的代价。这对于实现简单且调用频繁的函数而言比较有优势。

2).函数调用要先保存寄存器,并在返回时恢复;可能需要拷贝实参;内联函数则无标准的函数栈帧的开辟和回退

3).内联函数于函数返回类型前面加inline,内联说明只是向编译器发出一个请求,而编译器可以选择忽略

4).内联函数通常放于头文件中(基于inline函数可以多次定义,但必须保持一致)

 

  • 支持const:让常数性成为与类型不可分割的一部分,除了提升安全,让编译器承担检查的责任之外,也有助于代码的优化。

1). const对象一旦创建其值便不可改变,所以必须被初始化

2). const对象默认只在文件内有效,编译器在编译过程中将其替换成相应的值;在const定义或者声明前加上extern,即可被其它文件访问

 

  • 支持引用(reference):1). 基于内置类型定义的复合类型,简化指针的语法,并有效减少指针的使用。

2). 引用即别名,int &refVal=ival 引用必须被初始化

 

  • 支持流操作符:流操作符使得C++的IO变得统一,并且可以提供更为强大的功能。

1). I/O类 包括 iostream,fstream(文件流) sstream (字符串流)

 

  • 支持类和面向对象编程(OOP):这是C++相比于C最大的区别。由于支持类,所以C++中就有了数据封装、继承、多态、虚函数等概念。

由于支持面向对象,所以利用C++就可以很好地在软件系统设计中采用设计模式,从软件工程学的角度来提高系统的可扩展性和代码的可复用性。不过由于C++同时支持面向过程,所以严格意义上来讲它并非完全的面向对象(相比而言Java才是真正意义上的完全面向对象)。

 

  • 支持模板和通用编程(GP):个人认为这是C++除了类之外和C最大的区别和进步了。由于模板可以在一定程度上将程序设计和实现中的算法和数据分离,所以相比于C,C++也就更具有“设计”的概念
//编译器以函数实参来实例化 
template <typename T>

int  hanshu(const T &t1,const T &t2){
	/*
	函数体将要执行的操作 
	*/
	return 0; 
}
  • 支持RAII:RAII(resource acquisition is initialization)即资源获取即初始化(在栈空间中)。这种特性比较独特,在C/C#/Java中都没有相应功能。

 

<4>.C++相比C特点

  • 更严格的类型检查系统:包括异常处理、RTTI(run-time type identification)等。

 

  • 更丰富的标准库:C 语言也有标准的函数库,但它们是松散的,只是把功能相同的函数放在一个头文件中;而 C++ 对于大多数的函数都是集成的很紧密。尤其是当STL被C++标准委员会吸纳为标准之后,C++标准库的丰富程度大大提高了。

 

  • 更强大的结构定义:C 和 C++ 中都有结构的概念,但是两者有如下三个方面的区别:

1)在 C 语言中结构只有成员变量,而没成员方法,而在 C++ 中结构中,它可以有自己的成员变量和成员函数;

2)在 C 语言中结构的成员是公共的,而在C++中允许定义public, protected和private三种级别的访问权限;(其实C语言的结构体,将其视为一个数据的集合体更加切当)

3)C中的结构体不可以继承,而C++的结构体可以被继承

 

注意C++ 类和结构体的唯一区别是默认的访问权限不同而已,class = private    struct  = public

 

 

 

 

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值