C++程序开发初步课件_第1页
C++程序开发初步课件_第2页
C++程序开发初步课件_第3页
C++程序开发初步课件_第4页
C++程序开发初步课件_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1

C++程序开发初步

2

C++程序开发初步最简单的C++程序结构函数类与对象C++程序开发过程与环境3程序设计中主要应用两大类模型面向过程的模型 概括为:数据结构+算法面向对象的模型 认为世界是由一些对象(objects)组成的,每一个对象包括属性和方法两部分;属性是描述对象特征的一些数据或数据结构,方法表明对象的变化或一个对象对其他对象的作用,对象间通过消息传递进行通信4最简单的C++程序结构一个简单的C++程序运算符与表达式数据类型变量与常量5一个简单的C++程序#include<iostream.h>intmain(){

int

x,y,s; //定义3个整数:两个代表加数,一个代表和

cout<<“输入两个整数:”; //给用户发出输入两个数的提示

cin>>x>>y; //输入两个整数到x和y s=x+y; //将x和y相加,送到s中

cout<<“x+y=” //输出提示

<<s //输出s的值

<<endl; //换行,语句结束

return0;}6上例说明C++的注释符有:“//”后面与“/*”和“*/”之间的“;”是C++语句的结束符,表明一个语句的结束x”、“y”和“s”称为三个变量,是三个存储数据的空间的名字“cout”称为标准输出设备,通常指显示器“cin”称为标准输入设备,通常指键盘“endl”表示换行“#include”称为文件包含7运算符与表达式运算符是一种程序记号,它作用于操作数而触发某种操作由运算符和操作数组成的符号序列,就称为表达式8最基本的运算符算术运算符赋值运算符复合赋值运算符9运算符在表达式中的运算顺序运算符的优先级别运算符与操作数的结合方向运算符的先后排列顺序10各种运算符间的优先级别和结合性运算符结合性优先级别单目减:

-←高低双目算术运算符:*/→+-→标准输入输出:>><<

→赋值:=←11例1.1.1

#include<iostream.h>

intmain(){

intx,y;

cout<<"x=3,y=8,x*=y+1:"<<(x=3,y=8,x*=y+1)<<endl;

cout<<"x=3,y=8,x=x*y+1:"<<(x=3,y=8,x=x*y+1)<<endl;return0;}12++与--有两种使用形式前缀形式,即它们在操作数前,如++x,--x后缀形式,即它们在操作数后,如x++,x--++表达式与--表达式独立使用时,前缀形式与后缀形式无区别,但它们在表达式中被引用时,结果是不同的。前缀形式是先增(减)1,后被引用;后缀形式是先被引用,后增(减)113例1.1.2

#include<iostream.h>

intmain(){

intx,y;x=5,y=x++;//先引用后增1

cout<<"x=5,y=x++:"<<y<<",x="<<x<<endl;x=5,y=++x;//先增1后引用

cout<<"x=5,y=++x:"<<y<<",x="<<x<<endl; return0;}14数据类型整型类型与实型类型字符类型字符串算术数据的类型转换sizeof

运算符15数据的规范化为数据分配相应大小的存储空间;确定数据值的范围;确定数据的表示精度;确定数据可以进行的运算种类。16最常用的数据类型的比较数据类型关键字意义存储空间表数精度(有效数字)表数范围运算类型char字符8位+、-、%short短整数16位-32768~32767+、-、*、/、%int整数32位-2147483648~2147483647float单精度浮点32位7位

(3.4×10-38~3.4×1038)+、-、*、/、%double双精度浮点64位16位

(2.23×10-308~1.79×10308)longdouble长双精度80位18位±(3.37×10-4932~1.18×104932)17整型类型与实型类型

