- 1、本文档共88页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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默认
您可能关注的文档
- BSX3201型整车装配调整验收规范分析.doc
- BSS呼叫流程与实际接口分析分析.ppt
- BSC指令图解分析.doc
- BT树脂PCB为什么贵分析.docx
- BTS结构及各模块面板图分析.doc
- BritishHolidaysandFestivals分析.ppt
- Britishhistory分析.ppt
- Burns英美文学分析.ppt
- Building_a_HA_and_DR_Solution_using_AlwaysON_SQL_FCIs_and_AGsv1分析.docx
- BusinessCard分析.ppt
- (高清版)DB41∕T 2772-2024省级公益林建设技术规程.pdf
- (高清版)DB37∕T 5305-2024 回收水泥浆在混凝土中应用技术规程.pdf
- (高清版)DB37∕T 4817—2025 沥青路面就地冷再生技术规范.pdf
- (高清版)DB37∕T 4601.1—2024 服务业用水定额 第1部分:批发零售、运输仓储、餐饮、居民服务、洗车及体育.pdf
- (高清版)DB37∕T 4715—2024 水利工程泵站信息化项目建设指南.pdf
- (高清版)DB37∕T 4722—2024 城市轨道交通工程建设BIM应用指南.pdf
- (高清版)DB37∕T 4744—2024 海洋自然资源资产核算技术指南.pdf
- (高清版)DB37∕T 4755.1—2024 公共数据共享+第1部分:基本要求.pdf
- (高清版)DB37∕T 4772—2024 公路工程废旧混凝土再生集料混凝土应用技术规程.pdf
- (高清版)DB37∕T 4784—2024 3岁以下婴幼儿生活照护托育服务规范.pdf
最近下载
- 长期卧床患者的体位护理技巧.pptx VIP
- JBT14159.3-2022 空气分离设备能效限额第3部分:液化设备.pdf VIP
- 《民用建筑设计通则》图示.docx VIP
- 灭火应急疏散预案.doc VIP
- 铁路内燃、电力司机考试题库.doc VIP
- 新概念英语第一册 Lesson 55-56 课件.ppt VIP
- 2025AI+BI峰会:DeepInsight Copilot 演进史以及未来探索.pdf VIP
- 《临床药学文献阅读汇报抗感染粘菌素在治疗鲍曼不动杆菌感染vap中的应用》课件模板.ppt VIP
- 2025年福建公需课答案.pdf VIP
- 2020四川园林绿化工程说明及计算规则.pdf VIP
文档评论(0)