《面向对象程序设计》PPT课件.ppt_第1页
《面向对象程序设计》PPT课件.ppt_第2页
《面向对象程序设计》PPT课件.ppt_第3页
《面向对象程序设计》PPT课件.ppt_第4页
《面向对象程序设计》PPT课件.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

C#程序设计与开发,第4章 面向对象程序设计,类和对象,类(Class)实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。 类定义的一般形式如下: 类修饰符class Name public: 类的公有接口 private: 私有的方法成员 私有的数据成员定义 ;,案例,【例4-1】person类的示例代码。 public class person private string name;/姓名 private string sex; /性别 private int age; /年龄 public void eat(string food) /我会吃food public void talk() /我会说话 public void sleep() /我会睡觉 ,对象,对象(object)是一件事、一个实体、一个名词,可以获得的东西,可以想象有自己的标识的任何东西。对象是类的实例化。一些对象是活的,一些对象不是。比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。 概括来说就是:万物皆对象。,案例,【例4-2】person类的实例化,使用对象。 using System; namespace x4.2 class Program static void Main(string args) person person1 = new person(); person1.set(“张小云“, “男“, 20); person1.show(); person1.eat(“苹果“); person1.talk(); person1.sleep(); Console.ReadLine(); ,案例,public class person private string name; private string sex; private int age; public void set(string namein, string sexin, int agein) /设置某个人的姓名,性别,年龄 name = namein; sex = sexin; age = agein; ,案例,public void show() Console.WriteLine(“我的姓名:0,我的性别:1,我的年龄:2“, name, sex, age); public void eat(string food) /我会吃food Console.WriteLine(“我会吃0“,food); public void talk() /我会说话 Console.WriteLine(“我会说话“); public void sleep() /我会睡觉 Console.WriteLine(“我会睡觉“); ,构造函数与析构函数,对象的初始化工作通常由类的构造函数来完成。可以把构造函数理解为一种特殊的方法成员,它在每次创建对象时被自动调用。 构造函数有如下几个特性: 构造函数的名称与类名相同; 构造函数不声明返回类型; 构造函数通常是公有的(使用public访问限制修饰符声明),如果声明为保护的(protected)或私有的(private),则该构造函数不能用于类的实例化; 构造函数的代码中通常只进行对象初始化工作,而不应执行其他操作; 构造函数在创建对象时被自动调用,不能像其他方法那样显式地调用构造函数。,案例,【例4-3】下面的程序使用构造函数对类student的3个字段进行了初始化: using System; namespace pan class Program static void Main(string args) student st = new student(); Console.WriteLine(); public class student public string name; public int age; public bool gender; public student () name=“pan“; age=0; gender=false; ,案例,【例4-4】多个构造函数实例 public class student public string name; public int age; public bool gender; public student () name=“pan“; age=0; gender=false; public student(string namein) name = namein; age = 0; gender = false; ,析构函数,对象使用完毕之后,在释放对象时就会自动调用类的析构函数。 析构函数有如下几个特性: 析构函数的名称与类名相同,但在名称前面加了一个符号“”; 析构函数不接受任何参数,也不返回任何值; 析构函数不能使用任何访问限制修饰符; 析构函数的代码中通常只进行销毁对象的工作,而不应执行其他的操作; 析构函数不能被继承,也不能被显式地调用。,案例,【例4-5】下面的代码中定义了一个没有任何执行代码的析构函数: public class student public string name; public int age; public bool gender; public student() name = “pan“; age = 0; gender = false; public student() ,public、private、protected修饰符,案例,【例4-6】访问控制符例子 using System; namespace x4_4 class Program static void Main(string args) person person1 = new person(); / = “张小云“;出现错误,private成员在类外不能访问 /person1.sex = “男“;错误,protected成员在类外不能访问,在继承类中可以访问 person1.age = 20;/public成员,在类外可以访问 person1.set(“张小云“, “男“); person1.show(); /person1.eat(“苹果“);出现错误,private成员在类外不能访问 /person1.talk();错误,protected成员在类外不能访问,在继承类中可以访问 person1.sleep(); Console.ReadLine(); ,案例,public class person string name;/默认为private成员 protected string sex; public int age; public void set(string namein, string sexin) name = namein; sex = sexin; public void show() Console.WriteLine(“我的姓名:0,我的性别:1,我的年龄:2“, name, sex, age); void eat(string food)/默认为private成员 /我会吃food Console.WriteLine(“我会吃0“, food); ,案例,protected void talk() /我会说话 Console.WriteLine(“我会说话“); public void sleep() /我会睡觉 Console.WriteLine(“我会睡觉“); ,学习任务,学习任务4.1学生类设计,方法,方法是类成员,为类或类的对象提供某个方面的行为,用来描述能够“做什么”。定义方法的一般格式为: 修饰符 返回类型 方法名(形式参数表)。 /方法体 ,方法的调用,1.静态方法的调用 若要调用的方法是静态方法,则用类名“点”出方法,格式为 类名.方法名(实际参数表),案例,【例4-7】例如,求两个整数之和。 using System; namespace a class Program static void Main(string args) int x; int y; int sum; Console.WriteLine(“请输入两个整数,按回车确定“); x =Convert.ToInt32 ( Console.ReadLine (); y = Convert.ToInt32(Console.ReadLine(); sum = Sum.add(x, y); Console.WriteLine(“0+1=2“,x,y,sum); Console.ReadLine(); public class Sum public static int add(int a, int b) return a + b; ,案例,【例4-8】例如 求两个整数之和。 using System; namespace b class Program static void Main(string args) int x; int y; int sum; Console.WriteLine(“请输入两个整数,按回车确定“); x = Convert.ToInt32(Console.ReadLine(); y = Convert.ToInt32(Console.ReadLine(); sum = add(x, y); Console.WriteLine(“0+1=2“, x, y, sum); Console.ReadLine(); public static int add(int a, int b) return a + b; ,实例方法的调用,2.实例方法的调用 实例方法也称为一般方法或非静态方法。静态方法调用实例方法先要定义一个方法所在类的对象,并实例化;再通过对象点(引)出方法,格式为 对象名.方法名(实际参数表),案例,【例4-9】例如,通过实例对象调用方法。 using System; namespace c class Program static void Main(string args) int x; int y; int sum; Console.WriteLine(“请输入两个整数,按回车确定“); x = Convert.ToInt32(Console.ReadLine(); y = Convert.ToInt32(Console.ReadLine(); Sum mysum = new Sum(); sum = mysum.add(x, y); Console.WriteLine(“0+1=2“, x, y, sum); Console.ReadLine(); public class Sum public int add(int a, int b) return a + b; ,方法的重载,方法重载是面向对象程序设计的特征,是编译多态性的表现形式,是一种简单的多态性 方法重载能使程序的设计更简捷,程序的可读性更强。具体表现在方法重载可以使多个具有相同功能但参数不同的方法共享一个方法名。重载后的方法被调用时,可根据方法的参数的个数或参数的类型的不同来区分应该调用哪一个方法。,案例,【例4-10】相减运算方法重载。 using System; namespace x4._._ class Program static void Main(string args) int x1, y1; int sub1; double x2, y2; double sub2; double x3; int y3; double sub3; student st = new student(); st.Name = “张三“; Console.WriteLine(“我叫0,我是个学生,我会减法运算,请给我两个整数:“,st.Name);,案例,x1 = Convert.ToInt32(Console.ReadLine(); y1 = Convert.ToInt32(Console.ReadLine(); sub1 = st.sub(x1, y1);/调用第一个sub方法 Console.WriteLine(“0-1=2“,x1,y1,sub1); Console.WriteLine(“请给我两个实数“); x2 = Convert.ToDouble(Console.ReadLine(); y2 = Convert.ToDouble(Console.ReadLine(); sub2 = st.sub(x2, y2);/调用第二个sub方法 Console.WriteLine(“0-1=2“, x2, y2, sub2); Console.WriteLine(“请给我一个实数和一个整数“); x3 = Convert.ToDouble(Console.ReadLine(); y3 = Convert.ToInt32(Console.ReadLine(); sub3 = st.sub(x3, y3);/调用第三个sub方法 Console.WriteLine(“0-1=2“, x3, y3, sub3); Console.ReadLine(); ,案例,public class student private string name; public string Name get return name; set name = value; public int sub(int x, int y) return x - y; public double sub(double x, double y) return x - y; public double sub(double x, int y) return x - y; ,属性,属性是对字段的扩展,它通过属性访问函数来控制对字段的访问。属性访问函数包括get访问函数和set访问函数,分别用于对字段的读取和修改。,【例4-11】例如在student类中可以使用Name属性来封装对私有字段name的访问: using System; namespace lou class Program static void Main(string args) student st=new student (); st.Name=“lou“; Console.WriteLine (st.Name ); public class student private string name; public string Name get return name; set name=value; ,【例4-12】看下面的程序: namespace lou class Program static void Main(string args) Console.WriteLine(“请输入姓名:“); student st = new student(Console.ReadLine(); Console.WriteLine(“请输入出生日期(yyyy-mm-dd):“); st.Birthday = DateTime.Parse(Console.ReadLine(); Console.WriteLine(“您的年龄为:0“, st.Age); ,public class student private string name; private DateTime birthday; public student() public student(string namein) name = namein; ,public string Name get return name; set name=value; public string Birthday get return birthday; set birthday=value; public string Age get return DateTime.Now.Year - birthday.Year; ,学习任务,学习任务4.2教师类设计,继承,继承指一个新定义的类通过另一个类得到,在拥有了另一个类的所有特征的基础上,加入新类特有的特征的一种定义类的方式。,【例4-13】继承反例 /程序清单person.cs using System; using System.Collections.Generic; using System.Text; namespace _4._7._1 public class person private string name; private string sex; private string province; private string city; public person(string namein,string sexin,string provincein,string cityin) name = namein; sex = sexin; province = provincein; city = cityin; public void show() Console.WriteLine(“来自01的某23“,province,city,sex,name); ,/程序清单teacher.cs using System; using System.Collections.Generic; using System.Text; namespace _4._7._1 public class teacher private string name; private string sex; private string province; private string city; private string teach; public teacher(string namein, string sexin, string provincein, string cityin,string teachin) name = namein; sex = sexin; province = provincein; city = cityin; teach = teachin; public void show() Console.WriteLine(“来自01的某23,教4“, province, city, sex, name,teach); ,/程序清单Program.cs using System; using System.Collections.Generic; using System.Text; namespace _4._7._1 class Program static void Main(string args) person p1 = new person(“张三“, “男“, “浙江“, “宁波“); p1.show(); teacher t1 = new teacher(“张帅“, “男“, “浙江“, “宁波“,“计算机“); t1.show(); Console.ReadLine(); ,类继承的实现,类的继承定义格式: class:, C#用“:”引导继承列表; C#只支持类的单继承; C#对接口允许多继承; 如果有继承的类,基类须写在最前面。,【例4-14】person.cs和teacher.cs文件中的person类和teacher类可以作如下修改。 /程序清单person.cs using System; using System.Collections.Generic; using System.Text; namespace _4._7._1 public class person protected string name; protected string sex; protected string province; protected string city; public person() public person(string namein, string sexin, string provincein, string cityin) name = namein; sex = sexin; province = provincein; city = cityin; public void show() Console.WriteLine(“来自01的某23“, province, city, sex, name); ,/程序清单teacher.cs using System; using System.Collections.Generic; using System.Text; namespace _4._7._1 public class teacher:person private string teach; public teacher(string namein, string sexin, string provincein, string ci

温馨提示

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

评论

0/150

提交评论