整型就是不带有小数点的数据类型C++还把整型数分为带符号和不带符号两大类实数一般用小数形式或科学记数法(指数形式)书写18C++的转义字符序列序列值字符功能\a0X07BEL警告响铃\b0X08BS退格\f0X0CFF走纸\n0X0ALF换行\r0X0DCR回车\t0X09HT水平制表\v0X0BVT垂直制表\\0X5c\反斜杠\'0X27'单引号\"0X22"双引号\?0X3F?问号\o整数任意0[L1]:最多为3位的八进制数字串\xH整数任意H:十六进制数字串19字符串字符串常量也称字符串文字或字符串,它们是括在一对双撇号内的字符序列字符串常量与字符型常量在内部存储上是不同的20算术数据的类型转换在表达式中,常常会发生数据类型的转换,即将数据由一种类型转换成另一种类型下面介绍这些类型转换规则。 常规转换 传送转换 用类型运算符进行显式转换21例1.1.4

#include<iostream.h>

intmain(){shortinta=-32768,b,i=1234567890;//i溢出

unsignedshortint

ua=32768,ub;

cout<<"b=ua:"<<(b=ua)<<endl;//注意ua对int溢出

cout<<"ub=a:"<<(ub=a)<<endl;//注意有符号负数向无符号数转换

cout<<i;}22sizeof

运算符sizeof是一个单目运算符,用以计算操作数在内存中占用的字节数。它的操作数可以是以下两种情况:

括在圆括号中的类型标识符 一个表达式sizeof

运算符具有最高优先级,最高优先级中的运算符都是从右向左结合的23例1.1.5

#include<iostream.h>

intmain()//该程序在16位和32位系统中的运行结果不同!

{

cout<<"sizeofunsignedchar:"<<sizeof(unsignedchar)<<endl;

cout<<"sizeofchar:"<<sizeof(char)<<endl;

cout<<"sizeofunsignedint:"<<sizeof(unsigned

int)<<endl;

cout<<"sizeofshortint:"<<sizeof(short

int)<<endl;

cout<<"sizeofint:"<<sizeof(int)<<endl;

cout<<"sizeofunsignedlong:"<<sizeof(unsignedlong)<<endl;

cout<<"sizeoflong:"<<sizeof(long)<<endl;

cout<<"sizeoffloat:"<<sizeof(float)<<endl;

cout<<"sizeofdouble:"<<sizeof(double)<<endl;

cout<<"sizeoflongdouble:"<<sizeof(longdouble)<<endl;}24变量与常量程序变量字面常量与符号常量25程序变量程序变量简称变量。变量有以下特点:变量指称了程序中使用的一个被命名存储区域(称程序实体),以存放可由程序修改的值,变量在某一时刻的值称为变量值。变量的名称为变量名。C++规定变量名由如下三种符号组成: 大小写字母——可用于变量名的任何位置; 下划线——可用于变量名的任何位置; 数字——不能用于变量名的首部。每个变量应属于一个特定的类型26例1.1.6#include<iostream.h>intmain(){

inti; //声明i为整型

i=3; //给变量i赋值3

cout<<"Thefirst\"i\"is:"<<i<<endl;i=5; //给变量i再赋值5

cout<<"Thesecond\"i\"is:"<<i<<endl;

cout<<"Enteranumber:";

cin>>i; //由键盘给变量i输入一个值

cout<<"\nThelast\"i\"is:"<<i<<endl;}27字面常量与符号常量常量可以是字面常量(也称直接常量)或符号常量。前面使用的基本上都是字面常量下面介绍两种符号常量: (1)用const定义的符号常量 (2)用宏定义模拟符号常量28例1.1.7/******************************程序名:area_circum**功能:计算圆的面积与周长*******************************/#include<iostream.h>

intmain(){floatfArea,fCircum;

fArea=3.1415926*2.0*2.0;

cout<<"Theareais:"<<fArea<<endl;

fCircum=3.1415926*2.0*2.0;

cout<<"Thecircumis:"<<fCircum<<endl;}29用宏定义模拟符号常量#include<iostream.h>#definePi3.1415926 //定义宏#definer2.0 //定义宏

