C和C++幸福是什么么?

C/C++程序员宝典_百度百科
收藏 查看&C/C++程序员宝典本词条缺少概述、信息栏、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
出版社: 清华大学出版社; 第1版 (日)
平装: 324页
正文语种: 简体中文
商品尺寸: 28.6 x 20 x 2.4 cm
商品重量: 440 g许多开发者对C/C++语言及其底层原理掌握不牢固在面试过程中经常漏洞百出无法取得好成绩而招聘单位为了得到高素质的员工往往采用各种形式的面试考察求职者这让面试难度大大增加求职者要想成功应聘不仅需要扎实的基本功还需要经受情商和智商方面的考验
通过380余个面试题对企业招聘C/C++程序员需要掌握的知识进行了系统全面的总结以帮助读者进行充分的面试准备在激烈的竞争中成功应聘内容大多取材于各大it公司的面试题详细分析了应聘C/C++程序员职位的常见考点主要内容包括面试流程及准备英语面试电话面试C/C++语言基础流程控制输入输出预处理内存管理指针面向对象基础类多态继承函数模板与STL数据结构软件工程数据库操作系统计算机网络经典算法题数据库操作题思维拓展文字解答实战题程序改错实战题编写程序实战题智力测试逻辑测试等梁镇宇软件开发工程师擅长C/C++语言及应用参与开发过Visual C++串口通信项目用于实现UL33系列后台通信协议熟悉Solaris串口驱动模块编写主持过Solaris RPC内核代码解读和Solaris DNS模块裁减等底层项目熟悉IT企业面试对C/C++面试题进行过系统的归纳和总结第1篇 求职准备和技巧
第1章 了解面试通过面试抓住机会 2
1.1 选择自己的应聘职位范围 2
1.1.1 针对初级C/C++工程师职位 2
1.1.2 针对中高级C/C++开发工程师职位 3
1.1.3 C/C++的职位划分 4
1.2 制作专业化的应聘简历 5
1.2.1 简历的组成 5
1.2.2 一个简历的样本 6
1.4 掌握应聘的流程步步为营 9
1.5 投递简历 10
1.5.1 招聘网站投递 10
1.5.2 E-mail投递 11
1.5.3 如何面对招聘会 12
1.6 面试+笔试+上机考试 13
1.6.1 面试 13
1.6.2 笔试 14
1.6.3 上机考试 15
1.7 面试后的终结邮件 16
第2章 英文面试教学视频60分钟 18
2.1 英文面试过程和技巧 18
2.2 关于工作 19
面试题1 What salary would you expect for this job 19
面试题2 What new skills or ideas do you bring to the job that other candidates aren't likely to offer 20
面试题3 What would you like to accomplish that you weren't able to accomplish in your last position 20
面试题4 How have your career motivations changed over the past few years 20
面试题5 Why should I hire you 21
面试题6 What are your key skills 21
面试题7 What are your strengths 22
面试题8 How is your experience relevant to this job 22
面试题9 What skills do you think are most critical to this job 23
面试题10 What skills would you like to develop in this job 23
面试题11 If you had to stay in your current job, what would you spend more time on? Why 24
面试题12 How could you enrich your current job 24
2.3 关于个人 24
面试题13 Why do you want to work here 25
面试题14 Do you believe you're overqualified for this position 25
面试题15 Tell me about a time you didn't perform to your capabilities 26
面试题16 How do you manage stress in your daily work 26
面试题17 Considering your own resume, what are your weaknesses in relation to this job 26
面试题18 Describe your working relationship with your colleagues 27
面试题19 Describe your personality beneath the professional image 27
面试题20 How will you complement this department 27
2.4 关于发展 28
面试题21 Tell me what you learned from a recent book 28
面试题22 What's your most productive or ideal work setting 28
面试题23 Where do you want to be in five years 29
面试题24 What are your aspirations beyond this job 29
面试题25 How long do you think you'd continue to grow in this job 29
面试题26 What do you reasonably expect to earn within five years 30
第3章 电话面试教学视频13分钟 31
3.1 电话面试简介 31
3.2 如何准备电话面试 32
3.3 电话面试常见问题 33
面试题27 为什么想进本公司 33
面试题28 你最喜欢这份工作的哪一点或者哪些方面 33
面试题29 请描述一下你自己的优缺点 34
面试题30 你对本公司的了解有多少 34
面试题31 对这份工作的期望与目标何在 34
面试题32 你为什么要离职 34
面试题33 选择这份工作的原因是什么 35
面试题34 你认为相关产业的发展会如何 35
面试题35 你希望的待遇为多少 35
面试题36 在工作中学习到了些什么 35
第2篇 C/C++基础知识
第4章 C/C++语言基础教学视频50分钟 38
4.1 基本数据类型 38
面试题37 C++中有哪几种基本数据类型 38
面试题38 整型有哪几种形式各种形式有什么区别 39
面试题39 C++中有哪些常量 40
面试题40 常量与变量有哪些区别 42
4.2 操作符 42
面试题41 操作符有哪些分类 43
面试题42 操作符优先级对运算结果有什么影响 43
面试题43 逻辑操作与其他操作的关系 45
面试题44 自增自减前操作与后操作的区别 46
面试题45 指针自增自减有什么不同 47
4.3 变量 47
面试题46 什么是左值和右值 48
面试题47 什么是变量 48
面试题48 变量有哪几种初始化方式 49
面试题49 变量默认初始化有什么规则 50
面试题50 什么是变量的声明和定义 50
面试题51 C++中有哪几种作用域 51
面试题52 局部变量与嵌套的作用域 52
面试题53 变量有哪几种存储类型 53
4.4 引用 53
面试题54 什么是引用 54
面试题55 如何使用const引用与非const引用 54
4.5 C与C++的联系 55
面试题56 C与C++有什么区别 55
4.6 编程规范 55
面试题57 什么是匈牙利命名法 55
面试题58 变量有什么命名规则 56
第5章 流程控制教学视频24分钟 58
5.1 条件语句 58
面试题59 条件语句有哪几种形式 58
面试题60 条件语句如何嵌套如何匹配else子句 59
5.2 循环语句 61
面试题61 for循环语句的计算顺序是什么 61
面试题62 while循环与do-while循环有什么区别 62
面试题63 典型循环语句 64
面试题64 break语句与continue语句有什么区别 64
5.3 switch语句 66
面试题65 switch语句的执行顺序是什么 66
面试题66 如何在switch语句内部定义变量 67
5.4 递归 68
面试题67 什么是递归 68
面试题68 汉诺塔问题 69
第6章 输入输出教学视频15分钟 73
6.1 输入流与输出流 73
面试题69 什么是标准输入输出流 73
面试题70 如何重载输入输出 74
6.2 文件输入/输出 75
面试题71 如何读取一个文件 75
面试题72 文件输入输出有哪几种方式 76
6.3 异常与错误 77
面试题73 什么是异常 77
面试题74 如何抛出和捕捉异常 78
第7章 预处理以及内存管理教学视频28分钟 80
7.1 宏定义 80
面试题75 宏定义与操作符的区别 80
面试题76 宏定义如何展开 81
7.2 include的使用 82
面试题77 include有哪几种使用方式有什么区别 82
面试题78 包含头文件时如何查找头文件 83
7.3 内存分配 83
面试题79 C++中各数据类型的长度 84
面试题80 如何分配和释放存储空间 84
7.4 虚函数与纯虚函数 85
面试题81 虚函数与纯虚函数的区别 85
面试题82 如何使用纯虚函数 86
第8章 指针教学视频60分钟 88
8.1 指针概述 88
面试题83 什么是指针 88
面试题84 如何初始化指针并对其赋值 89
面试题85 是否可以确定指针指向一个对象 90
面试题86 如何使用指针操作数组 90
面试题87 const对象的指针和const指针的区别 91
第3篇 C/C++专业应用
第4篇 C/C++面试题实战解析
第5篇 智力测试与逻辑测试
新手上路我有疑问投诉建议参考资料 查看C++ 与 C 比较,性能损失主要原因是什么?
[问题点数:0分]
C++ 与 C 比较,性能损失主要原因是什么?
[问题点数:0分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。c++_百度百科
收藏 查看&c++
C++是在C语言的基础上开发的一种集和过程化编程于一体的[1]应用较为广泛是一种静态数据类型检查的支持多重编程的通用程序设计语言它支持过程化程序设计数据抽象面向对象设计制作图标等多种程序设计风格最新正式标准C++14于日公布外文名The C++ Programming Language创始人Bjarne Stroustrup
计算机诞生初期人们要使用计算机必须用或编写程序世界上第一种计算机高级语言是诞生于1954年的之后出现了多种计算机其中使用最广泛影响最大的当推和BASIC语言是1964年由 Dartmouth 学院 John G. Kemeny 与 Thomas E. Kurtz 两位教授在FORTRAN语言的基础上简化而成的 适用于初学者设计的小型高级语言C语言是1972年由美国贝尔实验室的D.M.Ritchie所开发采用方法遵从的原则[1]在和系统使用程序以及需要对进行操作的场合用C语言明显优于其它高级语言但在编写大型程序时C语言仍面临着挑战
1983年在C语言基础上的Bjarne Stroustrup推出了C++ C++进一步扩充和完善了C语言是一种面向对象的程序设计语言目前流行的C语言版本C++这个名字是Rick Mascitti于1983年中所建议的并于1983年12月首次使用更早以前尚在研究阶段的发展中语言曾被称为new C之后是C with Classes[2]在计算机科学中C++仍被称为C语言的上层结构它最后得名于C语言中的++操作符其对变量的值进行递增而且在共同的命名约定中使用+以表示增强的程序Stroustrup说这个名字象征着源自于C语言变化的自然演进
注C+是一个和C/C++无关的早期编程语言
Rick Mascitti在1992年被非正式地问起名字的由来他表示这是在半开玩笑中说出的他从没想过C++会成为这门语言的正式名字有一个关于C++名字的笑话当你使用后缀++时附加只发生在运算之后因此它应该是++C而不是C++这个笑话是说时下某些程序员还在以使用C的方式使用C++这通常被一些权威著作认为是不正确的在C with Class阶段研制者在C语言的基础上加进去的特征主要有类及派生类共有和私有成员的区分类的和的重载等
1985年公布的的C++语言1.0版的内容中又添加了一些重要特征的概念和运算符的引用常量constant等
1989年推出的2.0版形成了更加完善的支持面向对象程序设计的C++语言新增加的内容包括类的保护成员对象的初始化与赋值的递归机制抽象类静态成员函数const成员函数等
1993年的C++语言3.0版本是C++语言的进一步完善其中最重要的新特征是template,此外解决了多重继承产生的二义性问题和相应的与的处理等
1998年C++标准ISO/IEC14882 Standard for the C++ Programming Language得到了国际标准化组织ISO和美国标准化协会ANSI的批准标准C++语言及其标准库更体现了C++语言设计的初衷的概念STL中增加的标准容器类通用算法类和字符串类型等使得C++语言更为实用此后C++是具有国际标准的编程语言该标准通常简称ANSI C++或ISO C++ 98标准以后每5年视实际需要更新一次标准
后来又在2003年通过了C++标准第二版ISO/IEC 这个新版本是一次技术性修订对第一版进行了整理修订错误减少多义性等但没有改变语言特性这个版本常被称为C++03[1]
此后新的标准草案叫做C++ 0x对于C++ 0x标准草案的最终国际投票已于日结束并且所有国家都投出了赞成票已经毫无疑义地成为正式国际标准先前被临时命名为C++0x的新标准正式定名为ISO/IEC 简称ISO C++ 11标准C++ 11标准将取代现行的C++标准C++98和C++03国际标准化组织于日出版发布ISO/IEC 名称是Information technology -- Programming languages -- C++ Edition: 3[3-5]C语言是C++的基础C++和C语言在很多方面是兼容的
C语言是一个结构化语言它的重点在于算法与数据结构C程序的设计首要考虑的是如何通过一个过程对输入或环境条件进行运算处理得到输出或实现过程事物控制C++首要考虑的是如何构造一个对象模型让这个模型能够契合与之对应的问题域这样就可以通过获取对象的状态信息得到输出或实现过程事物控制所以C语言和C++的最大区别在于它们解决问题的思想方法不一样
C++对C的增强表现在六个方面
(1) 类型检查更为严格
(2) 增加了面向对象的机制
(3) 增加了泛型编程的机制Template
(4) 增加了异常处理
(5) 增加了运算符重载
(6) 增加了标准模板库STLC++一般被认为是C的超集合Superset但这并不严谨大部分的C代码可以很轻易的在C++中正确编译但仍有少数差异导致某些有效的C代码在C++中失效或者在C++中有不同的行为
最常见的差异之一是C允许从void*隐式转换到其它的指针类型但C++不允许下列是有效的C代码
//从void*类型隐式转换为int*类型
int*i=malloc(sizeof(int)*5);
 但要使其在C和C++两者皆能运作就需要使用显式转换
int*i=(int*)malloc(sizeof(int)*5);另一个常见的可移植问题是C++定义了很多的新关键字如new和class它们在C程序中是可以作为识别字例变量名的
在C标准中去除了一些不兼容之处也支持了一些C++的特性如//注解以及在代码中混合声明不过C99也纳入几个和C++冲突的新特性如可变长度数组原生复数类型和复合逐字常数
若要混用C和C++的代码则所有在C++中调用的C代码必须放在 extern "C" { /* C代码 */ } 之内· C++设计成静态类型和C同样高效且可移植的多用途程序设计语言
· C++设计直接的和广泛的支持多种程序化程序设计资料抽象化泛型程序设计
· C++设计无需复杂的程序设计环境[6]
C++语言简洁灵活运算符的数据结构丰富具有结构化控制语句程序执行效率高而且同时具有高级语言与汇编语言的优点与其它语言相比 C语言具有可以直接访问物理地址的优点与汇编语言相比又具有良好的可读性的可移植性
总得来说C++语言的主要特点表现在两个方面一是尽量兼容C,二是支持面向对象的方法它操持了C的简洁高效的接近汇编语言等特点对C的类型系统进行了改革的扩充因此C++比C更安全C++的编译系统能检查出更多的类型错误另外由于C语言的广泛使用因而极大的促进了C++的普及和推广
C++语言最有意义的方面是支持面向对象的特征虽然与C的兼容使得C++具有双重特点但他在概念上完全与C不同更具面向对象的特征
出于保证语言的简洁和运行高效等方面的考虑C++的很多特性都是以库如STL或其他的形式提供的而没有直接添加到语言本身里关于此类话题的C++语言的设计和演化1994里做了详尽的陈述
C++引入了面向对象的概念使得开发人机交互类型的应用程序更为简单快捷很多优秀的程序框架包括BoostQtMFCOWLwxWidgetsWTL就是使用的C++[7]C++由于语言本身过度复杂甚至使人们难于理解其语义C++的编译系统受到C++的复杂性的影响非常难于编写即使能够使用的编译器也存在了大量的问题这些问题大多难于被发现[7]
由于本身的复杂性复杂的C++程序的正确性相当难于保证人们一般认为使用或的比C++低但是如果充分分析C++和这些语言的差别会发现这句话的成立是有条件的这个条件就是规模和复杂度都比较小如果不超过3万行有效代码不包括生成器产生的代码这句话基本上还能成立否则随着代码量和复杂度的增加C++的优势将会越来越明显造成这种差别的就是C++的软件工程性[7]数据是程序处理的对象数据可以依其本身的特点进行分类我们知道在数学中有整数实数的概念在日常生活中需要用字符串来表示人的姓名和地址有些问题的回答只能是是或否即逻辑真或假不同类型的数据有不同的处理方法例如整数和实数可以参加算术运算但实数的表示又不同于整数要保留一定的小数位字符串可以拼接逻辑数据可以参加与或非等逻辑运算
我们编写计算机程序目的就是为了解决客观世界中的现实问题所以高级语言中也为我们提供了丰富的数据类型和运算C++中的数据类型分为基本类型和自定义类型基本类型是C++编译系统内置的C++的基本数据类型如下表所示下表中列出的各类型的长度和取值范围是指以面向80x86处理器的 Viusal C++ 2012 和 gcc 4.8.1 的长度其它的编译器并不一定是这个长度
类型名长度字节取值范围bool1false,truechar
1-128~127signed char1-128~127unsigned char10~255short (signed short)2-unsigned short20~65535int (signed int)4-~unsigned int40~long (signed long)4-~unsigned long40~long long (signed long long)8-5807unsigned long long80~float4
long double8
C++丰富的数据类型允许根据需要选择不同的类型这也使得计算机的操作更复杂
自动类型转换隐式类型转换
在下列四种情况中计算机自动进行类型转换
在混合类型的算术表达式中  int ival = 3;  double dval = 3.1415  ival + //ival 被提升为double 类型:3.0
用另外一种类型的表达式赋值  int *pi = NULL; // NULL(0)被转换成了int* 类型的空指针值
用一个表达式传递给一个函数调用  extern double sqrt(double);  sqrt(2); //2被提升为double类型: 2.0
从一个函数返回一个表达式  double difference(int ival1, int ival2)  {  return ival1 - ival2; //返回值被提升为double 类型.  }[8]
强制类型转换显示类型转换
C++显式转换包含四种转换
用法static_cast & type-id & ( expression )
说明该运算符把expression转换为type-id类型但没有运行时类型检查来保证转换的安全性
用法dynamic_cast & type-id & (expression)
说明该运算符把expression转换成type-id类型的对象Type-id必须是类的指针类的引用或者void*
用法const_cast&type_id& (expression)
说明该运算符用来修改类型的const或volatile属性除了const 或volatile修饰之外 type_id和expression的类型是一样的
用法reinterpret_cast&type-id& (expression)
说明type-id 必须是一个指针引用算术类型函数指针或者成员指针它可以把一个指针转换成一个整数也可以把一个整数转换成一个指针先把一个指针转换成一个整数在把该整数转换成原类型的指针还可以得到原先的指针值
new和delete提供了存储的内存分配和释放功能它的作用相当于C语言的函数malloc()和free()但性能更为优越使用new较之使用malloc()有以下的几个优点
1new自动计算要分配类型的大小不使用sizeof运算符比较省事可以避免错误
2自动地返回正确的类型不用进行强制指针
3可以用new对分配的对象进行[9]对于频繁使用的C语言建议使用宏调用代替以加快代码执行减少调用开销但是宏调用有许多的弊端可能引起不期望的副作用例如宏#define abs(a)(a)&0?(-a):(a))当使用abs(i++)时这个宏就会出错
所以在C++中应该使用替代宏调用这样既可达到宏调用的目的又避免了宏调用的弊端
使用内联函数只须把inline关键字放在函数返回类型的前面[9]在C语言中两个函数的名称不能相同否则会导致编译错误而在C++中函数名相同而参数不同或参数个数不同或二者皆不同的两个函数被解释为重载
使用可以帮助程序员处理更多的复杂问题避免了使用诸如intabs()fabs()dabs()等繁杂的函数名称同时在大型程序中使函数名易于管理和使用而不必绞尽脑汁地去处理函数名同时必须注意参数数据类型相同但是函数返回类型不同的两个函数不能重载[9]在C语言中如果一个函数需要修改用作参数的值的时候 参数应该声明为指针类型当参数的大小超过一个机器字长时通过传值方式来传递参数的效率较低也需要用指针由于C语言的指针可以进行p++,--p,p+=1等算术运算所以编译器无法在编译的时候确定指针引用的变量对于复杂的程序使用容易出错程序也难以读懂在C++中对于上述情况 可以使用引用来代替指针使程序更加清晰易懂引用就是对变量取的一个别名对引用进行操作这就相当于对原有变量进行操作[9]在C++中函数可以使用
通常的情况下一个函数应该具有尽可能大的灵活性使用缺省参数为处理更大的和灵活性问题提供了有效的方法所以在C++的代码中都大量地使用了缺省参数
需要说明的是所有的缺省参数必须出现在不缺省参数的右边亦即一旦开始定义缺省参数就不可再说明非缺省的参数否则当你省略其中一个参数的时候编译器无法知道你是自定义了这个参数还是利用了缺省参数而定义了非缺省的参数[9]STLStandard Template LibrarySTL的代码从广义上讲分为三类algorithmcontainer容器和iterator并包括一些工具类如几乎所有的代码都采用了和模板函数的方式这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会
作用符被重载使得我们可以像访问数组一样访问vector中的[9]模板的概念
模板是C++的一个特性是函数和类可以作用于不同的类型上而不需要针对每一个具体类型重复相同的代码与模板相反我们已经学过的重载(Overloading)对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同正确的调用例如为求两个数的最大值我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本如果使用模板就可以只写一个通用的MAX模板而不需要针对每个类型重复相同的逻辑
指针与引用的区别
指针与引用看上去完全不同指针用操作符*和-&引用使用操作符&但是它们似乎有相同的功能指针与引用都是让你间接引用其他对象你如何决定在什么时候使用指针在什么时候使用引用呢
首先要认识到在任何情况下都不能使用指向空值的引用一个引用必须总是指向某些对象因此如果你使用一个变量并让它指向一个对象但是该变量在某些时候也可能不指向任何对象这时你应该把变量声明为指针因为这样你可以赋空值给该相反如果变量肯定指向一个对象例如你的设计不允许变量为空这时你就可以把变量声明为引用是具有相同属性和相同的方法的对象的集合它是一种既包含数据又包含函数的抽象数据类型
是类进行实体化后的产物是一个实体
在C++中也是先声明一个类类型然后用它去定义若干个同类型的对象对象就是类类型的一个变量可以说类是对象的模板是用来定义对象的一种抽象类型类是抽象的不占用内存而对象是具体的占用存储空间类是用户自己指定的类型如果程序中要用到类类型必须自己根据需要进行声明或者使用别人已设计好的类C++标准本身并不提供现成的类的名称结构和内容
在C++中声明一个类的类型和声明一个结构体类型是相似的下面是声明一个结构体类型的方法
structStudent//声明了一个名为Student的结构体类型
 charname[20];
 Studentstud1stud2;//定义了两个结构体变量stud1和stud2它只包括数据没有包括操作声明一个类
classStudent//以class开头
 charname[20];
 //以上3行是数据成员
 voiddisplay()//这是成员函数
 cout&&″num:″&&num&&
 cout&&″name:″&&name&&
 cout&&″sex:″&&sex&&
 };//以上4行是函数中的操作语句
 Studentstud1,stud2;//定义了两个对象stud1和stud2
 事实上也可以用struct关键字来声明一个类这样的类中默认所有成员的权限都是public(除非你特别写上权限)而用class声明的类中默认所有成员的权限都是private.
可以看到声明类的方法是由声明结构体类型的方法发展而来的类就是对象的类型实际上类是一种广义的数据类型类这种数据类型中的数据既包含数据也包含操作数据的函数
不能把类中的全部成员与外界隔离一般是把数据隐蔽起来而把成员函数作为对外界的可以将上面类的声明改为
classStudent//以class开头
 private://声明私有成员
 charname[20];
 public://声明公共成员
 voiddisplay()
 cout&&″num:″&&num&&
 cout&&″name:″&&name&&
 cout&&″sex:″&&sex&&
 Studentstud1,stud2;//定义了两个对象stud1和stud2
 如果在类的定义中既不指定private也不指定public则系统就默认为是私有的归纳以上对类类型的声明可得到其一般形式如下
 private:
 //私有的数据和成员函数;
 //公用的数据和成员函数;
 private和public称为成员访问限定符(member access specifier)除了private和public之外还有一种成员访问限定符protected(受保护的)用protected声明的成员称为受保护的成员它不能被类外访问(这点与私有成员类似)但可以被派生类的成员函数访问
在声明类类型时声明为private的成员和声明为public的成员的次序任意既可以先出现private部分也可以先出现public部分
在一个类体中关键字private和public可以分别出现多次每个部分的有效范围到出现另一个访问限定符或类体结束时(最后一个右花括号)为止但是为了使程序清晰应该养成这样的习惯 使每一种成员访问限定符在类定义体中只出现一次
C++ 程序多数先写public部分把private部分放在类体的后部这样可以使用户将注意力集中在能被外界调用的成员上使阅读者的思路更清晰一些
在C++程序中经常可以看到类为了用户方便常用的C++编译系统往往向用户提供(但不属于C++语言的组成部分)内装常用的基本的类供用户使用不少用户也把自己或本单位经常用到的类放在一个专门的类库中需要用时直接调用这样就减少了程序设计的工作量上述程序段中最后一行用已声明的Student类来定义对象这种方法是很容易理解的经过定义后stud1和stud2就成为具有Student类特征的对象stud1和stud2这两个对象都分别包括Student类中定义的数据和函数
定义对象也可以有以下几种方法
1.先声明类类型然后再定义对象前面用的就是这种方法如Student stud1stud2;//Student是已经声明的类类型在C++中声明了类类型后定义对象有两种形式
1class 类名 对象名
如 class Student stud1,stud2;
把class和Student合起来作为一个类名用来定义对象
2类名 对象名
如 Student stud1stud2;
直接用类名定义对象
这两种方法是等效的第1种方法是从C语言继承下来的第2种方法是C++的特色显然第2种方法更为简捷方便
2.在声明类类型的同时定义对象
classStudent{//声明类类型
 public://先声明公用部分
 voiddisplay(){
 cout&&″num:″&&num&&
 cout&&″name:″&&name&&
 cout&&″sex:″&&sex&&
 private://后声明私有部分
 charname[20];
 }stud1stud2;//定义了两个Student类的对象
 在定义Student类的同时定义了两个Student 类的对象
3.不出现类名直接定义对象
class//无类名
 private://声明以下部分为私有的
 public://声明以下部分为公用的
 }stud1stud2;//定义了两个无类名的类对象
 直接定义对象在C++中是合法的允许的但却很少用也不提倡用在实际的程序开发中一般都采用上面3种方法中的第1种方法在小型程序中或所声明的类只用于本程序时也可以用第2种方法在定义一个对象时编译系统会为这个对象分配存储空间以存放对象中的成员C++增加了class类型后仍保留了结构体类型(struct )而且把它的功能也扩展了C++允许用struct来定义一个类型如可以将前面用关键字class声明的类类型改为用关键字struct
structStudent{//用关键字struct来声明一个类类型
 private://声明以下部分为私有的
 //以下3行为数据成员
 charname[20];
 public://声明以下部分为公用的
 voiddisplay(){//成员函数
 cout&&″num:″&&num&&
 cout&&″name:″&&name&&
 cout&&″sex:″&&sex&&
 Studentstud1stud2;//定义了两个Student类的对象
 为了使结构体类型也具有封装的特征C++不是简单地继承C的结构体而是使它也具有类的特点以便于用于面向对象程序设计用struct声明的结构体类型实际上也就是类用struct声明的类如果对其成员不作private或public的声明系统将其默认为public
如果想分别指定私有成员和公用成员则应用private或public作显式声明
而用class定义的类如果不作private或public声明系统将其成员默认为private在需要时也可以自己用显式声明改变如果希望成员是公用的使用struct比较方便如果希望部分成员是私有的宜用class建议尽量使用class来建立类写出完全体现C++风格的程序关键字(keyword)是整个语言范围内预先保留的标识符每个C++关键字都有特殊的含义经过预处理后关键字从预处理记号(preprocessing-token)中区出来剩下的标识符作为记号(token)用于声明对象函数类型命名空间等不能声明与关键字同名的标识符
各个版本的ISO C++都规定以下划线接大写字母起始的标识符保留给实现编译器可以用这些保留标识符作为扩展关键字这不保证可移植性以下讨论ISO C++所保留的关键字
ISO C++ 98 关键字共63个此处严格按标准原文排版
dynamic_cast
static_cast
const_cast
reinterpret_cast
 一个程序从编写到最后得到运行结果要经历以下一些步骤
1用C++语言编写程序
用编写的程序称为(source program)?源程序的后缀取决于C++实现下表列出了常用扩展名
UnixC, cc, cxx, cGNU C++C, cc, cxx, cpp, c++Digital Marscpp, cxxBorlandC++ cppWatcomcppMicrosoft Visual C++cpp, cxx, ccMetrowerks CodeWarriorcpp, cp, cc, cxx, c++2对源程序进行编译
为了使计算机能执行高级语言源程序,必须先用一种称为(complier)的软件(也称编译程序或编译系统),把源程序翻译成二进制形式的目标程序(object program)?
编译是以源程序文件为单位分别编译的?目标程序一般以.obj或.o作为后缀(object 的缩写)?编译的作用是对源程序进行词法检查和语法检查?编译时对文件中的全部内容进行检查,编译结束后会显示出所有的编译出错信息?一般编译系统给出的出错信息分为两种,一种是错误(error);一种是警告(warning) ?
3将目标文件连接
在改正所有的错误并全部通过后,得到一个或多个目标文件?此时要用系统提供的连接程序(linker)将一个程序的所有目标程序和系统的库文件以及系统提供的其他信息连接起来,最终形成一个可执行的二进制文件,它的后缀是.exe,是可以直接执行的?
运行最终形成的可执行的二进制文件(.exe文件),得到运行结果?
如果运行结果不正确,应检查程序或算法是否有问题?在Unix世界有大量的程序员是传统的非IDE的方式进行软件开发一般是如下组合
1.编译器和等[10]
2.编辑器常用和
3.makeGNU make 或者BSD的pmake等功能与用法基本一样
4.版本管理,,git等等
5.代码阅读,ctags,lxr等1.Visual C++[11]
2.Borland C++ Builder
3. (Myln + CDT + MinGW32 + GCC)
4. (MinGW32 + GCC)
5.可配合多款编译器使用
8. 可配合多款编译器使用
实际上当前流行的编译器只有五种Intel C++ 编译器微软的cl.exe编译器捆绑于Visual Studio套装中GNU的GCC编译器LLVM的Clang编译器Borland公司的bcc.exe编译器捆绑于Borland C++ Builder套装中根据Effective C++第三版第一条款的描述C++由以下四个子语言组成
1C子语言C++支持C语言的几乎全部功能主要是c89的部分在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性具体请参考C++标准文献)这部分功能对应于传统的面向过程的编程泛型并提供了面向函数编程泛型的基础
2的C++语言C++语言原本不具备面向对象的设计功能然而随着的概念的普及C++语言也开发出了支持面向对象功能的版本这部分功能对应于面向对象的编程泛型
3泛型编程语言C++强大但容易失控的模板功能使它能在编译期完成许多工作从而大大提高运行期效率,并且大大提高了C++的表达能力C++标准模板库Standard Template Library是一个基于模板技术的库随着STL的不断发展它已经逐渐成为C++中不可或缺的部分其效率可能比一般的native低些但是其安全性与规范性使它大受欢迎模板使C++能够支持泛型编程generic programming和生成式编程generative programming的泛型
4在C++11中引入的Lambda使得程序员可以定义匿名函数完善了C++对于面向函数的编程泛型的支持C++ Primer 中文版第5版
C++ Primer (Fifth Edition)
C++ Primer Plus 中文版第六版
C++ Primer Plus (Sixth Edition)Thinking in C++
A Tour Of C++
C++编程思想
The C++ Programming Language (Fourth Edition)
C++程序设计语言第四版未出版
Essential C++
The C++ Standard Library: A Tutorial and Reference
C++标准程序库自修教程与参考手册
Effective STL
Generic Programming and the STL: Using and Extending the C++ Standard Template Library
泛型编程与STL
C++语言的设计和演化
C++标准程序库自修教程与参考手册
STL源码剖析Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference
标准C++输入输出流与本地化
C++ Network Programming
C++网络编程
Ruminations on C++: A Decade of Programming Insight and Experience
Inside The C++ Object Model
深度探索C++对象模型
Design Patterns:Elements of Reusable Object-Oriented software
设计模式可复用面向对象软件的基础
Large-Scale C++ Software Design大规模C++程序设计
STL 源码剖析
The C++ Standard : Incorporating Technical Corrigendum No. 1
Preprocessor C++
C++语言基础
Essential C++
(More)Effective C++
(More)Exceptional C++[12]
C++ Templates
Core C++ A Software Engineering Approach[13]
高质量C++编程指南上海贝尔标准编程文档
Presentation Materials: Overview of the New C++ (C++11/14)[14]英文
Ambiguous operators need parentheses
不明确的运算需要用括号括起
Ambiguous symbol ''xxx''
不明确的符号
Argument list syntax error
参数表语法错误
Array bounds missing
丢失数组界限符
Array size toolarge
数组尺寸太大
Bad character in paramenters
参数中有不适当的字符
Bad file name format in include directive
包含命令中文件名格式不正确
Bad ifdef directive synatax
编译预处理ifdef有语法错
Bad undef directive syntax
编译预处理undef有语法错
Bit field too large
位字段太长
Call of non-function
调用未定义的函数
Call to function with no prototype
调用函数时没有函数的说明
Cannot modify a const object
不允许修改常量对象
Case outside of switch
漏掉了case 语句
Case syntax error
Case 语法错误
Code has no effect
代码不可述不可能执行到
Compound statement missing{
分程序漏掉"{"
Conflicting type modifiers
不明确的类型说明符
Constant expression required
要求常量表达式
Constant out of range in comparison
在比较中常量超出范围
Conversion may lose significant digits
转换时会丢失意义的数字
Conversion of near pointer not allowed
不允许转换近指针
Could not find file ''xxx''
找不到XXX文件
说明缺少""
Declaration syntax error
说明中出现语法错误
Default outside of switch
Default 出现在switch语句之外
Define directive needs an identifier
定义编译预处理需要标识符
Division by zero
用零作除数
Do statement must have while
Do-while语句中缺少while部分
Enum syntax error
枚举类型语法错误
Enumeration constant syntax error
枚举常数语法错误
Error directive :xxx
错误的编译预处理命令
Error writing output file
写输出文件错误
Expression syntax error
表达式语法错误
Extra parameter in call
调用时出现多余错误
File name too long
文件名太长
Function call missing
函数调用缺少右括号
Fuction definition out of place
函数定义位置错误
Fuction should return a value
函数必需返回一个值
Goto statement missing label
Goto语句没有标号
Hexadecimal or octal constant too large
16进制或8进制常数太大
Illegal character ''x''
Illegal initialization
非法的初始化
Illegal octal digit
非法的8进制数字
Illegal pointer subtraction
非法的指针相减
Illegal structure operation
非法的结构体操作
Illegal use of floating point
非法的浮点运算
Illegal use of pointer
指针使用非法
Improper use of a typedefsymbol
类型定义符号使用不恰当
In-line assembly not allowed
不允许使用行间汇编
Incompatible storage class
存储类别不相容
Incompatible type conversion
不相容的类型转换
Incorrect number format
错误的数据格式
Incorrect use of default
Default使用不当
Invalid indirection
无效的间接运算
Invalid pointer addition
指针相加无效
Irreducible expression tree
无法执行的表达式运算
Lvalue required
需要逻辑值0或非0值
Macro argument syntax error
宏参数语法错误
Macro expansion too long
宏的扩展以后太长
Mismatched number of parameters in definition
定义中参数个数不匹配
Misplaced break
此处不应出现break语句
Misplaced continue
此处不应出现continue语句
Misplaced decimal point
此处不应出现小数点
Misplaced elif directive
不应编译预处理elif
Misplaced else
此处不应出现else
Misplaced else directive
此处不应出现编译预处理else
Misplaced endif directive
此处不应出现编译预处理endif
Must be addressable
必须是可以编址的
Must take address of memory location
必须存储定位的地址
No declaration for function ''xxx''
没有函数xxx的说明
No type information/没有类型信息
Non-portable pointer assignment
不可移动的指针地址常数赋值
Non-portable pointer comparison
不可移动的指针地址常数比较
Non-portable pointer conversion
不可移动的指针地址常数转换
Not a valid expression format type
不合法的表达式格式
Not an allowed type
不允许使用的类型
Numeric constant too large
Out of memory
内存不够用
Parameter ''xxx'' is never used
能数xxx没有用到
Pointer required on left side of -&
符号-&的左边必须是指针
Possible use of ''xxx'' before definition
在定义之前就使用了xxx警告
Possibly incorrect assignment
赋值可能不正确
Redeclaration of ''xxx''
重复定义了xxx
Redefinition of ''xxx'' is not identical
xxx的两次定义不一致
Register allocation failure
寄存器定址失败
Repeat count needs an lvalue
重复计数需要逻辑值
Size of structure or array not known
结构体或数给大小不确定
语句后缺少""
Structure or union syntax error
结构体或联合体语法错误
Structure size too large
结构体尺寸太大
Sub scripting missing ]
下标缺少右方括号
Superfluous & with function or array
函数或数组中有多余的"&"
Suspicious pointer conversion
可疑的指针转换
Symbol limit exceeded
Too few parameters in call
函数调用时的实参少于函数的参数不
Too many default cases
Default太多(switch语句中一个)
Too many error or warning messages
错误或警告信息太多[15]
Too many type in declaration
说明中类型太多
Too much auto memory in function
函数用到的局部存储太多
Too much global data defined in file
文件中全局数据太多
Two consecutive dots
两个连续的句点
Type mismatch in parameter xxx
参数xxx类型不匹配
Type mismatch in redeclaration of ''xxx''
xxx重定义的类型不匹配
Unable to create output file ''xxx''
无法建立输出文件xxx
Unable to open include file ''xxx''
无法打开被包含的文件xxx
Unable to open input file ''xxx''
无法打开输入文件xxx
Undefined label ''xxx''
没有定义的标号xxx
Undefined structure ''xxx''
没有定义的结构xxx
Undefined symbol ''xxx''
没有定义的符号xxx
Unexpected end of file in comment started on line xxx
从xxx行开始的注解尚未结束文件不能结束
Unexpected end of file in conditional started on line xxx
从xxx 开始的条件语句 尚未结束文件不能结束
Unknown assemble instruction
未知的汇编结构
Unknown option
未知的操作
Unknown preprocessor directive: ''xxx''
不认识的预处理命令xxx
Unreachable code
无路可达的代码
Unterminated string or character constant
字符串缺少引号
User break
用户强行中断了程序
Void functions may not return a value
Void类型的函数不应有返回值
Wrong number of arguments
调用函数的参数数目错
''xxx'' not an argument
xxx不是参数
''xxx'' not part of structure
xxx不是结构体的一部分
xxx statement missing (
xxx语句缺少左括号
xxx statement missing )
xxx语句缺少右括号
xxx缺少分号
xxx'' declared but never used
说明了xxx但没有使用
xxx'' is assigned a value which is never used
给xxx赋了值但未用过
Zero length structure
结构体的长度为零[16]
在这12年里C++用户人数大约每七个月半增加一倍是许多C++相关文件必引的一段话然而时至今日新语言层出不穷用户人数已不太可能以如此速度增长分析机构EvansData定期对开发人员展开调查其数据显示以C++为工具的开发人员在整个开发界所占的比例由1998年春天的76%下降至2004年秋的46%Forrester最新的调查显示C++和是众多公司产品体系的首选语言对100家公司的调查显示C/C++和在产品体系中的使用比例分别是59%61%和66%
一部分Unix/C程序员对C++语言深恶痛绝他们批评的理由如下
1 STL以非常丑陋的方式封装了各种数据结构和算法写出来的代码难以理解不美观
2 C++编译器复杂和不可靠不适合构建人命关天类型的程序
3 一部分人认为技术徒增学习成本不如面向过程的C语言简单容易使用尤其是在系统软件的构建上
概括说来程序员批评C++主要是由于UNIX社区与C++社区的文化差异[6]
一个值得注意的事情是之父曾经炮轰C++得主尼克劳斯·维尔特也曾经批评C++语言太复杂语法语义模糊是拙劣工程学的成果
事实上对于C++语言的批评并不只来源于Unix/Unix-Like系统下的程序员就像C++语言本身是一个跨平台的语言一样对C++的批评并不局限于Unix/Unix-Like系统用户
一个确定的观点是C++是一门复杂的语言这门语言拥有过多的特性从而难以彻底掌握C++的某些库难以学习掌握并应用于实际当中很多程序员都认为C++是一个过度设计的程序语言C++标准第一版1998年发布正式名称为ISO/IEC
目前绝大多数编译器都支持C++98标准不过当时错误地引入了export关键字由于技术上的实现难度除了Comeau C++编译器export关键字以外没有任何编译器支持export关键字并且这个标准对现代的一些编译理念有相当的差距有很多现在高级语言都应当有的功能它都没有这也正是后来需要制定C++11标准的原因所在C++标准第二版2003年发布正式名称为ISO/IEC 这个标准仅仅是C++98修订版与C++98几乎一样没做什么修改仅仅是对C++98做了一些勘误就连主流编译器受C99标准影响都已支持的long long都没有被加入C++03标准C++标准第三版日发布正式名称为ISO/IEC
由C++标准委员会于日公布并于2011年9月出版日的国际标准草案(N3376)是最接近于现行标准的草案编辑上的修正C++11包含了核心语言的新机能并且拓展C++标准程序库并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)此次标准为C++98发布后13年来第一次重大修正[17]
注意 C++11标准ISO/IEC 与C11标准ISO/IEC 是两个完全不同的标准后者是C语言的标准C++标准第四版日发布正式名称为ISO/IEC
日ISO组织在其网站上发布文章称
ISO C++14标准已经完成制定正式的官方规格将于今年晚些时候发布
C++ 作者 Bjarne Stroustrup 称主要的编译器开发商已经实现了 C++ 14 规格
C++ 14 是 C++ 11 的增量更新主要是支持普通函数的返回类型推演泛型 lambda扩展的 lambda 捕获对 constexpr 函数限制的修订constexpr变量模板化等等
C++14是c++的现行标准的非正式名称正式名称为&International Standard ISO/IEC (E) Programming Language C++&C++14旨在作为c++11的一个小扩展主要提供漏洞修复和小的改进C++14标准的委员会草案Committee DraftN年5月15日发表[17]工作草案Working DraftN3936已于日完成最终的投票期结束于日结果一致通过已于8月18日公布[17]
纠错 关闭纠错
纠错 关闭纠错
新手上路我有疑问投诉建议参考资料 查看

我要回帖

 

随机推荐