《第九章(1) 定义类_构造函数.ppt》由会员分享,可在线阅读,更多相关《第九章(1) 定义类_构造函数.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第九章第九章 类类-构造函数构造函数C#中类的定义方法中类的定义方法类的使用在 C#中,我们使用 new 运算符来创建类的对象。类名类名 对象名对象名=new 类名类名();C#中类的定义方法中类的定义方法类定义的示例:class 人人 public string 姓名姓名;public string 性别性别;public string 年龄年龄;public void 吃饭吃饭(食物食物 食物表食物表)foreach(食物食物 一份食物一份食物 in 食物表食物表)if(一份食物一份食物=我爱吃的我爱吃的)Console.WriteLine(“0 吃了吃了 1!”,姓名姓名,一份食物一份食
2、物);else Console.WriteLine(“0 扔了扔了 1!”,姓名姓名,一份食物一份食物);C#中类的定义方法中类的定义方法类的使用示例:人人 小强小强=new 人人();小强小强.姓名姓名=小强小强;小强小强.性别性别=男男;小强小强.年龄年龄=20;小强小强.吃饭吃饭(new 食物食物 食物食物.红烧肉红烧肉,食物食物.生发药生发药 );小强小强.睡觉睡觉(16);小强小强.玩玩(棒球棒球);让它能工作起来让它能工作起来要让之前的示例能工作起来,我们还需要指定小强喜欢吃些什么,那么我们可以在“人”这个类中加入一个新的成员爱吃的食物。class 人人 public string
3、 姓名姓名;public string 性别性别;public int 年龄年龄;public 食物食物 爱吃的食物爱吃的食物;让它能工作起来让它能工作起来我们在建立人小强这个对象时,就可以指定他爱吃的食物了!人人 小强小强 =new 人人();小强小强.姓名姓名 =“小强小强“;小强小强.性别性别 =“男男”;小强小强.年龄年龄 =20;小强小强.爱吃的食物爱吃的食物=new 食物食物 食物食物.红烧肉红烧肉,食物食物.生发药生发药;小强小强.吃饭吃饭(new 食物食物 食物食物.红烧肉红烧肉,食物食物.生发药生发药);让它能工作起来让它能工作起来想想,如果忘了指定小强爱吃的东西,那会怎么样
4、?这样下去的话,小强会怎么样?人人 小强小强 =new 人人();小强小强.吃饭吃饭(new 食物食物 食物食物.红烧肉红烧肉,食物食物.生发药生发药);小强小强 扔了扔了 红烧肉!红烧肉!小强小强 扔了扔了 生发药!生发药!他会被饿死的!他会被饿死的!而且最可悲的是而且最可悲的是他到死还是个秃子!他到死还是个秃子!拯救计划拯救计划我们要拯救小强!怎么才能防止漏填“爱吃的食物”字段这种情况的发生呢?构造函数构造函数定义对象,也就是要为对象分配空间,定义对象,也就是要为对象分配空间,也会为成员变量分配一块空间。每次创也会为成员变量分配一块空间。每次创建对象时都需进行初始化工作,这是一建对象时都需
5、进行初始化工作,这是一项繁琐的工作,因此定义了构造函数。项繁琐的工作,因此定义了构造函数。构造函数是特殊的方法,当用构造函数是特殊的方法,当用new命令每命令每生成一个实例时,构造函数都会自动执生成一个实例时,构造函数都会自动执行一次,而不用开发人员手工完成。行一次,而不用开发人员手工完成。C#中类的定义方法中类的定义方法构造函数和析构函数构造函数:构造函数是指在创建类的对象时自动执行的函数,由它负责对类的对象进行初始化。析构函数:析构函数是指在类的对象销毁时自动执行的函数,由它负责对类的对象进行消销毁。C#中类的定义方法中类的定义方法构造函数的特点:构造函数的特点:构造函数其实就是定义这样的
6、函数,它构造函数其实就是定义这样的函数,它的名字与类的名字相同,并且不用定义的名字与类的名字相同,并且不用定义返回类型,因为构造函数是不能返回值返回类型,因为构造函数是不能返回值的。的。除以上不同之处外,其它都和成员函数除以上不同之处外,其它都和成员函数的定义一样,它也可以有参数,并且也的定义一样,它也可以有参数,并且也可以重载。可以重载。C#中类的定义方法中类的定义方法构造函数的特点构造函数的特点:每个类至少有一个构造方法,每个类至少有一个构造方法,如果没有定义如果没有定义构造方法,则编译系统会自动产生一个无参构造方法,则编译系统会自动产生一个无参数的默认构造方法,数的默认构造方法,这个构造
7、方法不执行任这个构造方法不执行任何代码。何代码。对于简单的类来说,默认的构造函数已足够对于简单的类来说,默认的构造函数已足够用,但对于复杂的程序而言通常不会这样做。用,但对于复杂的程序而言通常不会这样做。一旦定义了自己的构造函数,默认的构造函一旦定义了自己的构造函数,默认的构造函数就不再使用了。数就不再使用了。C#中类的定义方法中类的定义方法构造函数的调用:类的构造函数是在创建类的对象时自动被调用的。类名类名 对象名对象名=new 类名类名(参数表参数表);构造函数使用示例构造函数使用示例static void Main(string args)人人 王秃子王秃子=new 人人(王秃子王秃子,
8、男男,20);Console.WriteLine(姓名:姓名:0 性别:性别:1 年年 龄龄:2,王秃子王秃子.姓名姓名,王秃子王秃子.性别性别,王秃子王秃子.年龄年龄);王秃子王秃子.睡觉睡觉(16);王秃子王秃子.运动运动(棒球棒球);构造函数使用示例构造函数使用示例class 人 public string 姓名;public string 性别;public int 年龄;public 人(string name,string sex,int age)姓名=name;性别=sex;年龄=age;public void 睡觉(int time)Console.WriteLine(睡0个小
9、时,time);public void 运动(string type)Console.WriteLine(喜欢0,type);构造函数重载构造函数重载可以通过为几个构造方法提供不同的参可以通过为几个构造方法提供不同的参数表的办法来重载构造方法。当发出数表的办法来重载构造方法。当发出 new 对象名对象名(参数参数)命令时,传递到命令时,传递到new语句中的参数表将决定采用哪个构造方语句中的参数表将决定采用哪个构造方法。法。构造函数重载示例构造函数重载示例 class Employee private String name;private int salary;public Employee(
10、String n,int s)name=n;salary=s;Console.WriteLine(name=+n+,salary=+s);public Employee(String n)Console.WriteLine(name=+n+,salary Unknown);public Employee()Console.WriteLine(Unknown);构造函数重载示例构造函数重载示例 static void Main(string args)Employee E1=new Employee(Mickle,2);Employee E2=new Employee(Mary);Employe
11、e E3=new Employee();Console.WriteLine(E2=+E2);Console.WriteLine(E3=+E3);我们的拯救计划我们的拯救计划构造函数的定义示例:class 人人 public string 姓名姓名;public string 性别性别;public string 年龄年龄;public 食物食物 爱吃的食物爱吃的食物;public 人人(string 姓名姓名,string 性别性别,int 年龄年龄,食物食物 爱吃的食物爱吃的食物)this.姓名姓名=姓名姓名;this.性别性别 =性别性别;this.年龄年龄=年龄年龄;this.爱吃的食物爱吃的食物=爱吃的食物爱吃的食物;我们的拯救计划我们的拯救计划我们在建立人小强这个对象时,就可以使用构函数来指定他爱吃的食物了!人人 小强小强 =new 人人(“小强小强”,“男男”,20,new 食物食物 食物食物.红烧肉红烧肉,食物食物.生发药生发药);小强小强.吃饭吃饭(new 食物食物 食物食物.红烧肉红烧肉,食物食物.生发药生发药);小强小强 吃了吃了 红烧肉!红烧肉!小强小强 吃了吃了 生发药!生发药!拯救成功!拯救成功!