C++理论概述及其对C语言的升级

1、为什么选择C++语言?

首先其作为嵌入书工程师的岗位需求,其次其是面向对象的编程语言,直接分析用户需求中涉及的各个实体,在代码中描述现实世界中的实体,关联各个实体协同工作来解决问题,能够适应用户需求的不断变化,直接利用面向过程方法的优势,最后C++明显的优势在于学习C++可以强化C语言编程能力,提高编程的代码质量,还可以帮助学习其他编程语言

 

2、C++为什么难学?

C++支持过程式、数据抽象、基于对象、面向对象式、函数式、泛型形式、模板元模式

 

3、C++语言之父?

本贾尼·斯特劳斯特卢普

4、C++的标准

C++ 98 标准

C++标准第一版,1998年发布。正式名称为ISO/IEC 14882:1998[17]  

C++ 03 标准

C++标准第二版,2003年发布。正式名称为ISO/IEC 14882:2003[18]  

C++ 11 标准

C++标准第三版,2011812日发布。正式名称为ISO/IEC 14882:2011[19]  

C++11对容器类的方法做了三项主要修改。

首先,新增的右值引用使得能够给容器提供移动语义。其次,由于新增了模板类initilizer_list,因此新增了将initilizer_list作为参数的构造函数和赋值运算符。第三,新增的可变参数模板(variadic template)和函数参数包(parameter pack)使得可以提供就地创建(emplacement)方法。

C++ 14 标准

C++标准第四版,2014818日发布。正式名称为ISO/IEC 14882:2014[21]  

C++14C++11的增量更新,主要是支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化等[22]  

5、C++11值得学习的新特性

①智能指针如shared_ptrweak_ptr

rvalue reference

function/bind

lambda expression and closure

 

CC++的升级

1、声明定义:C++中强调语言的“实用性”,所有变量在需要使用的时候再定义

如:C语言中定义循环是

int i;

for(i = 0 ; i < 5 ;i++);

C++定义时

for(int i = 0 ; i < 5 ; i++);

2、register关键字的变化

C语言中:register关键字表示请求编译器将其修饰的变量的值保存到CPU内部寄存器中,从而省去CPU从内存中抓取数据的时间,提高运行效率,但是register只能修饰局部变量,不能修饰全局变量,不能用&来获取一个register修饰的变量的地址

C++中:依然支持register关键字,可以取得register变量的地址,因为C++编译器发现程序中需要去register变量的地址时,register对变量的声明变得无效

3、const关键字的变化

C++中:const变量对应const变量,非const变量对应非const变量,没有路径修改const修饰的变量

4、内存分配与释放(new/delete

C++中通过new关键字进行动态内存申请

C++中的动态内存申请是基于类型进行的

delete关键字用于内存释放

变量申请:                      数组申请:

Type * pointer = new Type;          Type * pointer = new Type[N];

//......                           //......

delete pointer;                   delete[] pointer;

 

newmalloc函数的区别:

new关键字是C++的一部分,是关键字;而mallocC库提供的函数

new以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配

new在申请单个类型变量式可进行初始化,malloc不具备内存初始化的特性

习惯使用:char * ptr = new char[100];

          memset (ptr,0,sizeof(char)*100);进行初始化

5、引用VS指针(在实际应用中,引用一般用作参数传递与返回值)

①引用的定义:引用指某个目标变量的别名,不需要分配空间

②格式: 类型 &引用名 = 变量名

例:int a = 1;

int &b = a;//ba的别名,从而ab是同一个单元

注:定义引用时一定要初始化,指明该引用变量是谁的别名

6、引用:函数传参

引用传递方式是在函数定义时在形参前面加上引用运算符&

例:void add(int &a,int &b);

①按值传递:但形参值得改变不能对实参产生影响

②地址传递方式通过形参的改变使相应的实参改变

7、引用:函数返回值

函数返回引用的一个主要目的是可以将函数放在赋值运算符的符的左边

注:不能返回对局部变量的引用

例:int &add(int &num)

    {

        return temp;

}

8、引用于指针的区别

①引用访问一个变量是直接访问,而指针是间接访问

②引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间

③引用一经初始化不能再引用其它变量,而指针可以

④尽可能使用引用,不得已时使用指针

9、函数重载(overload

含义:相同的作用域,如果两个函数名称相同,而参数不同,则称之为重载(overload

10、函数重载条件

重载的不同形式:形参数量不同,形参类型不同,形参的顺序不同,形参数量和形参类型都不同

注:函数返回值不能作为重载的条件

11、命名空间

C语言中只有一个全局作用域,从而标识符之间可能发生冲突;从而C++中提出了命名空间的概念,命名空间将全局作用域分成不同的部分,不同命名空间中的标识符可以同名而不会发生冲突,命名空间可以相互嵌套

12、C++命名空间的使用

使用整个命名空间:using namespace name;

使用命名空间中的变量:using name :: variable;

使用默认命名空间中的变量: ::variable;

注:默认情况下可直接使用默认命名空间中的所有标识符

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值