intmain(){floatfArea,fCircum;

fArea=Pi*r*r; //引用宏

cout<<"Theareais:"<<fArea<<endl;

fCircum=2.0*Pi*r; //引用宏

cout<<"Thecircumferenceis:"<<fCircum<<endl;}30函数函数的意义与用法函数定义与函数结构函数原型与函数声明函数调用与内联函数传值调用与引用类型库函数应用31函数的意义与用法函数是C++程序中组织过程的机制。它对较大的程序比较有效。这里,主要介绍函数的用法,因此仍然使用前面介绍过的求圆的面积的例子,只不过用函数的形式来描述32例1.2.1#include<iostream.h>#definePi3.1415926 intmain(){floatflR=1.2,fArea;floatArea(float); //函数声明fArea=Area(flR); //函数调用cout<<"Theareais:"<<fArea<<endl;}floatArea(floatfR) //定义求圆面积的函数{ return(Pi*fR*fR);}33C++程序的一般结构系统调用返回系统

f1()f11(){④{

↓③↓⑤main()②f11();⑥}{↓⑦↓①}f21()f1();⑧{↓⑨f2()12↓13f2();10{}↓21↓1114}f21();f22()20↓1516{f22();↓17↓1918}}34函数定义与函数结构一个C++函数的定义由函数头与函数体两部分组成,形式如下:

函数首部

{

函数体

}35函数首部函数首部是函数的接口部分,其组成形式如下:

类型名

函数名(形式参数表列)函数类型规定为函数返回值的类型函数名是函数的标识,它应是一个有效的C++标识符形式参数表列是括在园括号中的0个或多个以逗号分隔的形式参数36函数体一个函数体是一个语句块,是用一对花括号封装的语句序列。它描述了函数实现一个功能的过程。它最后执行一个函数返回,返回的作用是: 将流程从当前函数返回其上级(调用函数); 撤销函数调用时为各参数及变量分配的内存空间; 向调用函数返回顶多一个值37例1.2.2voidArea(floatfR) //定义求圆面积的函数{cout<<"Theareais:"<<(Pi*fR*fR)<<endl;return;}或voidArea(floatfR) //定义求圆面积的函数{cout<<"Theareais:"<<(Pi*fR*fR)<<endl;return;}38主函数main()main()函数是一个特殊的函数。它的名字是固定的。它可看作是由操作系统调用的一个函数。其返回值可以是void型或int型(可以缺省)。当其返回值为int型时,用0或非0,告诉操作系统程序是否正常结束39例1.2.3

#include<iostream.h>main(){

cout<<"ok!";return(0);}40函数原型函数原型也称函数模型,是由函数定义中抽取出来的能代表函数应用特征的部分:

·

函数类型

·

函数名

·

参数个数及其类型函数原型的形式为:类型函数名(参数类型1,参数类型2,…,参数类型n)41函数提前声明当函数定义在前调用在后时,编译器在调用函数之前,能从其定义中抽取函数原型当函数调用在前定义在后时,要求程序员在调用之前用函数原型对函数进行声明,以便编译器从中得到函数原型所提供的有关信息函数声明中的参数名对编译器没有意义42函数调用与内联函数函数调用的作用是:

·

用实参数(如例1.2.1中的nR)向形式参数(如例1.2.1中的fR)传递数据;

·

中断现行(调用)函数,把流程转向(被调用)函数的入口处,开始执行被调函数在调用与返回过程中,需要付出一定的时间与空间代价用于处理现场。当函数较小,又反复使用时,处理现场的开销比重会急剧增大。若把函数体嵌入函数调用处,便可以大大提高运行速度,节省开销。内联函数就可以自动实现这一功能43例1.2.4#include<iostream.h>#definePi3.1415926 intmain(){floatfR1=1.2,fR1=2.3,fArea;floatArea(float); //函数原型声明fArea=Area(fR1); //函数调用1cout<<"Theareais:"<<fArea<<endl;fArea=Area(fR2); //函数调用2cout<<"Theareais:"<<fArea<<endl;}floatArea(floatfR) { return(Pi*fR*fR);}44例1.2.5#include<iostream.h>#definePi3.1415926 intmain(){floatfR1=1.2,fR1=2.3;floatArea(float); //函数原型声明cout<<"Theareais:"<<Area(fR1)<<endl;//函数调用1cout<<"Theareais:"<<Area(fR2)<<endl;//函数调用2}floatArea(floatfR) { return(Pi*fR*fR);}45例1.2.6#include<iostream.h>#definePi3.1415926 intmain(){floatflR=1.2,fArea;inlinefloatArea(float); //内联函数以声明为主fArea=Area(flR); cout<<"Theareais:"<<fArea<<endl;}inlinefloatArea(floatfR) //定义内联函数{ return(Pi*fR*fR);}46内联函数定义方法一种是将函数定义内嵌在类的接口中一种是定义在类接口的外部注意,由于编译器必须知道内联函数的函数体才能进行内联替换,因此,内联函数在程序中被调用之前,必须被编译器看见,即内联函数必须在调用之前定义或声明47传值调用与引用类型传值调用(即“值传递”)是C++函数调用的重要特征,即调用函数向被调用函数传送的是参数值引用(reference)。这一概念的引入,大大简化了许多语法规则,并使得一些本来困难或不可能的实体操作成为可能48例1.2.7#include<iostream.h>

