您好,欢迎访问三七文档
C++个人笔记总结---------------------------------王小龙---------------GoodluckBelieveyourselfJustgo-1-概述:一、C++语言语法基础(6)1.从C到C++的过渡2.类和对象3.操作符重载4.继承与多态5.异常和I/O流二、数据结构和算法1.基本数据结构,堆栈、队列、链表、二叉树,实现和应用(2)2.排序和查找算法三、模板和STL1.模板语法2.STL四、阶段项目简化的企业管理信息系统(MIS)-2-第一课从C到C++的过渡一、背景介绍算盘-面向硬件的编程电子计算机-机器语言的编程1010-汇编语言的编程ADD-高级语言的编程Fortranprintf(%d,12);-结构化程序设计C/PASCL顺序、分支、循环、函数-面向对象的程序设计C++/Java/C#-面向问题的程序设计1960-Algol60,算法语言,远离硬件,不适合进行系统开发1963-剑桥大学,CPL,在Algol60的基础上增加对系统开发的支持,复杂,不易掌握,不易使用1970-MIT,BCPL,CPL的精华版,易学易用,太慢,不实用1972-KenThomposon,B语言,通过运行时支持优化BCPL的性能,缺少类型1973-DennisRitchie,C语言,用C重新实现UNIX内核1978-《TheCProgrammingLanguage》,第一个C语言的事实标准1989-ANSIC,C891990-ISOC,C901999-ISOC修订,C99197X-BajarneStroustrup,simula早期的面向对象语言,性能低下,B语言。1979-贝尔实验室,多核UNIX系统仿真,Cpre,通过扩展宏为C语言增加类似simula的面向对象机制。CwithClass:simula-类Alogo68-操作符重载Ada-模板、名字空间Smalltalk-引用、异常C是C++的子集,C++是对C的扩展。1983-C++命名1985-CFront1.0,第一款商用C++编译器1987-GNUC++1990-BorlandC++1992-MicrosoftC++,IBMC++1998-ISOC++982003-ISOC++032011-ISOC++2011/C++11/C++0x-3-二、C++语言的使用领域:1.游戏开发:强建模能力,性能高。2.科学计算:FORTRAN,C++算法库。3.网络和分布式:ACE框架。4.桌面应用:VC/MFC,Office,QQ,多媒体5.操作系统和设备驱动:优化编译器的发明使C++在底层开发方面可以和C向媲美。6.移动终端既需要性能,同时又要有面向对象的建模。三、C++比C更丰富1.支持面向对象,将问题域和方法域统一化。宏观面向对象,微观面向过程。2.支持泛型编程。intadd(inta,intb){...}templatetypenameTTadd(Ta,Tb){...}3.支持异常机制。intfunc(void){...}intmain(void){if(func()==-1){错误处理;}}4.操作符重载四、第一个C++程序1.编译器:g++,如果用gcc需要带上-lstdc++,指定其使用标准c++的运行库。2.源文件扩展名:.cpp/.cc/.C/.cxx/.c++,最好用.cpp3.头文件:#includeiostream大多数标准库头文件都没有.h后缀。4.输出:cout-标准输出对象输入:cin-标准输入对象插入运算符:提取运算符:5.std:所有标准库的函数、对象、类型都位于std名字空间中。-4-五、名字空间1.对程序中的标识符(类型、函数、变量),按照某种逻辑规则划分成若干组。2.定义名字空间namespace名字空间名{名字空间成员;}3.使用名字空间1作用于限定符:名字空间名::名字空间成员,表示访问特定名字空间中的特定成员。例子:#includeiostreamintmain(void){std::coutHello,World!std::endl;inti;doubled;chars[256];//scanf(%d%lf%s,&i,&d,s);std::cinids;//printf(%d%lf%s\n,i,d,s);std::couti''d''s'\n';return0;}---------------------------------------------------------2名字空间指令:usingnamespace名字空间名;在该条指令之后的代码对指令所指名字空间中的所有成员都可见,可直接访问这些成员,无需加“::”。例:usingnamespacestd;3名字空间声明:using名字空间名::名字空间成员;将指定名字空间中的某个成员引入当前作用域,可直接访问这些成员,无需加“::”。-5-4.匿名名字空间如果一个标识符没有被显示地定义在任何名字空间中,编译器会将其缺省地置于匿名名字空间中。对匿名名字空间中的成员通过“::名字空间成员”的形式访问。5.名字空间合并6.名字空间嵌套namespacens1{namespacens2{namespacens3{voidfoo(void){...}}}}ns1::ns2::ns3::foo();usingnamespacens1::ns2::ns3;foo();---------------例子:名字空间#includeiostreamusingnamespacestd;//namespace{voidprint(intmoney){coutmoneyendl;}//}//农行名字空间namespaceabc{intbalance=0;voidsave(intmoney){balance+=money;}voiddraw(intmoney){balance-=money;}}namespaceabc{voidsalary(intmoney){balance+=money;}-6-voidprint(intmoney){cout农行:;::print(money);}}//建行名字空间namespaceccb{intbalance=0;voidsave(intmoney){balance+=money;}voiddraw(intmoney){balance-=money;}voidsalary(intmoney){balance+=money;}}intmain(void){usingnamespaceabc;//名字空间指令save(5000);cout农行:balanceendl;draw(3000);cout农行:balanceendl;ccb::save(8000);cout建行:ccb::balanceendl;ccb::draw(5000);cout建行:ccb::balanceendl;usingccb::salary;//名字空间声明//usingabc::salary;salary(6000);cout建行:ccb::balanceendl;abc::print(abc::balance);return0;}-7-六、C++中的结构、联合和枚举1.结构和C语言的不同:1)定义结构型变量时,可以省略struct关键字。2)结构内部可以定义函数——成员函数。3)sizeof(空结构)-1例子:#includeiostreamusingnamespacestd;structStudent{charname[128];intage;voidwho(void){//成员函数cout我叫name,今年age岁了。endl;}};intmain(void){Studentstudent={张飞,25},*ps=&student;student.who();ps-who();structA{};coutsizeof(A)endl;return0;}-----------------------------------------------------------2.联合增加了匿名联合的概念。借用联合语法形式,描述一些变量在内存中的布局方式。intmain(){UNION{inta;charch[4];};a=0x12345678;}定义联合变量时,可以不加union-8-例子:#includeiostreamusingnamespacestd;intmain(void){//匿名联合union{intx;charc[4]/*={'A','B','C','D'}*/;};cout(void*)&x''(void*)cendl;x=0x12345678;for(inti=0;i4;++i)couthex(int)c[i]'';coutendl;return0;}---------------------------------------------------3.枚举枚举是一个独立的数据类型。C:enumE{a,b,c};enumEe;e=a;e=1000;C++:enumE{a,b,c};Ee;e=a;e=b;e=c;b=1;//ERROR!e=1000;//ERROR!e=1;//ERROR!-9-例子:#includeiostreamusingnamespacestd;intmain(void){enumE{a,b,c};Ee;e=a;e=b;e=c;//e=1000;//报错//e=1;//报错return0;}七、C++的布尔类型,跟在cout后面可以boolalphaboolb=true;b=false;coutsizeof(b)endl;//1b=100;b=1.234;b=hello;b='A';八、C++中的运算符别名&&-and||-or&-bitand^-xor{-%}-%[-:]-:-10-九、C++中的函数1.重载:条件在同一个作用域中,函数名相同,参数表不同的函数,构成重载关系。C++编译器会对程序中的函数做换名,将参数表中的类型信息汇合到函数名中,以保证函数名的唯一。通过externC,可以要求编译器不做C++换名,以方便在C语言的模块中使用C++编译生成的代码。方式一:externC{intadd(inta,intb){returna+b;}intsub(inta,intb){returna-b;}}方式二:externCintadd(inta,intb,intc){returna+b+c;}2.缺省参数和哑元参数1)如果调用一个函数时,没有提供实参,那么对应形参就取缺省值。2)如果一个参数带有缺省值,那么它后边的所有参数必须都带有缺省值。3)如果一个函数声明和定义分开,那么缺省参数只能放在声明中。4)避免和重载发生歧义。5)只有类型而没有名字的形参,谓之哑元。i++-operator++++iV1:voiddecode(intarg){...}V2:voiddecode(int){...}例子1:重载与缺省值#includeiostreamusingnamespacestd;voidfoo(inta=10,doubleb=0.01,constchar*c=tarena);//函数1voidfoo(void){}//函数2//函数1与函数2构成重载关系voidbar(int){//函数3-11-coutbar(int)endl;}voidbar(int,double){//函数4coutbar(int,double)endl;}//函数3与函数4构成重载关系intmain(void){foo(1,3.14,hello);//调用函数1foo(1,3.14)
本文标题:c++个人笔记总结
链接地址:https://www.777doc.com/doc-5861696 .html