高级程序设计语言II天津理工大学计算机与通信工程学院主讲教师:孙世温sunsw80@gmail.comC++概述2020/1/252内容一:C++概述主要内容1.C及C++的起源及基本特点2.C++程序的构成、调试及运行3.C++与C的异同2020/1/253内容一:C++概述1.C及C++的起源和特点C语言的产生1972年,DennisM.Ritchie,美国贝尔实验室2020/1/254内容一:C++概述C语言的诞生是现代程序语言革命的起点,是程序设计语言发展史中的一个里程碑。除了C语言的开发,DennisRitchie还和KenThompson一起开发了UNIX操作系统,因此,他还是名副其实的UNIX之父。丹尼斯·里奇C++的产生20世纪80年代初,BjarneStroustrup,美国贝尔实验室2020/1/25内容一:C++概述5~bs/本贾尼·斯特劳斯特卢普1998年,ANSI/ISOC++标准建立C++的特点1)兼容C2020/1/25内容一:C++概述6C++2)支持面向对象的机制:抽象数据类型封装与信息隐藏继承多态模板2.C++程序的构成、调试及运行2.1一个简单的C++程序2.2典型的C++程序2020/1/257内容一:C++概述例2.1两数相加//sum.cpp#includeiostream.hintadd(inta,intb);//函数原型说明intmain()//主函数{intx,y,sum;//定义三个整型变量coutEntertwonumbers:\n;//界面:提示用户输入两个数cinx;//从键盘输入变量x的值ciny;//从键盘输入变量y的值sum=add(x,y);//调用函数add,将得到的值赋给变量sumcoutThesumis:sum\n;//输出两个数的和sum的值return0}intadd(inta,intb)//定义add函数,函数值为整型{intc;//定义一个整型变量c=a+b;//计算两个数的和returnc;//将c的值返回,通过add带回调用处}2020/1/258内容一:C++概述例2.2典型的C++程序结构#includeiostream.h//类的声明部分classA{intx,y,z;//类A的数据成员声明…fun(){…}//类A的成员函数声明…};//类的使用部分intmain(){Aa;//创建一个类A的对象a…a.fun();//给对象a发消息,调用成员函数fun()return0;}2020/1/259内容一:C++概述开发一个C++程序的过程2020/1/25内容一:C++概述10目标程序源程序可执行代码库.h编译程序compile链接程序link.cpp.hpp.obj.exe1.编辑edit2.编译3.链接4.运行run开发工具:Windows下,VisualC++、VisualStudio等3.C++与C的异同(编程注意事项)1)格式、格式、格式!目的:养成良好的编程风格与习惯代码格式:–注释、换行、空行、{}的恰当应用编程规范:–编程语言的特点:严谨、简洁、易懂、结构清晰2020/1/25内容一:C++概述11反面例子#includestdio.hvoidmain(){floataverage(floatarray[10]);floatscore[10],aver;inti;printf(input10scores:\n);for(i=0;i10;i++)scanf(%f,&score[i]);printf(\n);aver=average(score);printf(averagescoreis%5.2f\n,aver);}2020/1/25内容一:C++概述12floataverage(floatarray[10]){inti;floataver,sum=array[0];for(i=1;i10;i++)sum=sum+array[i];aver=sum/10;return(aver);}参照风格2020/1/25内容一:C++概述13一片黄土。晴有日。日将落。陆小凤在落日下走上了这一片黄土,晚霞起,土色红,红如血。鲜血也已干涸凝结如黄土。陆小凤,用他天下闻名的两根手指,撮起了一撮黄土。他这双也不知道曾经锄断过多少武林名侠刀剑的手指,竟忽然觉得有些刺痛。因为,他知道土中有他朋友的血。-古龙《剑神一笑》2)C++中的输入输出C语言中的基本IOC++2020/1/25内容一:C++概述14inti;floatf;scanf(“%d”,&i);printf(“thisis%f”,f);inti;floatf;cini;cout“thisis”f;注意嵌入头文件#includeiostream.h3)灵活的变量说明floatfun(intx,inty)//对形参直接进行说明{for(inti=0;i10;i++)//对循环变量i进行说明{intsum=0;//循环体内也可对变量sum进行说明sum=sum+i;coutsum=sum;}intz=0;//使用变量z时才说明它z=x+y;}2020/1/2515内容一:C++概述4)结构、联合、枚举名称可以直接做类型名enumboole{FALSE,TRUE};structstring{char*str;intlength;};unionnumber{inti;floatf;};2020/1/2516内容一:C++概述C++在中,定义变量时,说明为:booledone;stringstr;numberx;C中必须写成:enumbooledone;structstringstr;unionnumberx;5)const修饰符:const替代#define宏定义例#define的不安全性#includeiostream.hmain(){inta=1;#defineT1a+a#defineT2T1-T1coutT2isT2endl;return0;}2020/1/2517内容一:C++概述输出:T2is2例2.7用const取代#define。#includeiostream.hintmain(){inta=1;constT1=a+a;constT2=T1-T1;coutT2isT2endl;return0;}2020/1/2518内容一:C++概述输出:T2is0const的其它用法:(1)指向常量的指针是指:一个指向常量的指针变量。例如:constchar*pc="abcd";//声明指向常量的指针(2)常指针是指:把指针本身,而不是它指向的对象声明为常量。例如:char*constpc="abcd";//常指针(3)指向常量的常指针是指:这个指针本身不能改变,它所指向的值也不能改变。要声明一个指向常量的常指针,二者都要声明为const。例如:constchar*constpc="abcd";//指向常量的常指针2020/1/2519内容一:C++概述6)函数相关:函数原型的声明内联函数:inline修饰符带默认参数值的函数函数重载2020/1/25内容一:C++概述20例2.5函数原型的说明#includeiostream.hvoidwrite(char*s);//函数原型的说明voidmain(){write(“Helloworld!”);}voidwrite(char*s){conts;}2020/1/2521内容一:C++概述要求函数原型声明完整:返回值类型函数名(参数表);例2.9内联函数的使用#includeiostream.hinlinedoublecircle(doubler)//内联函数{return3.1416*r*r;}intmain(){for(inti=1;i=3;i++)coutr=iarea=circle(i)endl;return0;}2020/1/2522内容一:C++概述将函数体中的代码直接插入到调用该函数的语句处;目的:提高程序执行效率带有缺省参数值的函数函数原型说明为:intinit(intx=5,inty=10);则x与y的缺省值分别为5与10。以下的函数调用都是允许的:init(100,80);//x=100,y=80init(25);//x=25,y=10init();//x=5,y=102020/1/2523内容一:C++概述例2.13参数类型不同的重载函数#includeiostream.hintcube(inti){returni*i*i;}floatcube(floatf){returnf*f*f;}doublecube(doubled){returnd*d*d;}intmain(){inti=12;floatf=3.4;doubled=5.67;couti*i*i=cube(i)endl;coutf*f*f=cube(f)endl;coutd*d*d=cube(d)endl;return0;}2020/1/2524内容一:C++概述函数重载多个函数可以同名;只要函数参数的类型、个数不同7)内存的分配与释放(涉及到指针)C语言:malloc和freevoid*malloc(unsignedintsize);其作用是在内存的动态存储区中分配一个长度为size的连续空间。voidfree(void*p);其作用是释放由指针p指向的一块内存空间。2020/1/25内容一:C++概述252020/1/25内容一:C++概述26动态分配变量int*p;p=(int*)malloc(sizeof(int));*p=10;printf(“%d”,*p);动态分配数组int*p1;intlen;scanf(“%d”,&len);p1=(int*)malloc(sizeof(int)*len);分配复杂对象structComplex*num;num=(structComplex*)malloc(sizeof(structComplex));p10p10释放内存:free(p);free(p1);free(num);C++:new和delete操作符2020/1/25内容一:C++概述27运算符new用于内存分配的最基本的语法形式为:指针变量=new类型名;运算符delete用于释放new分配的存储空间。其基本的语法形式为:delete指针变量;2020/1/25内容一:C++概述28动态分配变量int*p;p=newint;*p=10;cout*p;动态分配数组int*p1;intlen;cinlen;p1=newint[len];释放内存deletep;delete[]p1;p10p108)引用引用通常被认为是某个变量的别名,声明一个引用的格式如下:数据类型&引用名=已定义的变量名;inti=5;int&j=i;j是一个整数类型的引用,用整型变量i对它进行初始化,这时j就可看作是变量i的别名。2020/1/2529内容一:C++概述例2.22引用的使用。#includeiostream.hvoidmain(){inti;int&j=i;i=30;couti=ij=j\n;j=80;couti=ij=j\n;coutAddressofi&i\n;coutAddressofj&j\n;}2020/1/2530内容一:C++概述引用作函数参数例2.25采用“引用参数”传递函数参数#includeiostream.hvoidswap(int&m,