第八章_面向对象编程简介_(2)函数的更多内容.ppt_第1页
第八章_面向对象编程简介_(2)函数的更多内容.ppt_第2页
第八章_面向对象编程简介_(2)函数的更多内容.ppt_第3页
第八章_面向对象编程简介_(2)函数的更多内容.ppt_第4页
第八章_面向对象编程简介_(2)函数的更多内容.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、类的方法(函数),函数的更多内容(2),结构函数,回忆一下第五章的结构类型,我们可以使用它在一个变量中存储多个不同的数据域,并通过.的形式加以访问,如:,Date today; today.Year = 2006; today.Month = Months.Sep; today.Day = 25; today.Week = Days.Mon;,结构函数,当我们需要按格式输出today变量中的内容时,我们可以在Main函数中写这样一段代码:,static void Main(string args) Date today; today.Year = 2006; today.Month = Mon

2、ths.Sep; today.Day = 25; today.Week = Days.Mon; Console.WriteLine(“0 1, 2”, today.Month, today.Day, today.Year); ,Sep 25, 2006,结构函数,但当我们需要输出两个Date型变量中的内容时,我们需要写两遍输出格式化输出代码:,static void Main(string args) Date today, tomorrow; today.Year = 2006; today.Month = Months.Sep; today.Day = 25; today.Week = D

3、ays.Mon; tomorrow = today; tomorrow.Day+; tomorrow.Week+; Console.WriteLine(“0 1, 2”, today.Month, today.Day, today.Year); Console.WriteLine(“0 1, 2”, tomorrow.Month, tomorrow.Day, tomorrow.Year); ,结构函数,在这里,我们可以把格式化日期数据的代码放在一个单独的函数中进行处理,如:,static string ToFormatDate(Date theDate) return theDate.Mont

