c++概述、c++对c的升级

1、嵌入式中为什么要学习c++语言?

2、面向过程编程和面向对象编程的区别
(1)面向过程编程的特点
面向过程程序设计:数据结构+算法
主要解决科学计算问题,用户需求简单而固定。
特点:
分析解决问题的所需要的步骤,利用函数实现各个步骤,依次调用函数解决问题。
问题:
软件的可重用性差,软件的可维护性差,构建的软件无法满足用户的需求。

c语言的特点
1、c语言是在实践的过程中逐步完善起来的,因此没有深思熟虑的设计过程,使用时存在很多的“灰色地带”,
2、残留过多的低级语言的特征,例如对用指针进行内存的操作。
c语言的目标是高效的,最终的执行效率高效。

(2)面向对象编程的特点

面向对象的程序设计:由现实世界建立软件模型
1、直接分析用户需求中涉及的各个实体
2、在代码中描述现实世界中的实体
3、在代码中关联各个实体协同工作解决问题

优势:
1、构建的软件能够适应用户的需求不断变化
2、直接利用面向过程方法的优势而避开其劣势。

c++语言的特点:
面向过程方法论暴露越来越多的缺陷的时候,业界开始在工程项目中引入面向过程的设计方法,儿第一个需要解决的问题就是:高效的面向对象语言,并且能够兼容已存在的代码。

学习c++优势:
强化c语言的编程能力、提高编写的代码质量。
帮组学习其他的编程语言。
这里写图片描述

现代软件产品的特点:
1、系统一般由多种语言写成的
2、系统架构的目标是拥抱用户需求的变化。
3、系统拥有较好的移植性。
3、系统能够方便的部署和更新。

操作系统的修改和驱动程序的开发在现代软件产品开发中占据的比重越来越小。

学习其他语言的必要性:
1、所有的软件系统都是为了满足用户的需求开发的
2、对于一个开发团队来说,在短期内开发用户满意的软件系统是其核心竞争力体现。
3、对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。
4、对于一个架构师而言,掌握各种语言的优势并合理运用到系统中,从而简化系统的开发,是其架构生涯的第一步。

3、c++学习的难点所在在:

c++支持编程范式:
这里写图片描述
c++相关的基础知识点:
1、c++语言之父
本贾尼·斯特劳斯特卢普

1982年,美国AT&T公司贝尔实验室的Bjarne Stroustrup博士在c语言的基础上引入并扩充了面向对象的概念,发明了—种新的程序语言。为了表达该语言与c语言的渊源关系,它被命名为C++。而Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)博士被尊称为C++语言之父。
2、c++的语言标准
C++ 98 标准
C++标准第一版,1998年发布。正式名称为ISO/IEC 14882:1998[17] 。

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

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

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

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

C++ 14 标准
C++标准第四版,2014年8月18日发布。正式名称为ISO/IEC 14882:2014[21] 。
C++14是C++11的增量更新,主要是支持普通函数的返回类型推演,泛型 lambda,扩展的 lambda 捕获,对 constexpr 函数限制的修订,constexpr变量模板化等[22] 。

3、c++IDE:
1) kDevelop
Kdevelop 是 C/C++ 和其他语言的开源插件可扩展 IDE,是基于 KDevPlatform ,KDevPlatform 是个开源程序集,可以作为 IDE 的基础。Kdevelop_cpp
2) Anjuta
Anjuta Devstudio 是另一个卓越的开发环境,拥有很多超棒的功能,包括项目管理,应用程序向导,交互式调试器,源代码编辑器,版本控制,GUI 设计工具,性能分析器等等。这个 IDE 提供超强大的用户界面开发 C/C++ 程序的接口。
3) Code Blocks
code block 是最流行的免费开源的集成环境之一,这个 IDE 包括所有开发者需要的功能,比如:高效的用户界面,编译器和调试器等等。
4) Visual Mingw
Visual-MigGW 是个极其对象的开源 IDE。它所有 Windows API 都变得极其简单,可以进行快速开发。它提供一个简化代码和获取 C++ 对象的模块,提前准备好使用应用框架的环境。
best-c++-code editor-visual-min
5) Ideone
Ideone 是 C 和 C++ 的在线编译和调试工具,支持其他的 60 种语言。这个工具提供许多强大的功能,允许程序员快速高效的编译源代码。
6) Eclipse CDT
Eclipse CDT 是最权威也是最流行的 IDE,提供超多高效的特性:支持项目创建和各种工具链的管理,标准 make 构建,源代码导航,各种源知识工具,有语法高亮显示功能的代码编辑器,可视化的调试工具,博阿奎内存,寄存器和反汇编查看器。
7) Compilr
compiler 是个在线集成开发工具,允许用户使用工具来编写代码和创建简单的用户界面。此工具支持超级多的编程语言,比如 C,C++,Java,HTML 等等。
8) Code Lite
Code lite 是另一个超级棒的免费开源的 C 和 C++ 的 IDE,可以在所有流行的平台上运行(Windows,OS X,Linux 等)
9) Netbeans C++
Netbeans 工具包括大量的 C 和 C++ 的适用的项目类型模版,可以使用动态和静态库去创建 C/C++ 应用。它包括了一系列的特性,得到了广大程序员的喜爱: Code assistance,编译器配置,单元测试,source inspection,远程开发和文件导航等等。