intmain()

{

intx=3,y=5;

cout<<"Befor\'swap\':x="<<x<<",y="<<y<<endl;voidswap(int,int);

swap(x,y);

cout<<"After\'swap\':x="<<x<<",y="<<y<<endl;}

voidswap(int

a,intb){

inttemp;temp=a;a=b;b=temp;

cout<<"In\'swap\':a="<<a<<",b="<<b<<endl;}49例1.2.8#include<iostream.h>intmain(){inti=5;int&ri1=i;cout<<"i="<<i<<",ri1="<<ri1<<endl;i*=3; //改写变量cout<<"i="<<i<<",ri1="<<ri1<<endl;ri1+=5; //改写引用cout<<"i="<<i<<",ri1="<<ri1<<endl;}50例1.2.9#include<iostream.h>intmain(){

inti=5;

int&ril=i;

cout<<"&i="<<&i<<",&ril="<<&ril<<endl; //&为求地址运算符

}51引用参数的swap()函数#include<iostream.h>intmain(){

intx=3,y=5;voidswap(int&,int&);//引用参数

swap(x,y);

cout<<"x="<<x<<",y="<<y<<endl;}voidswap(int&n1,int&n2){

inttemp=n1;n1=n2;n2=temp;}52库函数应用库函数是C++厂商收集的一些成熟的函数,以供用户“拿来就用”。程序员使用库函数无须再自行定义,只要注意事先了解以下3点便可:

·

函数的功能;

·

函数的原型——函数名、参数个数及类型、返回类型,以便正确调用;

·

使用库函数所需的头文件——其中有函数原型声明。程序员使用库函数之前只需在程序中使用#include指令嵌入相应的头文件而不必再进行函数的原型说明53例1.2.12

#include<iostream.h>#include<math.h>//嵌入数学函数库头文件

intmain(){floatf;

cout<<"Enterarealnumber:";

cin>>f;

cout<<"Thesqnarerootof“<<f<<”is:”<<sqrt(f)<<endl; //sqrt是数学函数库math中的一个库函数

}5415个标准头文件文件名功能文件名功能assert.h程序断言诊断signal.h中断信号处理ctype.h字符处理stdarg.h可变参数的宏处理errno.h报告库函数出错stddef.h公共定义float.h实型类型的特征参数stdio.hI/O函数库limit.h整型量大小的限制参数stdlib.h常用函数库local.h地方特征string.h字符串处理math.h数学函数库time.h日期与时间函数库setjmp.h非局部跳转55类与对象一个简单的面向对象的例子类的定义与实现对象的生成与构造函数对象的撤销与释放函数友元56一个简单的面向对象的例子一个面向对象的C++程序由三部分组成:

·

类接口的定义;

·

主函数的编写;

·

类的实现——

成员函数的定义57面向对象的程序描述的圆#include<iostream.h>#definePi3.1415926classCircle{ //定义一个Circle类,描述了抽象的圆

private: //私有成员

floatmfR; //数据成员:半径

public:Circle(floatfR); //成员函数:构造函数

voidOutputArea(); //成员函数:求面积

voidOutputCircum(); //成员函数:求周长};58intmain() //进行具体的计算{Circlea(1.23),b(5.67); //声明两个Circle类对象a和b

a.OutputArea(); //输出对象a的面积

a.OutputCircum(); //输出对象a的周长