4、h + “ “ + theDate.Day + “, “ + theDate.Year; static void Main(string args) Date today, tomorrow; / Initialsize today and tomorrow variable. Console.WriteLine(ToFormatDate(today); Console.WriteLine(ToFormatDate(tomorrow); ,结构函数,或者还有一种更为优雅的方法 使用结构函数 结构体中除可以存放数据外,还可以把函数写在结构体中,称其为结构函数或成员函数。 通过把函数放入结构体中,

5、可以方便的处理结构体中的数据,使函数的语意更为清晰、明了。 结构函数的定义与使用与普通函数类似,没有什么特别之处,唯一不同的是结构函数能够自由读写结构类型中的数据成员。,结构函数,结构函数的定义方法:,struct public ; public ; / . public ( ) / 在这里可以直接访问结构成员变量; public ( ) / 在这里可以直接访问结构成员变量; ,结构函数,使用结构函数实现日期数据的格式化功能:,struct Date public ushort Year; public Months Month; public byte Day; public string

6、ToFormatDate() return Month + “ “ + Day + “, “ + Year; static void Main(string args) Date today; today.Year = 2006; today.Month = Months.Sep; today.Day = 25; Console.WriteLine(today.ToFormatDate(); ,结构函数,增加函数:,struct Date public int Year,Month,Day; public Date AddDay() Date tomorrow; tomorrow.Year =

7、 Year; tomorrow.Month = Month; tomorrow.Day = Day+1; return tomorrow; static void Main(string args) Date today, tomorrow; today.Year = 2006; today.Month = 9; today.Day = 25; tomorrow = today.AddDay(); Console.WriteLine(“Tomorrow is: 0”, today.ToFormatDate(); ,类中的方法(函数),换成类中的方法(函数):,class Date public

8、 int Year,Month,Day; public Date AddDay() Date tomorrow = new Date(); tomorrow.Year = Year; tomorrow.Month = Month; tomorrow.Day = Day+1; return tomorrow; static void Main(string args) Date today = new Date(); today.Year = 2006; today.Month = 9; today.Day = 25; Date tomorrow = today.AddDay(); Consol

9、e.WriteLine(today.ToFormatDate(); Console.WriteLine(tomorrow.ToFormatDate(); ,结构函数,在上述结构的基础上完成如下作业: 实现Date结构体,其中包含年、月、日三个数据。 实现增加一天、增加一月、增加一年的功能。 实现减少一天、减少一月、减少一年的功能。 处理日期溢出问题,如天数大于31,月数大于12,或天数小于1,月数小于1等问题。 实现两日期相加功能。 实现日期格式化功能。,结构函数,使用示例:,static void Main(string args) Date today, tomorrow, yesterd

10、ay; today.Year = 2006; today.Month = Months.Sep; today.Day = 25; tomorrow = today;tomorrow.AddDay(); yesterday = today;yesterday.SubtractDay(); Console.WriteLine(“Yesterday is: 0”, yesterday.ToFormatDate(); Console.WriteLine(“Today is: 0”, today.ToFormatDate(); Console.WriteLine(“Tomorrow is: 0”, to

11、morrow.ToFormatDate(); ,函数的重载,求和函数的实现:,static int Sum(int numbers) int sum; foreach (int element in numbers) sum += element; return sum; static void Main(string args) int numbers = 1, 2, 3, 4, 5, 6, 7, 8, 9 ; Console.WriteLine(Sum(numbers); ,函数的重载,该函数存在着缺陷,只能使用它对整数进行求和,如要进行浮点数求和,就需实现求和函数的浮点版版:,stati

12、c double DoubleArraySum(double numbers) double sum; foreach (double element in numbers) sum += element; return sum; ,函数的重载,这样,在使用求和函数进行求和时,就需要记住求和函数的不同版本:,static void Main(string args) int intNumbers = 1, 3, 5, 7, 9 ; double doubleNumbers = 3.14159; 1.414, 2.71828 ; Console.WriteLine(IntArraySum(int

13、Numbers); Console.WriteLine(DoubleArraySum(doubleNumbers); ,整数数组的求和,浮点数数组的求和,函数的重载,观察控制台输出函数,我们可以使用它输出多种类型的数据:,static void Main(string args) Console.Write(1); Console.Write(true); Console.Write(3.14159); Console.Write(“Hello world!”); Console.Write(“Hello, 0”, “somebody”); ,整数,逻辑值,浮点数,字符串,不确定数目参数,函数

14、的重载,通过对以上示例的观察,我们发现,可以使用不同类型、不同数量的参数来调用Write函数。 这样,我们只需使用Write函数就能输出输出多种类型的数据,而不需要记住不同类型的输出函数的名字。 以上这些特性是通过函数的重载来实现的,这样可以大大的方便我对函数的使用,不再需要记忆大量不同的函数名字了。,函数的重载,什么是函数的重载 函数的重载是指多个函数使用同一个名字对函数进行命名。 重载的函数是通过参数的类型和数量来加以区分的。转而去调用特定的函数。 重载函数的参数类型、参数数量、返回值类型都可以不相同。 为了对重载函数进行区分,重载的函数必需在参数类型或参数数量上有所不同,而单单只是返回类

15、型不同是无法对重载函数进行区分的。,函数的重载,函数重载示例,static int Sum(int numbers) int sum; foreach (int element in numbers) sum += element; return sum; static double Sum(double numbers) double sum; foreach (double element in numbers) sum += element; return sum; ,参数和返回 值的类型不同,处理整数累加,处理浮点数累加,函数的重载,函数重载示例 在这里分别使用Sum函数的int和do

16、uble版进行求和,但可使用相同的名字进行调用。,static void Main(string args) int intNumbers = 1, 3, 5, 7, 9 ; double doubleNumbers = 3.14159, 1.414, 2.71828 ; int intNumbersSum = Sum(intNumbers); double doubleNumbersSum = Sum(doubleNumbers); Console.WriteLine(“Int numbers sum: 0”, intNumbersSum); Console.WriteLine(“Doubl

17、e numbers sum: 1”, doubleNumbersSum); ,函数的重载,函数重载示例,static void WriteLine(int intVal) / Code in here. static void WriteLine(bool boolVal) / Code in here. static void WriteLine(double doubleVal) / Code in here. static void WriteLine(string formatString,) / Code in here. static void WriteLine(string f

18、ormatString, params string outArgs) / Code in here. ,构造函数的重载,构造函数重载示例,public class Animal private string name; public Animal() name = 动物; public Animal(string name) = name; ,委 托,什么是委托 委托与 C 语言中的函数指针非常类似,可以使用委托去调用函数,并可方便的修改委托所引用的函数。 可以把委托理解成函数的别名,也就是说使用另一个名字来调用同一个函数,就像是调用该函数本身一样,本质上没什么区别,只是使用不同的名字而已。 定义委托时,要声明委托所能引用的函数的类型,即委托所能引用的函数的参数类型和返回类型等。,委 托,委托的定义方法 委托定义示例 委托使用示例 委托也是一种类型,因此,委托应定义在命名空间中,与 class 平级。,delegate ( );,delegate void ProcessDelegate(double var1, double val2);,ProcessDeleg

温馨提示

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

评论

0/150

提交评论