- 浏览: 93131 次
- 性别:
- 来自: 北京
文章分类
1,C++的历史及其发展:主要涉及C++是如何产生的,主要是为了解决什么问题而被发明的,C++到目前为止的版本,C++目前在市场的使用率
产生原因:
C语言的广泛使用和C语言难于适应大型软件的开发
面向对象编程思想的影响
C++的几个版本:
ISO/IEC 14882:2011,C++11
ISO/IEC TR 19768:2007,C++TR1
ISO/IEC 14882:2003,C++03
ISO/IEC 14882:1998,C++98
C++的设计原则:
C++设计成使用静态类型机制、和C同样高效且可移植的多用途程序设计语言。(意思就是高效可移植多用途的编译语言)
C++设计成直接的和广泛的支持多种程序设计风格(过程化程序设计、数据抽象化、面向对象程序设计、泛型程序设计)。(C++不是纯面向对象的)
C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。(涉及对底层的操作、让程序员谨慎编写程序)
C++设计成尽可能与C兼容,借此提供一个从C到C++的平滑过渡。(争取C程序员)
C++避免平台限定或没有普遍用途的特性。(这点感觉还是C++可以直接操作底层、操作硬件)
C++不使用会带来额外开销的特性。(就是语言本身不维护能够通过谨慎编写程序而避免的错误)
C++设计成无需复杂的程序设计环境。(不依赖其他程序)
2,C++的功能、作用、价值:主要涉及C++能解决什么问题,做出什么样的东西,做出的东西目前市场上的评价,C++的开发效率等
3,C++的编译原理,编译器的配置,目前常用的编译器种类、IDE
编译器:
GCC,GNU 编译器套装,以前是GNU C语言编译器,只能编译C,但是现在可以编译C、C++、Fortran、Pascal、Objective-C、Java
是Linux系统和Mac系统的标准编译器。
clang,苹果公司开发的C语言、C++、Objective C、Objective C++语言的轻量级编译器。
Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。
之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。
此外 GCC 作为一个纯粹的编译系统,与 IDE 配合很差。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。
于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM(低端虚拟机) 的 Clang 了。
构建工具:
gnu make:
pmake:
阅读工具:
cscope:
ctags:
lxr:
集成开发环境(IDE)
1.Visual Studio(Visual C++)
2.Borland C++ Builder
3.Eclipse(Myln + CDT + MinGW32 + GCC)
4.Dev-C++(MinGW32 + GCC)
5.Code::Blocks(可配合多款编译内核使用)
6.CodeLite
7.C-Free
8.Qt Creator等基于Qt开发框架的IDE
如上所示,目前流行的 GNU GCC 和 Microsoft Visual Studio 以及 Borland C++ Builder 系列各执一套基本的编译链,其它的IDE都是衍生产品。
4,C++的语法:数据类型,常量,变量,表达式,语句,控制结构,函数,源文件,包,注释、预处理、模块,库函数,组件,框架,项目,产品
数据类型:基本数据类型,构造数据类型
基本数据类型:整型、浮点型、字符型、布尔类型、无值型,修饰符
整型:int;int为一个机器字,short为半个机器字,long为一个或两个机器字(在32位系统中,通常为1个)
浮点型:double、float:通常float为一个机器字,double为两个机器字,long double为三个或四个机器字
字符型:char、wchar_t:char为一个机器字节,wchar_t为两个或四个机器字节
布尔型:bool(0为false,非0为true)
无值型:void
修饰符:signed 有符号 unsigned 无符号 short 短型 long 长型
整型和字符型都可以使用signed和unsigned来修饰
构造数据类型:数组、枚举、结构体、联合体、指针、类
数组:
声明:int arr1[3],arr2[]={1,2,3},arr3[3]={4,5,6};
初始化:arr1={4,3,2};arr1[0]=2;
数组和指针:
数组的名称为数组的首地址
注意:
数组维数必须为常量或常量表达式
初始化字符数组的字符串比字符串长度多1
C++无论在编译期还是运行时都没有提供数组越界检查,需要程序员自己注意
指针:指针持有两一个变量的地址,通过指针可以间接的操作这个变量。指针一般用于需要链接的数据结构(树),管理动态分配的内存变量
,作为函数变量时用于传递数组和其他大型的构造类型变量
定义指针:变量名前加*,int *p;
初始化指针:int *x_p=&x;x_p=&x;
取变量地址:&
间接获取指针指向的变量:*x_p
引用类型:
定义:int &x=p;必须初始化,引用就是原始变量的别名,主要是为了在函数参数上使用
枚举类型:都是整型,默认从0开始赋值
定义:enum x{a,b,c}
字符串:C风格的字符数组和C++的string类
typedef:类型别名
volatile:限定编译器优化此变量
pair:组合两个变量
类:
声明:
常量:整型,浮点型,字符型,字符串
文字常量:例如1,2,'2',"222",3.4等,文字常量存于内存的某处,但是你是找不到地址的,是不可寻址的
整型后后面加L为long,加U为无符号,加UL为无符号long,
整型前面加0表示八进制,加0x或0X为十六进制,不加为十进制
浮点型后面加F表示float,加L表示long double,科学计数使用E
布尔类型为true和false
字符类型为'x',L'x'表示为wchar_t,各种转义字符现用现查
字符串类型使用双引号包含,换行的话使用\,宽位字符前面加L,字符串连接使用空格,char字符串不要和wchar_t字符串连接
符号常量:使用const关键字
变量:变量名,变量的作用域,变量的其他修饰符,静态还是动态分配内存
变量提供一个有名字的内存存储区,变量的左值是内存地址,右值是文字常量
变量名:
符合普通的标识符规则,字母、数字、下划线组成,数字不能开头,不能使用关键字,具体名称可以自定义,符合项目的编码规则
作用域:全局和局部
全局:函数外定义,提供初始值0
局部:函数内定义,不提供初始值0,只是随机位串或以前的值
初始化:显式和隐式
显式:使用赋值操作符,例如int x=0;
隐式:使用括号,例如int x(0);
变量的存储方法:
自动的auto
函数的局部变量(不包括使用static修饰的局部变量)都是自动的,auto可以省略,占用的内存是动态存储区,生命期是函数的开始和结尾
静态的static
如果使用static修饰局部变量,那么下一次再运行此函数时,static变量的值为上次运行的最后结果,占用的是静态存储区内存
由此可见,静态存储区是默认赋予初值的,动态存储区初值是随机产生的。
如果使用static修饰全局变量,那么此变脸的作用范围只为此文件,不能在其他文件使用extern来声明才变量。
如果使用static来修饰函数,那么此函数的作用范围只为此文件,不能被其他文件的函数调用。
寄存器register
如果使用register修饰局部变量,那么将此变量放到寄存器中,建议性语法,编译器喜好决定
外部的extern
全局变量为函数外定义的变量,占用的内存是静态存储区,作用范围为声明处到源程序结尾
如果想扩展到整个文件,那么在此文件调用前声明为extern
如果想扩展它的方位到多个文件,那么可以再其他文件使用extern来声明此变量。
被extern修饰的函数为外部函数,可以被其他文件调用,默认可以省略extern
变量的额定义性声明和非定义性声明:
一般来说分配存储空间的为定义性声明,不分配的非定义性声明。
表达式:赋值表达式,算数表达式,逻辑表达式,关系表达式,
位运算符:^按位异或 ~按位取反
指针运算符:*
引用运算符和地址运算符:&
成员运算符:.
指向成员的运算符:->
语句:语句结尾符号,顺序,选择,循环,其他
声明语句:
执行语句:
函数:作用域,返回值,参数列表,修饰符、重载函数、函数模版
内联函数:inline,又名内置函数、内嵌函数,就是把函数内容放到调用它的位置处,避免流程转换,提高效率,但肯定确实程序大小扩大,消耗内存
一般是将5个语句以内且被调用很多次的函数声明为内联函数。内联函数不能包括复杂的控制语句和循环语句哦。而且被声明为内联函数不一定就把函数
的代码嵌入到调用处,根据编译系统的喜好来。
重载函数:很容易理解哦
函数模版:template <class T>...或 template <typename T>...感觉就是相同数量参数的函数重载的优化
函数指针:指向函数地址的指针
异常处理:
源文件:作用域,类型
包:
注释:行注释//,块注释/* */
预处理:宏定义,文件包含、条件编译,使用#开发,末尾不加分号
宏定义:#define x y,使用x代替y,因为拥有了内联函数,基本上不适用宏定义了,主要拥有条件编译中
文件包含:#include <>或"" <>为系统类库 “”为自写的文件
文件包含的头文件一般包括:对类型的声明、函数声明、内联函数、宏定义和常量、全局变量、外部变量声明、还可以包含其他头文件
条件编译:
#ifdef ....#endif
#if ..#else...#endif
模块:如何划分更好
库函数:STL(标准模板库)、C标准程序库的稍加修改版本
组件:
框架:MFC
项目:
产品:
产生原因:
C语言的广泛使用和C语言难于适应大型软件的开发
面向对象编程思想的影响
C++的几个版本:
ISO/IEC 14882:2011,C++11
ISO/IEC TR 19768:2007,C++TR1
ISO/IEC 14882:2003,C++03
ISO/IEC 14882:1998,C++98
C++的设计原则:
C++设计成使用静态类型机制、和C同样高效且可移植的多用途程序设计语言。(意思就是高效可移植多用途的编译语言)
C++设计成直接的和广泛的支持多种程序设计风格(过程化程序设计、数据抽象化、面向对象程序设计、泛型程序设计)。(C++不是纯面向对象的)
C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。(涉及对底层的操作、让程序员谨慎编写程序)
C++设计成尽可能与C兼容,借此提供一个从C到C++的平滑过渡。(争取C程序员)
C++避免平台限定或没有普遍用途的特性。(这点感觉还是C++可以直接操作底层、操作硬件)
C++不使用会带来额外开销的特性。(就是语言本身不维护能够通过谨慎编写程序而避免的错误)
C++设计成无需复杂的程序设计环境。(不依赖其他程序)
2,C++的功能、作用、价值:主要涉及C++能解决什么问题,做出什么样的东西,做出的东西目前市场上的评价,C++的开发效率等
3,C++的编译原理,编译器的配置,目前常用的编译器种类、IDE
编译器:
GCC,GNU 编译器套装,以前是GNU C语言编译器,只能编译C,但是现在可以编译C、C++、Fortran、Pascal、Objective-C、Java
是Linux系统和Mac系统的标准编译器。
clang,苹果公司开发的C语言、C++、Objective C、Objective C++语言的轻量级编译器。
Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。
之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。
此外 GCC 作为一个纯粹的编译系统,与 IDE 配合很差。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。
于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM(低端虚拟机) 的 Clang 了。
构建工具:
gnu make:
pmake:
阅读工具:
cscope:
ctags:
lxr:
集成开发环境(IDE)
1.Visual Studio(Visual C++)
2.Borland C++ Builder
3.Eclipse(Myln + CDT + MinGW32 + GCC)
4.Dev-C++(MinGW32 + GCC)
5.Code::Blocks(可配合多款编译内核使用)
6.CodeLite
7.C-Free
8.Qt Creator等基于Qt开发框架的IDE
如上所示,目前流行的 GNU GCC 和 Microsoft Visual Studio 以及 Borland C++ Builder 系列各执一套基本的编译链,其它的IDE都是衍生产品。
4,C++的语法:数据类型,常量,变量,表达式,语句,控制结构,函数,源文件,包,注释、预处理、模块,库函数,组件,框架,项目,产品
数据类型:基本数据类型,构造数据类型
基本数据类型:整型、浮点型、字符型、布尔类型、无值型,修饰符
整型:int;int为一个机器字,short为半个机器字,long为一个或两个机器字(在32位系统中,通常为1个)
浮点型:double、float:通常float为一个机器字,double为两个机器字,long double为三个或四个机器字
字符型:char、wchar_t:char为一个机器字节,wchar_t为两个或四个机器字节
布尔型:bool(0为false,非0为true)
无值型:void
修饰符:signed 有符号 unsigned 无符号 short 短型 long 长型
整型和字符型都可以使用signed和unsigned来修饰
构造数据类型:数组、枚举、结构体、联合体、指针、类
数组:
声明:int arr1[3],arr2[]={1,2,3},arr3[3]={4,5,6};
初始化:arr1={4,3,2};arr1[0]=2;
数组和指针:
数组的名称为数组的首地址
注意:
数组维数必须为常量或常量表达式
初始化字符数组的字符串比字符串长度多1
C++无论在编译期还是运行时都没有提供数组越界检查,需要程序员自己注意
指针:指针持有两一个变量的地址,通过指针可以间接的操作这个变量。指针一般用于需要链接的数据结构(树),管理动态分配的内存变量
,作为函数变量时用于传递数组和其他大型的构造类型变量
定义指针:变量名前加*,int *p;
初始化指针:int *x_p=&x;x_p=&x;
取变量地址:&
间接获取指针指向的变量:*x_p
引用类型:
定义:int &x=p;必须初始化,引用就是原始变量的别名,主要是为了在函数参数上使用
枚举类型:都是整型,默认从0开始赋值
定义:enum x{a,b,c}
字符串:C风格的字符数组和C++的string类
typedef:类型别名
volatile:限定编译器优化此变量
pair:组合两个变量
类:
声明:
常量:整型,浮点型,字符型,字符串
文字常量:例如1,2,'2',"222",3.4等,文字常量存于内存的某处,但是你是找不到地址的,是不可寻址的
整型后后面加L为long,加U为无符号,加UL为无符号long,
整型前面加0表示八进制,加0x或0X为十六进制,不加为十进制
浮点型后面加F表示float,加L表示long double,科学计数使用E
布尔类型为true和false
字符类型为'x',L'x'表示为wchar_t,各种转义字符现用现查
字符串类型使用双引号包含,换行的话使用\,宽位字符前面加L,字符串连接使用空格,char字符串不要和wchar_t字符串连接
符号常量:使用const关键字
变量:变量名,变量的作用域,变量的其他修饰符,静态还是动态分配内存
变量提供一个有名字的内存存储区,变量的左值是内存地址,右值是文字常量
变量名:
符合普通的标识符规则,字母、数字、下划线组成,数字不能开头,不能使用关键字,具体名称可以自定义,符合项目的编码规则
作用域:全局和局部
全局:函数外定义,提供初始值0
局部:函数内定义,不提供初始值0,只是随机位串或以前的值
初始化:显式和隐式
显式:使用赋值操作符,例如int x=0;
隐式:使用括号,例如int x(0);
变量的存储方法:
自动的auto
函数的局部变量(不包括使用static修饰的局部变量)都是自动的,auto可以省略,占用的内存是动态存储区,生命期是函数的开始和结尾
静态的static
如果使用static修饰局部变量,那么下一次再运行此函数时,static变量的值为上次运行的最后结果,占用的是静态存储区内存
由此可见,静态存储区是默认赋予初值的,动态存储区初值是随机产生的。
如果使用static修饰全局变量,那么此变脸的作用范围只为此文件,不能在其他文件使用extern来声明才变量。
如果使用static来修饰函数,那么此函数的作用范围只为此文件,不能被其他文件的函数调用。
寄存器register
如果使用register修饰局部变量,那么将此变量放到寄存器中,建议性语法,编译器喜好决定
外部的extern
全局变量为函数外定义的变量,占用的内存是静态存储区,作用范围为声明处到源程序结尾
如果想扩展到整个文件,那么在此文件调用前声明为extern
如果想扩展它的方位到多个文件,那么可以再其他文件使用extern来声明此变量。
被extern修饰的函数为外部函数,可以被其他文件调用,默认可以省略extern
变量的额定义性声明和非定义性声明:
一般来说分配存储空间的为定义性声明,不分配的非定义性声明。
表达式:赋值表达式,算数表达式,逻辑表达式,关系表达式,
位运算符:^按位异或 ~按位取反
指针运算符:*
引用运算符和地址运算符:&
成员运算符:.
指向成员的运算符:->
语句:语句结尾符号,顺序,选择,循环,其他
声明语句:
执行语句:
函数:作用域,返回值,参数列表,修饰符、重载函数、函数模版
内联函数:inline,又名内置函数、内嵌函数,就是把函数内容放到调用它的位置处,避免流程转换,提高效率,但肯定确实程序大小扩大,消耗内存
一般是将5个语句以内且被调用很多次的函数声明为内联函数。内联函数不能包括复杂的控制语句和循环语句哦。而且被声明为内联函数不一定就把函数
的代码嵌入到调用处,根据编译系统的喜好来。
重载函数:很容易理解哦
函数模版:template <class T>...或 template <typename T>...感觉就是相同数量参数的函数重载的优化
函数指针:指向函数地址的指针
异常处理:
源文件:作用域,类型
包:
注释:行注释//,块注释/* */
预处理:宏定义,文件包含、条件编译,使用#开发,末尾不加分号
宏定义:#define x y,使用x代替y,因为拥有了内联函数,基本上不适用宏定义了,主要拥有条件编译中
文件包含:#include <>或"" <>为系统类库 “”为自写的文件
文件包含的头文件一般包括:对类型的声明、函数声明、内联函数、宏定义和常量、全局变量、外部变量声明、还可以包含其他头文件
条件编译:
#ifdef ....#endif
#if ..#else...#endif
模块:如何划分更好
库函数:STL(标准模板库)、C标准程序库的稍加修改版本
组件:
框架:MFC
项目:
产品:
发表评论
-
理解编译型编程语言心得
2012-11-01 14:11 7761,编译型语言,像c和c++都是,在源代码成为 ... -
Windows编程之钩子程序
2012-10-15 09:20 21251,钩子(Hook),是Windows消息处理机制的一个平台, ... -
(转)编程竞赛的几个在线提交系统
2012-10-12 14:28 1057下面是几个比较大的在线提交系统(Online Judge)里面 ... -
从编程的角度理解操作系统及其软件设计
2012-10-11 10:58 936我们都知道操作系统是装在计算机上的,所有的计算 ... -
windows程序入口
2012-10-09 15:32 1663操作系统装载应用程序后,做完初始化工作就转到程序的入口点执行。 ... -
C语言各种编译器的清屏方法
2012-09-28 11:04 31421,vs/vc:vs本身并没有提供专用清屏的函数,但是清屏被作 ... -
C语言实现学生信息管理的增删改查
2012-09-28 10:42 5978刚开始,我用eclipse编写的,编译器使用的是gcc ... -
回车符和换行符的区别
2012-09-27 18:34 990回车符号和换行符号产生背景: 在计算机还没 ... -
C语言标准函数库IO处理分析
2012-09-26 16:25 945IO处理函数都在stdio.h头 ... -
C语言标准函数库动态内存分配和释放分析
2012-09-25 11:14 11101,动态内存分配需要程序员手动来释放获得的内存 2,内存分配和 ... -
C语言标准函数库产生随机数分析
2012-09-25 10:47 9311,是伪随机,不是真正的随机,伪随机的特点就是根据种子值+公式 ... -
C语言标准函数库分析
2012-09-24 16:06 9651,支持断言机制: 导入assert.h头文件 ... -
(转)C/C++ Linux 程序员必须了解的知识和工具
2012-09-23 20:48 1002来源:http://community.itbbs.cn/th ... -
C++语法中定义和声明的区别
2012-09-14 16:57 11441,声明是告诉编译器这段内存空间的名称,定义是为这个名称分配固 ...
相关推荐
"从 Java 到 C++, 适合 Java 程序员快速学习 C++" 这篇文章旨在帮助 Java 程序员快速学习 C++,通过比较 Java 和 C++ 的区别,帮助读者快速理解 C++。以下是从 Java 到 C++ 的知识点总结: 数据类型和变量 * C++ ...
学习C++的道路并非一帆风顺,由于C++语言本身包含了大量的细节,使得初学者往往在探索过程中迷失方向。在C++的世界里,错误的学习方法和误解常常导致学习效率低下。C++的复杂性主要源于三个方面:语言细节繁多、经典...
学习C++并不一定需要先学习C语言,尽管C语言是C++的基础,但直接从C++开始学习也是可行的,特别是当你找到一些高质量的C++实例来引导入门时。在数学分析等抽象思维训练中,递归的概念对理解C++中的函数调用和复杂...
### 学习C++的四个层次详解 #### 第一层次:C++基础 在这个阶段,初学者需要构建对C++的基本理解。为了更好地掌握基础知识,推荐以下几本经典的入门书籍: - **《C++ Primer》**:这本书是C++学习者的首选教材之一...
学习C++的第一课,新手让我们一起来学习C++吧
如何学习c++如何学习c++如何学习c++如何学习c++如何学习c++
### 学习C++的忠告50条详解 #### 1. C++与C的关系 C++在设计之初确实受到了C语言的影响,但两者在语法、特性以及用途上都有很大的区别。C++不仅继承了C的核心功能,还引入了许多新特性如面向对象编程(OOP)、模板...
学习C++相关知识的代码.zip学习C++相关知识的代码.zip学习C++相关知识的代码.zip学习C++相关知识的代码.zip学习C++相关知识的代码.zip学习C++相关知识的代码.zip学习C++相关知识的代码.zip学习C++相关知识的代码.zip...
《The C++ Programming Language》和《Inside The C++ Object Model》则适合进阶学习,虽然难度较高,但能让你深入理解 C++的本质。 在学习过程中,不应过于依赖集成开发环境(IDE),如 Visual C++,而是要学会...
学习C++的过程是一个系统性的旅程,需要按照一定的顺序和路径进行。以下是一个推荐的C++学习路线图: 首先,从《C++ Primer》开始。这本书是C++初学者的入门经典,它详细介绍了C++的基础语法,包括变量、类型、控制...
其次,"完整的学习C++的读书路线图.txt"文件则为C++学习者提供了一条清晰的路径。这可能是一个详细的学习计划,指导读者从基础语法开始,逐步掌握面向对象编程,再到STL(标准模板库)的使用,以及更高级的主题如...
学习C++的忠告 C++作为一门强大的编程语言,其深入学习对于任何希望成为专业程序员的人来说都是必不可少的。本文将探讨学习C++的重要性、学习方法以及C++程序设计的基本原则,帮助你踏上成功的道路。 首先,我们来...
详细介绍了该如何学习C++的书籍,把C++最重要的读物按照由浅到深的层次排列。
《Sams教你每天一小时学习C++》是一本旨在帮助初学者系统且高效学习C++编程语言的书籍。作者通过将复杂概念分解成易于理解的小块,使得读者能够在每天一小时的学习时间内逐步积累并掌握C++的核心知识。这本书是Sams...
学习C++的一些资料和程序,可以参考。.zip学习C++的一些资料和程序,可以参考。.zip学习C++的一些资料和程序,可以参考。.zip学习C++的一些资料和程序,可以参考。.zip学习C++的一些资料和程序,可以参考。.zip学习...
学习C++作为一门功能强大的编程语言,已经成为了计算机科学和软件工程领域的基石。掌握C++不仅能够帮助开发者构建高效的程序,还能够锻炼其逻辑思维与解决复杂问题的能力。为了帮助那些希望成为C++编程高手的学习者...
学习C++的步骤推荐,好好学习c++的长远规划。
- **《C++ Primer》**:这本书是学习C++的基础教材之一,适合初学者入门使用。它详细介绍了C++的基本语法、数据类型、控制结构等基础知识,并通过丰富的示例帮助读者理解和掌握C++的核心概念。 - **《C++ Primer ...