c个人笔记总结.docx
- 文档编号:3336632
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:8
- 大小:19.35KB
c个人笔记总结.docx
《c个人笔记总结.docx》由会员分享,可在线阅读,更多相关《c个人笔记总结.docx(8页珍藏版)》请在冰豆网上搜索。
c个人笔记总结
c,,个人笔记总结
C++个人笔记总结
---------------------------------王王小小龙龙---------------
Goodluck
Believeyourself
Justgo
概述:
一、C+++语言语法基础(6)
1.从C到C++的过渡2.类和对象3.操作符重载4.继承与多态5.异常和I/O流
二、数据结构和算法
1.基本数据结构,堆栈、队列、链表、二叉树,实现和应用
(2)2.排序和查找算法
三、模板和和STL
1.模板语法2.STL
四、阶段项目
简化的企业管理信息系统(MIS)
第一课
从从CC到到C+++的过渡
一、背景介绍
算盘-面向硬件的编程电子计算机-机器语言的编程1010
-汇编语言的编程ADD
-高级语言的编程Fortran
printf("%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++982021-ISOC++032021-ISOC++2021/C++11/C++0x
二、C+++语言的使用领域:
1.游戏开发:
强建模能力,性能高。
2.科学计算:
xxxx,C++算法库。
3.网络和分布式:
ACE框架。
4.桌面应用:
VC/MFC,Office,QQ,多媒体5.操作系统和设备驱动:
优化编译器的发明使C++在底层开发方面可
以和C向媲美。
6.移动终端
既需要性能,同时又要有面向对象的建模。
三、C+++比比CC更丰富
1.支持面向对象,将问题域和方法域统一化。
宏观面向对象,微观面
向过程。
2.支持泛型编程。
intadd(inta,intb){...}templateTadd(Ta,Tb){...}3.支持异常机制。
intfunc(void){
...}intmain(void){
if(func()==-1){
错误处理;
}}4.操作符重载
四、第一个个C+++程序
1.编译器:
g++,如果用gcc需要带上-lstdc++,指定其使用标准c++的运行库。
2.源文件扩展名:
.cpp/.cc/.C/.cxx/.c++,最好用.cpp
3.头文件:
#include
大多数标准库头文件都没有.h后缀。
4.输出:
cout-标准输出对象
输入:
cin
-标准输入对象
插入运算符:
5.std:
所有标准库的函数、对象、类型都位于std名字空间中。
五、名字空间
11..对程序中的标识符(类型、函数、变量),,
按照某种逻辑规则划分成若干组。
22..定义名字空间
namespace名字空间名{
名字空间成员;}
33..使用名字空间
11作用于限定符:
名字空间名:
:
:
:
名字空间成员,
表示访问特定名字空间中的特定成员。
例子:
#includeintmain(void){
std:
:
couti>>d>>s;
//
printf("%d%lf%s\\n",i,d,s);
std:
:
cout<
return0;}---------------------------------------------------------
22名字空间指令:
usingnamespace名字空间名;在该条指令之后的代码对指令所指名字空间中的所有成员都可见,可直接访问这些成员,无需加“:
:
”。
例:
usingnamespacestd;
33名字空间声明:
using名字空间名:
:
名字空间成员;将指定名字空间中的某个成员引入当前作用域,可直接访问这些成员,无需加“:
:
”。
44..匿名名字空间
如果一个标识符没有被显示地定义在任何名字空间中,编译器会将其缺省地置于匿名名字空间中。
对匿名名字空间中的成员通过“:
:
名字空间成员”的形式访问。
55..名字空间合并
66..名字空间嵌套
namespacens1{
namespacens2{
namespacens3{
voidfoo(void){...}
}
}
}ns1:
:
ns2:
:
ns3:
:
foo();usingnamespacens1:
:
ns2:
:
ns3;foo();---------------
例子:
名字空间
#includeusingnamespacestd;//namespace{
voidprint(intmoney){
cout< }//}// 农行名字空间 namespaceabc{ intbalance=0; voidsave(intmoney){ balance+=money; } voiddraw(intmoney){ balance-=money; }}namespaceabc{ voidsalary(intmoney){ balance+=money; } 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<<"农行: "< draw(3000); cout<<"农行: "< ccb: : save(8000); cout<<"建行: "< : balance< ccb: : draw(5000); cout<<"建行: "< : balance< usingccb: : salary;// 名字空间声明//usingabc: : salary; salary(6000); cout<<"建行: "< : balance<1 例子: #includeusingnamespacestd;structStudent{ charname[128]; intage; voidwho(void){ ////成员函数 cout<<"我叫"< <<"岁了。 " structA{}; cout< return0;}-----------------------------------------------------------22..联合 增加了匿名联合的概念。 借用联合语法形式,描述一些变量在内存中的布局方式。 intmain(){ UNION { inta; charch[4]; }; a=0xxxxx;}定义联合变量时,可以不加union例子: #includeusingnamespacestd;intmain(void){ // 匿名联合 union{ intx; charc[4]/*={"A","B","C","D"}*/; }; cout<<(void*)&x<<""<<(void*)c< x=0xxxxx; for(inti=0;i<4;++i) cout< cout< return0;} --------------------------------------------------- 33..枚举 枚举是一个独立的数据类型。 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! 例子: #includeusingnamespacestd;intmain(void){ enumE{a,b,c}; Ee; e=a; e=b; e=c; //e=1000;//报错 //e=1; //报错 return0;} 七、C+++的布尔类型,跟在在coutt后面可以以boolalpha boolb=true;b=false;cout< &&-and||-or& -bitand ^ -xor{ -[ - 九、C+++中的函数 11..重载: 条件 在同一个作用域中, 函数名相同, 参数表不同的函数, 构成重载关系。 C++编译器会对程序中的函数做换名,将参数表中的类型信息汇合到函数名中,以保证函数名的唯一。 通过extern"C",可以要求编译器不做C++换名,以方便在C语言的模块中使用C++编译生成的代码。 方式一: extern"C"{ intadd(inta,intb){ returna+b; }} intsub(inta,intb){ returna-- b; }} }} 方式二: extern"C"intadd(inta,intb,intc){ returna+b+c; }}22..缺省参数和哑元参数 1)如果调用一个函数时,没有提供实参,那么对应形参就取缺省值。 2)如果一个参数带有缺省值,那么它后边的所有参数必须都带有缺省值。 3)如果一个函数声明和定义分开,那么缺省参数只能放在声明中。 4)避免和重载发生歧义。 5)只有类型而没有名字的形参,谓之哑元。 i++-operator++++iV1: voiddecode(intarg){...}V2: voiddecode(int){...}例子子11: 重载与缺省值 #includeusingnamespacestd;voidfoo(inta=10,doubleb=0.01, constchar*c="tarena"); ////函数数11 voidfoo(void){} ////函数数22////函数数11与函数数22构成重载关系 voidbar(int){ ////函数数33 cout<<"bar(int)"< ////函数数44 cout<<"bar(int,double)"< ////函数数33与函数数44构成重载关系 intmain(void){ foo(1,3.14,"hello");////调用函数数11 foo(1,3.14); ////调用函数数11 foo (1); ////调用函数数1 // foo();//歧义 ,可以调用函数数22,但也可以调用函数数11,因为函数数11在不提供实参的情况下,可以取缺省值。 bar(100); ////调用函数数33 bar(100,12.34); ////调用函数数44 return0;}-------------------------------------- 例子子22: 重载与作用域 #includeusingnamespacestd;namespacens1{ intfoo(inta){ 函数数11 cout<<"ns1: : foo(int)"< returna; }};namespacens2{ doublefoo(doublea){ 函数数22 cout<<"ns2: : foo(double)"< returna; }};intmain(void){ usingnamespacens1; // 名字空间指令 usingnamespacens2; // 名字空间指令 cout< //10 调用函数数11,作用域可见见ns22与与ns11,所以与函数数22构成重载 cout< //1.23 调用函数数22,作用域可见见ns22与与ns11,所以与函数数11构成重载 usingns1: : foo; ////名字空间声明(当同时出现名字指令与名字空间声明,则名字空间声明会隐藏名字空间指令) cout< //100,调用函数数11,只可见名字空间间ns11的的foo(),,所以也并不构成重载。 cout< //100,调用函数数11,只可见名字空间间ns11的的foo(),,所以也并不构成重载。 usingns2: : foo; ////名字空间声明 cout< //100,调用函数数11,可见名字空间间ns11与名字空间ns22的的foo(),,所以构成重载。 cout< //1.233,调用函数数22,可见名字空间间ns11与名字空间间ns22的foo(),,所以构成重载。 return0;}-------------------------------------------------------- 33..内联 1)编译器用函数的二进制代码替换函数调用语句,减少函数调用的时间开销。 这种优化策略成为内联。 2)频繁调用的简单函数适合内联,而稀少调用的复杂函数不适合内联。 3)递归函数无法内联。 4)通过inline关键字,可以建议编译对指定函数进行内联,但是仅仅是建议而已。 inlinevoidfoo(intx,inty){...} 十、C+++的动态内存分配 malloc/calloc/realloc/free1.new/delete: 对单个变量进行内存分配/释放2.new[]/delete[]: 对数组进行内存分配/释放例子: neww与与delete #includeusingnamespacestd;intmain(void){ //int*pi=(int*)malloc(sizeof(int)); //free(pi); //cc中的方法 int*pi=newint; *pi=1000; cout<<*pi< deletepi; ////一定要释放内存,否则会造成内存泄露,很严重 pi=NULL; ////不要忘记这个,虽然不会报错,但是要有好习惯 /* *pi=2021; cout<<*pi< //pii指向的内存地址已经被释放,被初始化为指向向NULL */ pi=newint[10]; for(size_ti=0;i<10;++i) pi[i]=i; for(size_ti=0;i<10;++i) cout< cout< delete[]pi; ////千万记住住new[]]要用用delete[]]来释放内存 pi=NULL; pi=newint(1234); ////用用neww分配内存的同时初始化赋一个值。 cout<<*pi< //1234 deletepi; pi=NULL; charbuf[4]={0x12,0x34,0x56,0x78}; pi=new(buf)int; cout< deletepi; cout<<(void*)pi<<""<<(void*)buf< int(*p)[4]=newint[3][4]; delete[]p; int(*q)[4][5]=newint[3][4][5]; delete[]q; return0;}十一、引用 11..引用即别名。 inta=20;int&b=a;//int*b=&a;b=10;//*b=10;cout< 11))引用型参数 a.修改实参b.避免拷贝,通过加const可以防止在函数中意外地修改实参的值,同时还可以接受拥有常属性的实参。 22))引用型返回值 intb=10;inta=func(b);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 笔记 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)