C++课件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C++程序设计西南交通大学电气工程学院唐鹏tang.peng@home.swjtu.edu.cn课程内容•C++语言•面向对象编程(ObjectOriented,OO)•泛型编程初步•MFC图形界面Part1.引言引言•C++是谁?•程序及编程语言•C++语言王国•C++从哪里来?•C++的发展历史•C++到哪里去?•展望程序及编程语言声明式语言(Haskell,Lisp,Prolog,...)过程式语言(C,Fortran,COBOL,...)面向对象语言(C++,Java,Python,...)汇编语言二进制码?逻辑机器程序及编程语言高级语言源代码二进制机器码intn=3;if(n=1){printf(%d,n);}000111100001110101110101110001010101001000101011011110?程序及编程语言高级语言源代码二进制机器码intn=3;if(n=1){printf(%d,n);}000111100001110101110101110001010101001000101011011110“翻译”程序及编程语言高级语言源代码二进制机器码CompilerPython,Perl,Lua,...C,C++,...编译语言解释/脚本语言Java,C#,...性能便捷C++语言王国•什么是C++?•CtoC++:•C语言的超集•面向对象编程•可移植性,不牺牲性能和底层功能•C++compiler:将C++代码翻译为C代码•C++包括?•C++适合做什么?•大型底层设施:数据库引擎•高性能运算:深度神经网络•游戏:……C++联合王国面向对象编程CLegacy泛型编程其他C++之父C++历史197919831985199019982003200520112014CwithClassesBjarneStroustrup更名为C++C++98C++03C++0x计划C++14C++standardscommitteeSTLC++11•TIOBEIndex怎么学习C++1.看书/示例/程序2.编程实践*3.if不懂goto1.4.elsegoto2.“Talkischeap.Showmethecode.”LinusTorvaldsTIPS:沉住气,学习C++精髓。实践出真知。面向工程,面向应用。参考资料*•零基础•Programming:PrinciplesandPracticeUsingC++(BjarneStroustrup)•有C经验的初学者•C++Primer*(StanleyLippman,JoséeLajoie,andBarbaraE.Moo)1kp•ATourofC++(BjarneStroustrup)180p•AcceleratedC++(AndrewKoenigandBarbaraMoo)•ThinkinginC++(BruceEckel)•集成开发环境(IDE)•Compiler•VisualC++Compiler•GCC/G++/MinGW•LLVM/Clang•MSWindowsIDE•VisualStudio201XCommunity•VisualStudio201XExpressforDesktop•Code::Block•CodeLite•QtCreator•Linux/MacIDE•……+Compiler[+Debuger]正版免费VisualStudio2015Commuity特别说明•本文中的提法或解释并不严谨•白话文,以适合初学者,建立感性认识•从学科角度,仅考虑常用情况•准确解释请参阅书籍•本次课程内容仅考虑Console程序•图形界面的C++程序(基于MFC)会在6-8周学习•本课程会用到部分英语•基础英语,熟悉就好•程序所必须Part2.C++程序设计C++程序•Helloworld!//myfirstprograminC++#includeiostreamintmain(){std::coutHelloWorld!;}HelloWorld!C++的技能树1.C++基础•变量和类型•常量•运算符•基本输入输出•注释•预处理1.1变量和类型•基础数据类型•变量声明•不必在程序块开头•变量初始化•auto类型组别基础数据类型*字符型charwchar_t整型•有符号•无符号(un)signedchar(un)signedshort(un)signedint(un)signedlong(un)signedlonglong浮点型floatdoublelongdouble布尔型boolvoid类型void1.2常量(const)•有时,给常量取个名字更方便•C语言的常量inta=5;变量常量整型浮点型字符字符串地址...1.3运算符(operator)•C++新增•new/delete运算符•::运算符•其他与C语言基本相同inta=5;int&b=a;//OKint&c;//Bad!引用必须赋值b=7;printf(ais%d.\n,a);引用reference引用就是某变量的一个别名,对引用操作与对变量直接操作效果完全一样。引用的声明方法:类型标识符&引用名=目标变量名ais7.1.3运算符(operator)1.4基本输入输出•C语言•printf/scanf……•C++语言:标准库提供•标注输出(cout)#includeiostream1.4基本输入输出II•标注输出(cout)•串联多个操作•换行ThisisasingleC++statementIam24yearsoldandmyzipcodeis900641.4基本输入输出III•标注输入(cin)•用法Pleaseenteranintegervalue:702Thevalueyouenteredis702anditsdoubleis1404.1.4基本输入输出IV•标注输入(cin)•串联等效于•输入字符串•函数getline()从输入字符串中提取一行What'syourname?HomerSimpsonHelloHomerSimpson.1.4基本输入输出V•stringstream•标注头文件sstream•字符串和数量值之间互相转换1.5注释•C++支持两种注释:•C++风格注释•C风格注释•例子2.程序结构•语句和流程•函数•重载•模板•命名可见性2.1语句与流程•与C语言相同(略)在for的括号内定义计数变量(即n),更方便,且n在for(;;){...}语句之外不可见!if(n==0){coutsome;}2.2函数•代码复用,逻辑简化→函数•C/C++函数的形式•参数传递•返回值传递typename(para1,para2,...){statements}intaddition(inta,intb){returna+b;}(输入)(输出)2.2函数-参数引用传递•有时也希望输出到参数•返回值存在局限•在C语言中,通常用指针实现•C++函数的参数传递分为:值传递引用传递voidduplicate(inta){a*=2;}voidduplicate(int&a){a*=2;}intx=1;duplicate(x);coutx=x;x=1x=22.2函数-参数引用传递IIx=2,y=6,z=142.2函数-const引用•const引用(constreference)版本(1)版本(2)版本(3)当函数参数是较复杂数据类型时,值传递存在数据复制,效率较低引用传递效率高,但是有参数值被函数篡改的风险效率高,参数无法被修改输入参数采用const引用,输出参数采用非const引用。2.2函数-缺省参数•缺省参数:函数参数的默认值65函数声明中,用=给出参数缺省值;在参数顺序上,缺省参数需靠后。2.2函数-内联函数(inline)•函数调用的开销→内联函数•效率取向•使用•用inline关键词•效率更高,体积更大•无函数调用,而是将代码在调用处展开•与compiler有关2.2函数-函数声明•函数声明•C/C++中,标识符只有在声明后才能使用2.2函数-函数声明•函数声明•多文件项目中,通常把函数声明放在头文件内add.h…intadd(inta,intb=1);…声明main.cpp#includeadd.hintmain(){intc=add(2,3);…}调用add.cpp#include“add.h”intadd(inta,intb){…}…实现要求:创建自己的h文件//my_header.h#ifndefYOUR_HEADER_H#defineYOUR_HEADER_H...(函数定义,类定义)...#endif//some_file.cpp#includemy_header.h......防止该头文件被重复引用2.2函数•小结•函数参数的引用传递效率•const引用安全性•缺省参数效率•内联函数效率•函数声明编译要求2.3重载•C语言的函数不可重名,因此•C++重载:若参数不同,函数名可相同•请注意:若仅是返回值不同,也不可重载/*ccode*/intadd_int(inta,intb);floatadd_float(floata,floatb);doubleadd_double(doublea,doubleb);//c++codeintadd(inta,intb);floatadd(floata,floatb);doubleadd(doublea,doubleb);//c++codefloatadd(floata,floatb);doubleadd(floata,floatb);//Failhere2.3重载102.52.4模板(template)•重载函数可能是不同数据类型的相同操作•函数模板:更抽象和一般化的定义•使用//c++codeintsum(inta,intb){returna+b;}floatsum(floata,floatb){returna+b;}doublesum(doublea,doubleb){returna+b;}templatetemplate-parametersfunction-declarationintt0=sum(1,2);floatt1=sum(1.0f,2.0f);doublet2=sum(1.0,2.0);2.4命名可见性•变量的作用域•全局变量:全局可见(globalscope)•局部变量:{…}范围内可见(blockscope)2.4命名可见性II•每个作用域中,不可重名•不同作用域中,可以重名•需注意C语言不允许2.4命名可见性IIIinnerblock:x:50y:50outerblock:x:10y:50改善了程序友好性,但增加了风险2.4命名可见性-名字空间•命名的苦恼:-(•名字空间(namespace)•特别有利于避免重名•namespace关键词•using关键词声明使用#includeiostream...std::coutx'\n';#includeiostreamusingnamespacestd;...coutx'\n';2.4命名可见性-名字空间II56.28323.14163.复合数据类型•数组•字符串•指针•动态内存•数据结构3.1数组•(略)3.2字符串•(略)3.3指针•指针务必初始化!•防“野指针”•const指针•不能修改指针对应对象的内容•void*指针inta=5;int*pa=&a;int*pb=NULL;//NULLis0inta=5;constint*pa=&a;*pa=7;//ERROR!•C允许void*与其他指针互相转化(cast)•C++不允许,必须explicitcastintN;int*P=&N;void*Q=P;//

1 / 83
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功