C++整理笔记分析.doc

  1. 1、本文档共88页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C整理笔记分析

1.C++对C的扩展 1.1类型增强 1.1.1类型检查更严格 C语言中可以把一个const指针赋给一个非const类型的指针。const int a=100;int *p=a;*p=200;不仅编译能通过,而且还可以修改值。 上述那个例子C++中编译就不能通过,除非是const int *p=a;因为C++对类型更严格要求,分析:a是const int 型的,对a取地址,变成const int *型的了。 1.1.2新增布尔类型 C语言中是真假或者用0和非0表示,C++的逻辑有了具体的类型 1.1.3枚举增强 C语言中枚举的本质就是整型,可以用任意整型去复制,C++中是真正的枚举,枚举里面有什么你只能从这里面选,而不能自己去赋值。 1.1.4变量检测性增强 例如C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上 int g_var; int g_var = 1; 而C++拒绝这样二义性的做法。 1.1.5其他 1.C++中所有的变量和函数都必须有类型,C语言中的默认类型在C++中是不合法的,函数f的返回值是什么类型,参数又是什么类型?函数g可以接受多少个参数? 2.比如三目运算符中,?:,C语言中表达式的返回值是变量的值,不能作为左值,在C++中表达式返回的是变量的本身。当左值的条件:要有内存空间;C++编译器帮助程序员取了一个地址而已。 思考:如何让C中的三目运算法当左值呢? 3.C语言里面寄存器变量不能取地址,C++中就可以。 4.在C语言中int f( );表示返回值为int,接受任意参数的函数int f(void);表示返回值为int的无参函数 在C++中,int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数。 5.C有22+10 = 32个关键字 C++ 有22+10+11+20 +10= 73 个关键字 总结:c语言的安全更是一种把安全交给程序员操作者,c++就相对安全很多,例如C++中string类就相对更高安全级别。 1.2输入与输出及其格式 1.2.1cin与cout cin与cout是C++的标准输入流和输出流,他们在头文件iostream中定义。 流名 含义 隐含设备 流名 含义 隐含设备 cin 标准输入 键盘 cerr 标准错误输出 屏幕 cout 标准输出 屏幕 clog cerr的缓冲输出 屏幕 1.2.2格式化 C++中对于输出数据格式控制略复杂 setiosflags(ios::left),左对齐setw(5),设置域宽,setprecision(5),设置精度,保留多少有效数字,couthex15endl;,oct,dec,coutsetbase(16)15endl;也是设置进制的。但是上述两种都不能设置成二进制,setfill(0)设置默认字符。 1.3函数重载 1.3.1重载的规则 首先函数的返回值类型,不会构成重载,然后函数名相同,参数的,类型个数,顺序不同,本质就是参数列表不同,还有 有没有const也可以作为函数重载的依据。 1.3.2重载的匹配原则 1.严格匹配,找到则调用 2.通过隐式转换寻求一个匹配,找到则调用 #include iostream using namespace std; void print(double a) { coutaendl; } void print(int a)//若改为long,下面1和’a’都会产生二义性 { coutaendl; } int main() { print(1); // print(int) print(1.1); // print(double) 注意这里1.1没指定类型默认为double print(a); // print(int) print(1.11f); // print(double) return 0; } 注:C++中,int 到long 和double都有隐式转化,这时候会产生ambiguous二义性。这时候解决办法是在调用时进行强转。 1.3.3函数重载的底层实现 C++利用name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。 实现原理:用vci fld 表示 void char int float long double及其引用。如int myStrlen(char *str) // int myStrlen_c(char *str),cpp ,.h main.cpp.extern c{},这样就不会倾轧了,但是前提是必须都得在三个文件上加上externc.解决函数重载的问题,解决C++兼容c标准库的问题。 1.4默认

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档