b.OutputArea(); //输出对象b的面积

b.OutputCircum(); //输出对象b的周长}Circle::Circle(floatfR) //构造函数定义{

mfR=fR;}voidCircle::OutputArea() //成员函数OutputArea()的定义{

cout<<"Theareais:"<<Pi*mfR*mfR<<endl;}voidCircle::OutputCircum() //成员函数OutputCircum()的定义{

cout<<"Thecircumferenceis:"<<2.0*Pi*mfR<<endl;}59类的定义与实现类的定义包含两部分:

·

数据成员:描述某类对象的属性;

·

成员函数:描述某类对象的行为和变化等私有成员不允许外界直接访问,只能由本类的成员函数访问。外界与对象间的信息传送只能通过公开成员进行,数据成员是对象隐藏的部分,由关键词private说明为私有的由关键词public说明为公开的,信息隐藏是面向对象程序设计的基本原则,它将外界不需要知道的信息都隐藏起来,以减少程序设计的复杂性。因此默认的成员都是私有的,即当私有成员放在类接口的开头部分时,关键词private可以缺省60定义内联成员函数的方法将成员函数直接定义在类的定义中将成员函数定义在类定义之外时使用关键字inline61成员函数直接定义在类的定义中#include<iostream.h>#definePi3.1415926classCircle{ private: floatmfR; public:voidCircle::OutputArea()//内联OutputArea(){cout<<"Theareais:"<<Pi*mfR*mfR<<endl;}voidCircle::OutputCircum() //内联OutputCircum(){cout<<"Thecircumferenceis:"<<2.0*Pi*mfR<<endl;}};62成员函数定义在类定义之外时使用关键字inline

#include<iostream.h>#definePi3.1415926classCircle{ private: floatmfR; public: voidOutputArea(); voidOutputCircum(); };inlinevoidCircle::OutputArea()//内联的OutputArea()定义{cout<<"Theareais:"<<Pi*mfR*mfR<<endl;}inlinevoidCircle::OutputCircum() //内联的OutputCircum()定义{cout<<"Thecircumferenceis:"<<2.0*Pi*mfR<<endl;}63对象的生成与构造函数创建对象时,要做的工作是:

·

给对象一个标识符;

·

给对象开辟一个内存空间;

·

将对象中的成员数据初始化64构造函数的特点构造函数具有特定名字──与类名相同。如类Circle的构造函数名也为Circle。构造函数不能标以返回类型。它的返回值是隐含的,是指向类本身的值。因此在例1.3.1中定义的构造函数没有返回类型。构造函数也可以定义为内联函数当系统执行对象声明语句时,构造函数会被自动调用,去初始化被声明的对象删除构造函数允许参数缺省调用65对象的撤销与释放函数释放函数在对象撤销时被自动调用,用于执行一些清理任务,如释放由构造函数分配的内存等释放函数有如下一些特点:

·

与类同名,之前冠以波浪号,以区别于构造函数;

·

不指定返回类型;

·

不能指定参数。66友元用friend声明了的外部函数称为这个类的友元函数元函数的使用有三个要点:

·

在类定义中用关键字friend声明;

·

在类定义之外定义;

·

使用类对象引用作参数。外部友元函数的作用域是所在类的类作用域友元函数不仅可以访问对象的公开成员,而且可以访问对象的私有成员67友元函数是另一个类的成员函数友元函数作为一个类的成员函数时,除应当在它所在的类定义中声明之外,还应当在另一个类中声明它的友元关系友元函数既可以引用本类对象的私有成员,这时毋须本类对象的引用参数;还可以引用声明它是友元的类对象中的私有成员,这时必须有友员类对象的引用参数一个类的成员函数作另一个类的友元函数时,必须先定义它,而不仅仅是声明它68友元关系classx{private:

成员1…………public:pf();……}classx{private:

成员1……public:pf();friendf();……}f();f();可以访问可以访问不可访问声明友元关系可以访问可以访问69例1.3.2

#include<iostream.h>#include<string.h>classGirl{char*name,*dial;public:

Girl(char*n,char*d){name=newchar[strlen(n)+1];

strcpy(name,n);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论