二、从C到C++的升级

1、声明定义
c++更强调语言的“实用性”,所有的变量都可以在使用的时候定义。
+++++++++++++++++
for(int i = 0; i < 100; i++)

{
……………….
}
但作用域只限定在for循环中。
++++++++++++++++++++

2、register 关键字的升级
在c语言中register关键字是请求编译器尽量将变量保存到cpu的寄存器中,减少cpu从内存中抓取数据的时间,从而提高程序的运行效率。一般将频繁被访问的变量或者循环变量用register修饰。
在c语言中register的注意点:
注意:①无法修饰全局变量,无法修饰函数
②register修饰的变量,不能通过&来获取变量的地址
③register修饰的类型必须为cpu所接收的

在c++中依然支持register关键字,c++编译器有自己的优化方式,不使用register也能优化。
c++中可以取得register变量的地址。
c++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

3、const关键字

在c语言中const修饰的一个变量叫只读变量,无法通过只读变量名来修改变量名对应空间的值,但可以通过对变量名取地址来修改对应空间的值。
c++编译器对const常量的处理,
当碰见常量声明时在符号表中放入常量,编译过程中若发现使用常量则直接以符号表中的值来代替。
编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间。
注意点:
c++编译器虽然可能为const常量分配空间,但不会使用存储空间的值。

cosnt与#define的区别:
const可以修饰函数
在c++中const的使用必须是const对const。去const属性的const_cast<>;

4、内存分配与释放(new和delete)
c++中通过new关键字进行动态内存申请。
c++中动态分配内存申请是基于类型进行的。
delete关键字是用于内存释放。
new的使用示例:
++++++++++++++++++++++++
int n[3];
int *p = new int(5);
char *ptr = new char[100]//动态数组

int *p1 = new int[3];
++++++++++++++++++++++++
(a)new和malloc的区别:
1、new是运算符,malloc是函数
2、new以具体的数据l类型分配内存,malloc只能以字节为单位分配内存
3、new 申请单个类型时可以初始化,malloc不可以初始化

5、引用与指针
在c++中什么是引用?
引用的格式:类型 & 引用名 = 变量名。
引用就是给一个变量起别名,引用并不分配空间,引用名和变量名指向同一个空间。
引用可以作为函数的形参,或者函数的返回值。
作为函数的形参,引用不需要为函数的形参分配空间,同时对形参的任何操作,都能改变相应的实参的数据。
引用作为函数的返回值,可以将函数放在赋值运算符的左边。
引用的注意点:不能返回对局部变量的引用。

什么是常引用?
const引用是指向const对象的引用。
常引用的声明方式:const类型说明符 &变量名;。常引用也可做形参,常引用可以和常对象搭配,普通对象也可以和常引用搭配,在运行中,普通对象会被视为常对象,常引用做函数形参时和值传递很类似,但常引用有一个优点,在传递比较大的值时,用值传递耗时较长,而传递常引用可以显著提高效率。

引用与指针的区别:
1、引用访问一个变量是直接访问,而指针是间接访问。
2、引用是一个变量的别名,本身不单独的分配内存,而指针有自己的内存空间。
3、引用一经初始化就不能引用其他变量。
尽可能的使用引用,不得已使用指针。

5、函数升级
(1)什么内联函数?
内联函数是指在程序运行到该函数函数,直接用函数体代码替换函数,省去了函数的调用时间,因此可以总结为
以空间换时间(执行时间)

内联函数与宏函数的区别:
(1)内联函数调用时,要求实参和形参的类型一致,函数会先对实参表达式进行求值,然后传递给形参;而宏函数只是简单的替换。
(2)内联函数在编译、在调用的地方将代码展开;而宏函数在预处理时进行替换。

(2)什么是函数重载?
相同的作用域,如果两个函数名称相同,而参数不同,我们把它们称为重载overload;
函数重载 的条件:函数形参的个数、类型、顺序的不同都可以作为函数重载的条件,但函数的返回值不能作为函数重载的条件。

【注意】因为在C++编译中对函数的重载其实是把每个同名的函数重启一个名字,如果我们使用c语言中函数该怎么办?
通过extern “C” 实现c与c++的混合编程。

+++++++++++++++++++++
#ifdef_cplusplus
extern "C"
{
#endif
c语言函数的声明;
#ifdef _cplusplus
}
#endif

++++++++++++++++++++++++

6、命名空间namespace
(1)什么是命名空间?

这里写图片描述
(2)如何定义一个命名空间?
这里写图片描述
(3)如何使用命名空间?
这里写图片描述
7、新的类型转换运算符
(1)static_cast<>用于基本类型间的转换,但不能用于基本类型指针间的转换。
这里写图片描述
(2)const_cast<>用于去除const属性

这里写图片描述

(3)reinterpret_cast<>用于指针类型间的强制转换。
这里写图片描述
(4)dynamic——cast<>主要运用与类层次间的转换,还可以用于类之间的交叉转换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值