第4章 面向对象程序设计基础.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第4章 面向对象程序设计基础.doc》由会员分享,可在线阅读,更多相关《第4章 面向对象程序设计基础.doc(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章 面向对象程序设计基础4.1 面向对象概述面向对象的程序设计(OOP,Object-Oriented Programming)是一种基于结构分析的、以数据为中心的程序设计方法。它的主要思想是将数据及处理这些数据的操作都封装(Encapsulation)到一个称为类(Class)的数据结构中。使用这个类时,只需要定义一个类的变量即可,这个变量叫做对象(Object)。通过调用对象的数据成员完成对类的使用。4.1.1 类和对象概述见教材66-67页4.1.2 属性、方法、继承、重载见教材66-67页4.2 类和对象格式: 类修饰符 class 类名:基类 类的成员;4.2.1 类的声明类修饰
2、符含义none or internal类只能在当前工程中访问public类可以在任何地方访问abstract or internal abstract类只能在当前工程中访问,不能实例化,只能继承public abstract类可以在任何地方访问,不能实例化,只能继承sealed or internal sealed类只能在当前工程中访问,不能派生,只能实例化public sealed类可以在任何地方访问,不能派生,只能实例化4.2.2 对象的声明1.定义对象格式: 类名 对象名;2.创建类的实例: 对象名=new类名(参数列表);或只用一条命令: 类名 对象名=new类名(参数列表);例: c
3、lass Class Aclass ClassB void Fun() ClassA a=new ClassA();/创建类ClassA的一个实例a3对象的使用格式:对象名.成员函数名 或 对象名.数据4.2.3 类的成员C#类的成员主要有:成员变量、成员函数。类的每个成员都需要设定访问修饰符,默认类型为private修饰符。C#中一个类的成员可有以下访问修饰符:public(公有成员):允许类的内部或外界直接访问。private(私有成员):外界不能直接访问该成员变量或成员函数。对该成员变量或成员函数的访问只能由该类中其他函数访问,其派生类也不能访问。这即为“数据隐藏”。 一般,成员变量声明
4、为private,而成员函数声明为public,这样可使类中的数据更安全。protected(保护成员):对于外界该成员是隐藏的,但这个类的派生类可以访问。internal(内部成员):只有本编译单元内才能访问。例一:访问修饰符的作用class ClassApublic int a;private int b;protected int c;public void SetA()a=1; /正确,允许访问类自身公有成员b=2; /正确,允许访问类自身私有成员c=3; /正确,允许访问类自身保护成员;class ClassB:ClassA/ClassB是类ClassA的派生类public void
5、 SetB()ClassA BaseA=new ClassA(); /创建了ClassA的实例BaseABaseA.a=11;/正确,允许访问基类公有成员BaseA.b=22;/错误,不允许访问基类私有成员BaseA.c=33;/正确,允许访问基类保护成员;class ClassCpublic void SetB()ClassA BaseA=new ClassA();BaseA.a =111;/正确,允许访问类的其他公有成员BaseA.b =221;/错误,不允许访问类的其他私有成员BaseA.c =331;/错误,不允许访问类的其他保护成员C#中一个类的成员又可分为静态成员非静态成员静态成员
6、(声明成员的指令前加static保留字)、非静态成员(声明成员的指令前不加static保留字)区别:1.静态成员属于类所有、非静态成员属于对象所有;静态成员只能由类来访问,非静态成员只能由对象来访问,即当一个实例成员在形式E.M的成员访问中被引用时,对于非静态实例成员M,E必须表示一个实例(对象),对静态实例成员M,E必须表示一个类。2.每个对象都有自己的非静态方法,这些非静态方法是多个副本;对于静态成员,在内存中只有一个副本。(当使用一个数据副本就足够时,使用静态成员来节省空间。)3.非静态方法可以直接访问类中的任意成员;静态方法可以直接访问静态成员或通过类访问静态成员,但是不能直接访问非静
7、态成员,只能通过类的实例(对象)访问非静态成员。4.静态方法不对指定的实例进行操作,不能使用this关键字,它表达的是一类事物共同具有的方法,而不是类的实例所独有。静态方法主要应用于提供整个类实例共有的工具函数。5.静态方法中不能包含virtual, abstract, overide修饰符。例二:静态、非静态成员class myClasspublic int a;static public int b;void Fun1()/定义一个非静态成员函数,可以访问类中任意成员a=10;/正确,直接访问非静态成员b=20;/正确,直接访问静态成员static void Fun2()/定义一个静态成员
8、函数,只能访问静态成员a=10;/错误,不能访问非静态成员b=20;/正确,可以访问静态成员,相当于myClass.b=20class Teststatic void Main()myClass A=new myClass();/定义对象A,将其实例化A.a=10;/正确,访问类myClass的非静态公有成员变量aA.b=10;/错误,不能通过对象访问类中静态公有成员myClass.a=20;/错误,不能通过类访问类中非静态公有成员myClass.b=20;/正确,可以通过类访问myClass的静态公有成员变量b例三:对象的使用using System;class Penpublic stri
9、ng Color;/Color是公有成员,可直接访问private int Price;/*Price是私有成员,只能通过该类中的其他成员函数来访问*/public void SetPrice(int newPrice)Price=newPrice;public int GetPrice()return Price;public void SetColor(string newColor)Color=newColor;public string GetColor()return Color;class Testpublic static void Main()Pen myPen=new Pen
10、() ;/myPen是类Pen的实例化myPen.SetPrice(5);/通过调用SetPrice方法来使用私有成员变量myPen.Color=BLACK;Console.WriteLine(The price is 0,myPen.GetPrice();Console.WriteLine(The Color is 0,myPen.Color);return语句的格式:return 功能:在执行到return语句时,程序会立即返回调用代码,其返回值通常是函数的处理结果,其类型必须与函数的声明类型一致。例如:static double getVal()double checkVal;/给che
11、ckVal赋值if (checkVal=y)return x;elsereturn y;public static void WriteMin(int x, int y)int temp=x;if(xy)temp=y;Console.WriteLine(0和1中的最小值是:2.,x,y,temp); return;public static void Main()Console.WriteLine(6和8中的最大值是:0.,Max(6,8);/6,8 为实值参数,其类型、个数与形参对应。WriteMin(6,8);思考题:如果将Max和WriteMin两个方法改成非静态方法,会对原程序造成何影
12、响?为什么?应怎样解决?4.4.2方法的重载方法重载的格式是在一个类中两次或多次定义同名的方法(包括从类中继承而来的方法),这些方法的名称相同,但每个方法的参数类型或个数不同。例1: using System;class Penpublic string Color;private int Price;public Pen()/类Pen的构造函数 Color=BLACK;/给变量赋初值 Price=5;public Pen(string newColor,int newPrice)/类Pen的构造函数的重载函数Color=newColor;Price=newPrice;public void
13、SetPrice(int newPrice) /类Pen的成员函数SetPricePrice=newPrice;public void SetPrice()/类Pen的成员函数SetPrice的重载函数Price=5;public int GetPrice()return Price;public void SetColor(string newColor)Color=newColor;public string GetColor()return Color;class Testpublic static void Main()Pen myPen=new Pen() ;/调用第一个构造函数Pe
14、n hisPen=new Pen(GREEN,8);/构造函数的重载Console.WriteLine(The price is 0,myPen.GetPrice();/得到构造函数Pen()中的price值5Console.WriteLine(The Color is 0,myPen.Color);/直接访问公有成员变量Color,值为“BLACK”即构造函数Pen()中的初值Console.WriteLine(The price is 0,hisPen.GetPrice();/得到构造函数重载Pen(GREEN,8)的price值8Console.WriteLine(The Color i
15、s 0,hisPen.GetColor();/得到构造函数重载Pen(GREEN,8)的color值“GREEN ”hisPen.SetPrice();/调用SetPrice()重载函数,得到Price值5Console.WriteLine(The price is 0,hisPen.GetPrice();/输出price值5 例2:重载构造方法using System;namespace 重载构造方法class Fileclass CommaDelimitedFilepublic CommaDelimitedFile(string FileName)Console.WriteLine(Con
16、structed with a file name); public CommaDelimitedFile(File file)Console.WriteLine(Constructed with a file object);class Class1static void Main(string args)File file=new File();CommaDelimitedFile file2=new CommaDelimitedFile(file);CommaDelimitedFile file3=new CommaDelimitedFile(Some file name); 运行结果:
17、Constructed with a file objectConstructed with a file name练习题:重载构造方法练习using System;namespace 重载构造方法练习class FunApp2public int x=888,y=777,z=666;public FunApp2()x+;y+;z+;public FunApp2(int a,int b,int c)x=a;y=b;z=c;public class FunAppstatic void Main()FunApp2 obj1=new FunApp2();Console.WriteLine(obj1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 面向对象程序设计基础 面向 对象 程序设计 基础
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内