c面向对象程序设计

上传人:t****d 文档编号:243270039 上传时间:2024-09-19 格式:PPT 页数:49 大小:291.50KB
返回 下载 相关 举报
c面向对象程序设计_第1页
第1页 / 共49页
c面向对象程序设计_第2页
第2页 / 共49页
c面向对象程序设计_第3页
第3页 / 共49页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,书名:,C#,面向对象程序设计,ISBN,:,978-7-111-30056-4,出版社:机械工业出版社,本书配有电子课件,C#,面向对象程序设计 高职高专,ppt,课件,1,第,2,章 数据类型、运算符与表达式,数据类型,类型转换,运算符和表达式,C#,面向对象程序设计 高职高专,ppt,课件,2,2.1,数据类型,C#,语言支持以下数据类型:,数据类型,值类型,引用类型,结构类型,简单类型,枚举类型,整数类型,浮点类型,小数类型,字符类型,布尔类型,类类型,数组类型,接口类型,值类型用来存储实际值,而引用类型则用来存储对实际数据的引用。,C#,面向对象程序设计 高职高专,ppt,课件,3,2.1.1,值类型,值类型包含简单类型、枚举类型和结构类型。类型是同类型数据的抽象,不同的类型在,C#,中用不同的类型标识符来表示。如表,2-1,。,表,2-1,值类型,类型,描述,简单类型,(Simple type),有符号整数:,sbyte, short, int, long,无符号整数:,byte, ushort, uint, ulong,字符类型:,char,浮点类型:,float, double,小数类型:,decimal,布尔类型:,bool,枚举类型,(Enum type),enum E ,结构类型,(Struct type),struct S ,C#,面向对象程序设计 高职高专,ppt,课件,4,1.,简单类型,从计算机的表示角度来看,简单类型又可分为整数类型、浮点类型、小数类型、布尔类型和字符类型。所有的简单类型(,C#,语言的组成部分)均为,.NET Framework,系统类型的别名。例如,,int,是,System.Int32,的别名。,C#,面向对象程序设计 高职高专,ppt,课件,5,整数类型,C#,中提供了,8,种整数类型,它们的取值范围及类型标识符见表,2-2,所示。,描述,位数,类型标识符,取值范围,有符号整数,8,sbyte,-128127,16,short,-3276832767,32,int,-2147483648-2147483647,64,long,-9223372892233727,无符号整数,8,byte,0255,16,ushort,065535,32,uint,04294967295,64,ulong,0184467445,表,2-2,整数类型表,C#,面向对象程序设计 高职高专,ppt,课件,6,C#,提供了两种数据类型来表示小数:单精度浮点型,(float),和双精度浮点型,(double),。两者的划分依据是取值范围和精度的不同,见表,2-3,。,浮点类型,表,2-3,浮点类型表,描述,位数,类型标识符,取值范围,单精度浮点型,32,float,1.510,-45,3.410,38,,,7,位精度,双精度浮点型,64,double,5.010,-324,1.710,308,,,1516,位精度,C#,面向对象程序设计 高职高专,ppt,课件,7,小数类型,为了满足财务和金融计算领域方面高精度的要求,,C#,提供了小数类型(,decimal,)这种高精度的数据类型,避免浮点类型计算造成的误差。,小数类型数据的后面必须加,m,或,M,后缀来表示它是小数类型的,如,3.14m,。否则会被解释成标准的浮点类型的数据。,表,2-4,列出了小数类型的取值范围及精度。,表,2-4,小数类型表,描述,位数,类型标识符,取值范围,十进制类型,128,decimal,1.010,-28,7.910,28,28,到,29,位有效,C#,面向对象程序设计 高职高专,ppt,课件,8,字符类型,C#,提供的字符类型按照国际上公认的标准,采用,Unicode,字符集。它可以表示世界上大部分语言种类。所有,Unicode,字符的集合构成字符类型。,字符类型的描述见表,2-5,。,表,2-5,字符类型表,描述,位数,数据类型,取值范围,字符类型,16,char,U+0000,到,U+ffff,16,位,Unicode,字符,C#,面向对象程序设计 高职高专,ppt,课件,9,给一个字符类型的变量赋值:,char name =,a,;,char,类型的变量值必须用单引号括起来。单引号内的字符数量必须且只能是一个,并且不能是单引号或者反斜杠。,为了表示单引号和反斜杠等特殊的字符,,C#,提供了转义符,如表,2-6,所示。,C#,面向对象程序设计 高职高专,ppt,课件,10,表,2-6,转义字符,转义符,含义,单引号,”,双引号,反斜杠,0,空字符(,Null,),a,发出一个警告,b,倒退一个字符,f,换页,n,换行,将当前的位置移到下一行开头,r,回车,将当前的位置移到本行的开头,t,水平方向的,Tab,v,垂直方向的,Tab,11,布尔类型,布尔类型表示现实中的,“,真,”,或,“,假,”,这两个概念,主要用来进行逻辑判断。在,C#,中,分别采用,true,和,false,这两个值来表示,“,真,”,和,“,假,”,,如表,2-7,所示。,表,2-7,布尔类型,描述,位数,数据类型,取值范围,布尔类型,8,bool,True,或,False,12,2.,枚举类型,假设要在程序中表示一年中的季节,可以使用整数,0,、,1,、,2,和,3,来分别表示春季、夏季、秋季和冬季,这虽然可行,但并不直观。为此,,C#,中提供了一个更好的方案,使用枚举类型可以将一年中的四季分别用,Spring,、,Summer,、,Autumn,和,Winter,这些直观的符号来表示,便于阅读和理解。枚举类型是用户自定义的数据类型,是一种允许用符号代表数据的值类型。当程序中某个变量具有一组确定的值,通过,“,枚举,”,可以将其值一一列举出来。,13,比如,声明一个代表季节的枚举类型,Season,,可以这样声明:,enum Season Spring, Summer, Autumn, Winter;,enum,关键字用于声明枚举。,Season,是枚举名,花括号,“,”,和,“,”,括起来的部分是枚举成员表,枚举成员之间用逗号分隔,任何两个枚举成员不能具有相同的名称。这里声明了一个,Season,枚举类型,它包含,Spring, Summer, Autumn, Winter4,个枚举成员。,14,声明好了一个枚举类型之后,我们就可以像使用简单类型一样来声明枚举类型的变量了,格式为:,枚举类型名 变量名;,以前面定义的,Season,枚举类型为例,要声明该类型的变量,可以这样:,enum Season Spring, Summer, Autumn, Winter;Season season1,season2,season3,season4;season1=Season.Spring;season2=Season.Summer;season3=Season.Autumn;season4=Season.Winter;,这样,,season1,,,season2,,,season3,season4,这,4,个变量的取值分别为,Spring,Summer,,,Autumn,和,Winter,。,每种枚举类型都有基础类型,枚举元素的默认基础类型为,int,。在,Season,枚举中,,Spring,为,0,,,Summer,为,1,,,Autumn,为,2,,依此类推。默认情况下,,C#,规定第,1,个枚举成员的值取,0,,其它成员按顺序依次增,1,。在编程时,可以根据需要为枚举成员赋值。,15,几种为枚举成员赋值的情况。,(,1,)为第,1,个枚举成员赋值,enum Season Spring=1, Summer, Autumn, Winter;,在此枚举中,强制元素序列从,1,而不是,0,开始。,(,2,)为某一个枚举成员赋值,enum Season Spring, Summer, Autumn=6, Winter;,从第一个枚举成员,Spring,到被赋值的枚举成员,Autumn,前的那个枚举成员,Summer,是按默认方式取值的,即,Spring,为,0,,,Summer,为,1,。被赋值的枚举成员,Autumn,取赋给它的值,6,,它后面的枚举成员则在此基础上依次增,1,,即,Winter,为,7,。,(,3,)为多个枚举成员赋值,enum Season Spring, Summer=4, Autumn=6, Winter;,被赋值的枚举成员取所赋给它的值,其后的枚举成员的值依次加,1,,在第一个被赋值的枚举成员,Summer,之前的枚举成员,按默认方式取值。故,Spring,取值为,0,,,Summer,取值为,4,,,Autumn,取值为,6,,,Winter,取值为,7,。,枚举成员的值在不经过显示转换前,是不会变换成整数值的。,16,例,2-1,枚举类型的应用,using System;,public class EnumTest,enum WeekDay Sat=1, Sun, Mon, Tue, Wed, Thu, Fri;,static void Main(),int x = (int)WeekDay.Sun;,int y = (int)WeekDay.Fri;,Console.WriteLine(Sun = 0, x);,Console.WriteLine(Fri = 0, y);,17,输出结果为:,Sun=2,Fri=7,在这个例子中,我们通过,“,枚举名,.,枚举成员,”,的方式来访问枚举成员,如代码中的,WeekDay.Sun,。,18,3.,结构类型,利用前面介绍过的数据类型进行运算似乎已经足够了。但是,我们会经常碰到一些更为复杂的情况。比如,同学录的记录中包含姓名、性别、家庭住址等信息。如果将姓名、性别、家庭住址分别定义为互相独立的简单类型,则难以反映它们之间的内在联系,这些项都与某一学生相联系。那么,有没有好的解决方法呢?,C#,中提供了一种称为结构类型的数据类型用来有组织地把这些不同类型的数据信息存放到一起。结构类型是用户自定义的数据类型。使用结构类型可以方便地存储多条不同类型的数据,极大地方便了编程人员对大量信息的管理。,C#,中的结构类型类似于,C,语言中的结构体。,19,结构类型采用,struct,来声明,格式如下:,struct,结构名,/,结构成员定义,说明:,1.struct,是一个关键字,表明声明的是一个结构体;,2.,结构名的命名需符合,C#,标识符的命名规范:以字母或者下划线开头,其后可以跟任意个字母、数字或者下划线。,3.,花括号中的内容称为结构体,定义结构中所包含的所有成员。每个成员的声明都采用如下形式:,访问修饰符 数据类型 成员名;,20,声明同学录的记录结构,struct student,public string name;,public string sex;,public string address;,其中,,public,是访问修饰符,用来修饰数据成员的可访问性。关于访问修饰符的介绍我们会在类一章中做详细介绍。,21,声明了一个结构体类型,就可以定义该类型的变量了,格式如下:,结构类型名 变量名;,如:,student student1;,通过结构变量加上访问符“,.”,号,再跟成员的名称,可以访问结构的成员,格式为:,结构变量名,.,成员名;,如:,student1.name=“,王刚”,;,可以把结构类型作为另一个结构的成员,形成结构的嵌套。例如,“同学录”这个结构中又包括了“地址”这个结构,“地址”结构类型包括城市、街道和门牌号码,3,个成员。,22,请看以下示例:,struct Student,public string name;,public string sex;,public string address,public string city;,public string street;,public uint no;,Student student1;,23,2.1.2,引用类型,引用类型是和值类型并列的类型,值类型比较简单,对于那些结构比较复杂、抽象能力比较强的数据,就需要使用引用类型来定义。,C#,中引用类型有,4,种:类类型、数组类型、接口类型和委托类型。关于它们的详细介绍,我们会在后续章节中进行。,24,2.2,类型转换,在现实生活中,经常需要在不同的数据类型之间进行转换。比如,举行一次演讲比赛,获奖的比例是,6%,,如果参加演讲比赛的总人数是,170,个人,那么获奖的人数就是,1706%=10.2,个人。在这种情况下,就不得不舍去,0.2,,把,10.2,这个的浮点数变成一个整数,10,来对待。这就是现实生活中的数据类型转换的例子。在,C#,语言中,数据类型的转换可以分为两类:隐式类型转换和显式类型转换。,25,2.2.1,隐式类型转换,隐式类型转换是系统默认的、不需要加以声明就可以进行的转换。在隐式类型转换过程中,编译器无需对转换进行详细检查就能够安全地执行转换。比如,从,int,类型转换到,long,类型就是一种隐式类型转换。,表,2-8,列出了在,C#,中可以进行的各种隐式数值转换。,26,表,2-8,隐式转换表,类型,可以安全的转换为,sbyte,short,、,int,、,long,、,float,、,double,或,decimal,byte,short,、,ushort,、,int,、,uint,、,long,、,ulong,、,float,、,double,或,decimal,short,int,、,long,、,float,、,double,或,decimal,ushort,int,、,uint,、,long,、,ulong,、,float,、,double,或,decimal,int,long,、,float,、,double,或,decimal,uint,long,、,ulong,、,float,、,double,或,decimal,long,float,、,double,或,decimal,ulong,float,、,double,或,decimal,char,ushort,、,int,、,uint,、,long,、,ulong,、,float,、,double,或,decimal,float,double,27,例,2-2,隐式类型转换(将字符类型隐式转换为整型),using System;,using System.Collections.Generic;,using System.Text;,namespace ConvertData,class Program,static void Main(string args),char c= a ;,Console.WriteLine(c=0,c);,int Q = c;,Console.WriteLine(Q=0, Q);,28,程序运行结果如图,2-1,所示。,图,2-1,程序运行结果,29,例,2-3,隐式类型转换(将整型隐式转换为字符类型),using System;,using System.Collections.Generic;,using System.Text;,namespace ConvertData,class Program ,static void Main(string args) ,int a = 97;,Console.WriteLine(a=0,a);,char c = a;,Console.WriteLine(c=0, c);,30,程序运行结果如图,2-2,所示。,图,2-2,错误列表,这个程序在编译时出现了错误,我们从错误列表中可知,int,类型是不能隐式转换成,char,类型的,但是在上个程序中,,char,类型是可以隐式转换为,int,类型的,这个问题请注意。,31,2.2.2,显式类型转换,显式类型转换又叫做强制类型转换。与隐式类型转换相反,显式转换需要用户明确的指定转换类型。格式如下:,(类型标识符)表达式,将表达式的值的类型转换为类型标识符的类型。,如(,int,),3.14,表示的是把,double,类型的,3.14,转换成,int,类型。,除了使用这种方式进行显式转换外,还可以使用,Convert,命令进行显式转换。表,2-9,列出了使用这种方式可以进行的显式转换。,32,表,2-9 Convert,命令进行的显示转换,命令,结果,Convert.ToBoolean(val),val,转换为,bool,Convert.ToByte(val),val,转换为,byte,Convert.ToChar(val),val,转换为,char,Convert.ToDecimal(val),val,转换为,decimal,Convert.ToDouble(val),val,转换为,double,Convert.ToInt16(val),val,转换为,short,Convert.ToInt32(val),val,转换为,int,Convert.ToInt64(val),val,转换为,long,Convert.ToSByte(val),val,转换为,sbyte,Convert.ToSingle(val),val,转换为,float,Convert.ToString(val),val,转换为,string,Convert.ToUInt16(val),val,转换为,ushort,Convert.ToUInt32(val),val,转换为,uint,Convert.ToUInt64(val),val,转换为,ulong,33,表,2-10,显式转换表,类型,可以转换的类型,sbyte,byte,、,ushort,、,uint,、,ulong,或,char,byte,sbyte,或,char,short,sbyte,、,byte,、,ushort,、,uint,、,ulong,或,char,ushort,sbyte,、,byte,、,short,或,char,int,sbyte,、,byte,、,short,、,ushort,、,uint,、,ulong,或,char,uint,sbyte,、,byte,、,short,、,ushort,、,int,或,char,long,sbyte,、,byte,、,short,、,ushort,、,int,、,uint,、,ulong,或,char,ulong,sbyte,、,byte,、,short,、,ushort,、,int,、,uint,、,long,或,char,char,sbyte,、,byte,或,short,float,sbyte,、,byte,、,short,、,ushort,、,int,、,uint,、,long,、,ulong,、,char,或,decimal,double,sbyte,、,byte,、,short,、,ushort,、,int,、,uint,、,long,、,ulong,、,char,、,float,或,decimal,decimal,sbyte,、,byte,、,short,、,ushort,、,int,、,uint,、,long,、,ulong,、,char,、,float,或,double,34,例,2-4,将整型转换成字符类型,using System;,using System.Collections.Generic;,using System.Text;,namespace ConvertData,class Program ,static void Main(string args) ,int a = 97;,Console.WriteLine(a=0,a);,char c =Convert.ToChar(a);,Console.WriteLine(c=0, c);,编译、运行程序,结果如图,2-1,所示。,35,2.3,运算符和表达式,运算符是表示各种不同运算的符号。当执行加法、减法、乘法和除法运算时分别需要使用、,*和,/,符号,这些符号,(,、*和,/),称为运算符。表达式是用运算符,将运算对象连接起来的运算式,是程序语言中最基本的对数据进行加工和处理的过程。注意,单个常数或变量也是表达式。,36,2.3.1,运算符的类型,C#,提供了非常丰富的运算符,大致可以分为以下几类:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符和其他运算符等。,37,算术运算符,算术运算符用于对操作数进行算术运算,,C#,的算术运算符见表,2-11,。,运算符,含义,+,加,减,*,乘,/,除,%,取余,+,自增,1,-,自减,1,表,2-11,算术运算符,38,关系运算符,关系运算符用于比较两个值的大小,返回一个布尔值。,C#,的关系运算符见表,2-12,。,表,2-12,关系运算符,运算符,含义,=,等于,!=,不等于,大于,=,大于等于,39,逻辑运算符,逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑运算结果是布尔型。,C#,的逻辑运算符见表,2-13,。,表,2-13,逻辑运算符,运算符,描述,!,逻辑非,&,逻辑与,|,逻辑或,40,位运算符,位运算符对运算对象进行位的运算,是指进行二进制位的运算。,C#,的位运算符见表,2-14,。,表,2-14,位运算符,运算符,描述,按位取反,&,按位与,|,按位或,右移,按位异或,41,赋值运算符,赋值运算符用于将一个数据赋予一个变量。赋值运算符的左操作数必须是一个变量,而不能是常量,也不能是表达式。,C#,的赋值运算符为,“,=,”,。,在赋值运算符的基础上加上其他运算符,就构成了复合赋值运算符。,C#,的复合赋值运算符见表,2-15,。,表,2-15,复合赋值运算符,运算符,描述,+=,x+=1,等价于,x=x+1,-=,x-=1,等价于,x=x-1,*,=,x*=1,等价于,x=x*1,/=,x/=1,等价于,x=x/1,%=,x%=1,等价于,x=x%1,&=,X&=1,等价于,x=x&1,|=,x|=1,等价于,x=x|1,=,x=1,等价于,x=x1,=,x=1,等价于,x=x1,=,x=1,等价于,x=x,关系运算符, =, is, as,等于运算符,=, !=,逻辑“与”运算符,&,逻辑“异或”运算符,逻辑“或”运算符,|,条件“与”运算符,&,条件“或”运算符,|,条件运算符,?:,赋值运算符,=, *=, /=, %=, +=, -=, =, &=, =,44,2.3.2,表达式,表达式是由运算符、变量和常量等组成的符号序列。一般来说,可以将表达式分为算术表达式、赋值表达式、关系表达式、逻辑表达式以及条件表达式等五种类型。若表达式中包含多个运算符,则该表达式的类型是通过在表达式中执行的最后一次运算的运算符的类型进行划分的。通过对下面代码的运行结果的分析,来总结,C#,中表达式的运算规则。,45,例,2-5,表达式的运用,1 using System;,2 using System.Collections.Generic;,3 using System.Text;,4 namespace ConsoleApplication1,5 ,6 class Program ,7 static void Main(string args),8 ,9 Console.WriteLine(5+7.5=0,5+7.5);,10 Console.WriteLine(7/4=0,sizeof(int)*10/6.0=1,7/4,sizeof(int)*10/6.0),;,11 int x=5;,12 Console.WriteLine(+x=0,x=1,+x,x);,13 int y=5;,14 Console.WriteLine(y +=0,y=1,y+,y);,15 if(y,!=0),16 Console.WriteLine(53,?5,:2=0,53,?5,:2);,17 Console.WriteLine(,!(62)|(58)&(79)=0,!(62)|(58)&(79),);,18 ,19 ,20 ,46,程序的运行结果如图,2-3,所示。,图,2-3,运行结果,47,说明:,1.,在算术表达式中,当操作数的类型不同时,,C#,编译器将先使用类型转换规则,从而确保操作以可预测的方式执行。比如第,9,行代码,先把第一个操作数,5,转换成,float,类型,5.0,,然后再求和,得到的结果为,float,类型,12.5,。,2.C#,中运算符的结合性为:二元运算符(除赋值运算符外)都是左结合,即运算按照从左到右的顺序执行;赋值运算符和条件运算符是右结合,即运算按照从右到左的顺序执行。例如,,x=y=z,按照,x=(y=z),进行求值。,3.,对包含多种运算符的表达式进行求值时,如果有括号,先计算括号里面的表达式,然后按运算符的优先级别和结合性确定计算的先后顺序。先执行优先级别高的运算符,然后执行优先级别低的运算符。比如第,10,行代码,求表达式,sizeof(int)*10/6.0,时,,sizeof,算符的优先级别最高,所以先计算,sizeof(int),然后执行乘、除运算。同一优先级别的运算符,运算次序由结合方向决定。例如第,10,行代码中乘、除运算符具有相同的优先级,其结合方向为从左至右,所以先乘后除。,4.C#,中,根据运算符所使用的操作数个数的不同,将运算符分为:,一元运算符:只有,1,个操作数。一元运算符有:,!, , +, -, (T)x,。,二元运算符:有,2,个操作数,使用时在操作数之间插入运算符。,三元运算符:有,3,个操作数。三元运算符只有一个,即,(?:),。,48,5.,自增(,+,)和自减(,-,)运算符是一元运算符,其作用是使操作数的值自动增,1,或减,1,。注意其操作数只能是变量,不能是常量和表达式。这两个运算符既可以用前缀形式,也可以用后缀形式。这两种形式之间的区别非常细微,却又非常重要。当使用前缀形式时,先将操作数的值增,1,或减,1,,然后再使用表达式的结果。如第,12,行代码中的表达式,+x,先执行,x=x+1,,然后再使用,x,的值(,x=6,)作为表达式的值。如果使用后缀形式,先会使用表达式的结果,然后再将操作数的值进行增,1,或是减,1,。如第,14,行代码中的表达式,y+,先使用,y,的值(,y=5,)作为表达式的值,然后再执行,y=y+1(,此时,y=6),。,6.C#,不支持从整型到布尔类型的转换。例如,在,C,或,C+,中出现如下语句是完全合法的:,int y=5;,if(y),这是因为在,C,或,C+,中支持从整型到布尔类型的转换,自动将非零整数,y,转换成布尔值,True,,但是,C#,中要求将编程意图表达得更清楚,必须使用运用运算符,!=,来判断整数,y,是否等于,0,,如第,15,行代码。,7.,逻辑运算符的优先级别由高到低分别是:逻辑非、逻辑与、逻辑或。如第,17,行代码中逻辑表达式等价于,!true|false&false,,按照逻辑运算符的优先级别进行运算,结果为,false,。,8.C#,中的标识符,是以字母或者下划线开头,其后可以跟任意个字母、数字或者下划线,如,btnOK_Click,,,_student,是合法的标识符。选择标识符时,应注意做到,“,见名知意,”,,以增加程序的可读性。,49,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!