如何学习C++_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 如何学习C++

如何学习C++

 2012/9/8 11:51:02  怡然城南  程序员俱乐部  我要评论(0)
  • 摘要:1,C++的历史及其发展:主要涉及C++是如何产生的,主要是为了解决什么问题而被发明的,C++到目前为止的版本,C++目前在市场的使用率产生原因:C语言的广泛使用和C语言难于适应大型软件的开发面向对象编程思想的影响C++的几个版本:ISO/IEC14882:2011,C++11ISO/IECTR19768:2007,C++TR1ISO/IEC14882:2003,C++03ISO/IEC14882:1998,C++98C++的设计原则:C++设计成使用静态类型机制
  • 标签:学习 c++
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,只是随机位串或以前的值
初始化:显式和隐式
    显式:使用赋值caozuofu.html" target="_blank">操作符,例如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
    项目:
    产品:
发表评论
用户名: 匿名