- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从新手到高手笔记
C32关键字
数据类型:char short int long float double signed unsigned void struct enum union
流程结构:if else switch case default for do while break continue return goto
存储类型和其他:auto static typedef register const volatile sizeof extern
类与类的关系:继承 依赖 组合
9章
1引用:
引用定义时就要初始化,不能先定义后赋值。Int a;int ra=a;
在栈中引用后不需要向指针一样赋空;在堆中必须用到指针,不能用引用,因为引用是别名,即使用也不需要赋空。
引用的是一个临时变量时,这个临时变量的生命周期不会小于这个引用的生存期(指针没有这个特性)p137
2指针
Const int *p 则p指向的数据内容不能修改
Int const *p 则p不能改变(如p++错误 )p所指的数据内容可以改变
Const int const *p 则数据和指针都不能改变
在哪里创建堆空间就在哪释放,一定要保存好这个指针,否则很可能发生内存泄露p142
总:指针可以为空,引用不能为空,指针可以被赋值,引用只能被初始化 int *p=new int if(p!=null) int rp=*p
3函数传参
方式一:值传递,如在交换函数中传给函数的是栈中自动的值拷贝,即副本,一定程度上增加内存开销,函数调用后释放主函数的值即原数据并没有改变。P128
方式二:指针传递,传递的是地址,故在调用的函数中的操作即对原数据的操作,是间接的操作由于要加*易出错,(加const变成常量,利于数据保护)。
方式三:引用传递,和指针传递一样也是对原数据的操作,方便可靠,使程序更容易阅读,(引用始终是常量)。
总:函数只能有一个返回值,但是由于指针传递和引用传递可以改变原数据也可以间接看做是函数的返回值。
引用指针p143前
10章
1函数重载
函数名相同,参数列表不同的函数,于函数的返回值无关
2默认函数(缺省函数)
函数定义时就初始化参数,如声明时:
void fun(int=0,float=0)或定义时:
void fun(int=0,float=0){ ----}
注:部分初始化从左到右的顺序,调用时从右到左的情况
3构造函数的重载
当有多个构造函数他们的参数不同时,根据创建对象的赋值不同决定调用哪个构造函数。P148
4成员变量的初始化
方法一:如类名是A, A(int a,float b):ra(a),rb(b){}
A a(3,4)
方法二:A(int a,float b){ra=a,rb=b}
A a(3,4)
方法三:A():ra(3),rb(4){}
注:构造函数可以任意多个,但析构函数只有一个;执行的顺序是先构造的后析构。在有const和引用成员变量的对象中,由于其都是不能赋值的故必须用成员初始化列表。
5复制构造函数
A a(2,3) B(Aa)则 B复制了A的构造函数
6构造函数和new
A *P=new A //new建立一个类的对象时,在堆上分配一块类A的空间,并调用构造函数去初始化这块空间,然后把这个堆的空间的地址赋给类A的指针P。
A *P=new A(2,3)////new建立一个类的对象时,在堆上分配一块类A的空间,并调用含有两个参数的构造函数去初始化这块空间,然后把这个堆的空间的地址赋给类A的指针P。
注:当我们没有手动创建构造函数和析构函数时编译器会自动添加,若有则编译器不会添加。
7构造函数与类型转化
有类A执行程序如下:
A a(65);//调用a的构造函数,并初始化
a=98;//调用类A的构造函数将98转化为类A的临时对象,并把98赋值给a,故调用了类A 的构造函数和析构函数销毁临时对象。(类型转化)
a=A(6);//调用类A的构造函数将6转化为类A的临时对象,并把6赋值给a,故调用了类A 的构造函数和析构函数销毁临时对象。(类型转化)
A b(23);//创建对象b,并赋初值23,调用构造函数,先调用析构b再析构a
Return 0;
注:在类型转化是由于右边是一个数字,故调用含有一个参数的构造函数,假设声明的是两个参数的构造函数,则不能作为转换函数。
8浅拷贝构造函数
编译器提供默认构造函数,通过引用把传递进来的对象的成员复制到新对象的成员变量中,然后两个对象中的成员变量均指向存放类成员变量的那块区域。若有成员是指针,很容易出错,如若删除对象a时,由于自动调用析构函数,会释放空间,共享的另一个对象b会出错,b中的成员指针会变成迷途指针。
9深拷贝构造函数
文档评论(0)