C程序设计简明教程第3篇在C中实现面向对象概念_第1页
C程序设计简明教程第3篇在C中实现面向对象概念_第2页
C程序设计简明教程第3篇在C中实现面向对象概念_第3页
C程序设计简明教程第3篇在C中实现面向对象概念_第4页
C程序设计简明教程第3篇在C中实现面向对象概念_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 面向对象程序设计一、对象和类    OOP(Object-Oriented Programming)是一种基于对编程元素的现实理解,允许程序员在编程时即定义数据元素,又定义可对这些数据元素进行的操作。· 对象:包含数据和操作的实体,如汽车、人等。 · 类:是 C# 中的一种结构,用于在程序中模拟现实生活的事物。 · 定义访问修饰符 class <类名>          / 类的主体     &#

2、160;  如:    class Employee          / 类的主体    · 成员变量 · 语法:访问修饰符 类型 成员变量; · 说明:访问修饰符主要有以下几钟:    public:可以被所有类访问    internal:可以被当前程序集访问    protected:可被所属类和子类访问 &#

3、160;  private:只能被所属类访问 · 类的默认访问修饰符为internal,而类成员为private。 · protected、public和internal修饰的成员变量采用帕斯卡命名法,私有成员采用骆驼命名法。 · 示例:分析员工类Employee中需要包含姓名、性别、职称、薪水等信息,因此可以定义一个如下所示的类:    class Employee           private string _nam

4、e;       private char _gender;       private string _qualification;       private uint _salary;      · 若要访问Employee类中的属性,则应先创建类的实例或对象。        Emp

5、loyee objEmployee = new Employee(); · 使用点号访问成员变量        objEmployee._name = “张三"        objEmployee._name = 'M' 二、构造函数和析构函数·     构造函数      类的一种特殊方法,每次创建类的实例都会调用它,

6、其功能是将成员变量的值初始化为某个默认值。      语法:          访问修饰符 类名(参数)                      / 构造函数的主体        

7、;        说明:        Ø 可以带参数Ø 无返回值Ø 若类中没有定义构造函数,则运行库将自动提供默认的无参的构造函数。示例1:无参的构造函数class Employeeprivate string _name;    private char _gender;    private string _qualification; &#

8、160;  private uint _salary;/ 默认构造函数    private Employee()           _qualification = “研究生"    static void Main(string args)         / 调用默认构造函数      &#

9、160; Employee objEmployee = new Employee();        Console.WriteLine(“资格= " + objEmployee._qualification);        Console.WriteLine(“薪水= " + objEmployee._salary);          

10、60; 示例2:带掺的构造函数class Employeeprivate string _name;    private char _gender;    private string _qualification;    private uint _salary;/ 默认构造函数    private Employee()           _qualification = “大学

11、毕业生"/ 参数化构造函数private Employee(string strQualification, string strName,char gender, uint empSalary)    _qualification =  strQualification;    _name = strName;                  

12、  _gender = gender;                    _salary = empSalary;                         &

13、#160;  public static void Main(string args)                                / 调用默认构造函数          

14、        Employee objGraduate = new Employee();                  / 调用参数化构造函数                  Em

15、ployee objMBA = new Employee(“ACCPS3“, ”张亮影“, 男', 5500);                  Console.WriteLine(“默认构造函数输出: n资格=“ + objGraduate._qualification);            

16、      Console.WriteLine(“n参数化构造函数输出: n资格= " +objMBA._qualification);              · 析构函数 是C#中的另一种特殊方法,用于执行清除操作。声明方法与构造函数类似,只是在名字前加沙锅内代子号()。    Ø 语法    类名() 

17、;          / 析构函数的主体        Ø 说明     一个类只能有一个析构函数     析构函数不能重载     不能显式或手动调用,只能由垃圾回收器自动调用。    Ø 示例:   

18、60;   Employee()       /实现析构函数三、方法    方法可执行对象的行为,类中的方法通常包括在调用类时要使用的操作语句。· 方法声明   语法:       访问修饰符 返回类型 方法名(参数列表)             &

19、#160;   /方法的主体        · 说明:    方法不返回值,则返回类型为void。若需要,则用return 表达式带回返回值。    参数列表可选。    访问修饰符默认为private。 · 示例    class Point        

20、   int x;       int y;       void Assign()                     System.Console.WriteLine(“输入点的值");     

21、60;        x = int.Parse(System.Console.ReadLine();              y = int.Parse(System.Console.ReadLine();           · 调用方法    格式:对

22、象名.方法(参数列表);    示例         class ComplexNumber                      private int _real;         

23、    private int _imaginary;                          private void Accept()                 

24、;              Console.WriteLine(“请输入实数部分");                  _real = int.Parse(Console.ReadLine();          &

25、#160;       Console.WriteLine(“请输入虚数部分");                  _imaginary = int.Parse(Console.ReadLine();               

26、0;            void ShowResult()                                    Console.WriteLine(

27、“相加之和为:");                      Console.WriteLine(_real + "+" + _imaginary + "i");               

28、60;             / 此方法用于将两个复数相加              ComplexNumber Add(ComplexNumber objParam1)               

29、;                     objParam1._real += _real ;                      objParam1._imaginary += _

30、imaginary;                      return objParam1;                          

31、 STAThread             public static void Main(string args)                            ComplexNumber objNumber

32、1 = new ComplexNumber();               ComplexNumber objNumber2 = new ComplexNumber();               objNumber1.Accept();      

33、60;        objNumber2.Accept();               ComplexNumber objTemp = objNumber1.Add(objNumber2);               objTemp.ShowR

34、esult();             四、方法重载    在实际生活中,有些职责或任务有共同的名称,例如,我们每个月都会有各种需要支付的费用,如电话费、手机费、电费、煤气费、水费等。虽然都叫付费,但其支付的过程可能不同,因此,在C#中,可以利用方法重载来实现付费这一任务。例如:   Class BillPayment         

35、        void PayBill(int telephoneNumber)                     /此方法用于支付固定电话话费              void PayBill(long consume

36、rNumber)                     /此方法用于支付电费              void PayBill(long consumerNumber, double amount)        &

37、#160;            /此方法用于支付移动电话话费                      注意,不能根据返回类型来重载方法。· 基于不同数量的参数的方法重载    int greatest(int num1, int num2) &#

38、160;        Console.WriteLine(“0 和 1 相比, 最大的是: ", num1, num2);          if(num1 > num2)                      

39、60;     return num1;                    else                           

40、; return num2;                    int greatest(int num1, int num2, int num3)               Console.WriteLine(“0, 1 和 2 相比, 最大的是: ", num1, num2, num3); 

41、;         if(num1 > num2 && num1 > num3)                           return num1;          &#

42、160;         else if(num2 > num1 && num2 > num3)                           return num2;        &

43、#160;           else                           return num3;               ·

44、 基于不同类型的参数的方法重载    int greatest(int numbers)             int temp = numbers0;         for(int i = 1;i < numbers.Length;i+)           

45、0;                if(temp < numbersi)                   temp = numbersi;           

46、;       return temp;        double greatest(double numbers)             double temp = numbers0;         for(int i = 1;i < numbers.Length;i+)&#

47、160;                    if(temp < numbersi)            temp = numbersi;              &#

48、160;   return temp;    五、属性    C#中通过属性特性来读取和写入字段,而不直接进行读取和写入,以此来提供对字段的进一步保护。用户可以象访问字段那样访问属性。因此,属性进一步对类的数据进行了封装。· 格式: 访问修饰符 数据类型 属性名       get ;      set ;   ·  例如:&#

49、160;   class Employee             private static string _name;         private static string _id;         public string Id  /属性名,公有的采用帕斯卡命名,私有的采用骆驼命名  

50、0;      /读取属性            get                                 return _id;

51、60;                         / 设置属性            set               &

52、#160;                 / 验证输入长度小于 2                     if (_id.Length > 2)       &

53、#160;             _id = value;                           · 属性类型         可读可写

54、0;        只读         访问修饰符 数据类型 属性名                         get ;         &

55、#160;        只写         访问修饰符 数据类型 属性名                    set ;          · 静态属性访问修饰符s

56、tatic 数据类型 属性名get;set; 该属性属于整个类,而不是类的实例。 · 综合示例         class SavingsAccount         / 类字段用于存储帐号、余额和已获利息         private int _accountNumber;     

57、    private double _balance;         private double _interestEarned;         / 利率是静态的,因为所有帐户获得的利息相同         private static double _interestRate;   

58、60;     / 构造函数初始化类成员         public SavingsAccount(int accountNumber, double balance)                          

59、0; this._accountNumber = accountNumber;                   this._balance       = balance;                &

60、#160; / 只读 AccountNumber 属性         public int AccountNumber                            get      

61、60;                                        return _accountNumber;       

62、60;                              / 只读Balance属性         public double Balance      

63、60;      get                                if (_balance < 0)          &

64、#160;        Console.WriteLine("没有可用余额");                   return _balance;               

65、0;               /读写InterestEarned属性         public double InterestEarned         get            

66、60;               return _interestEarned;                  set               

67、60;            / 验证数据                   if (value < 0.0)                

68、                            Console.WriteLine(“利息不能为负数");                   

69、;      return;                                      _interestEarned = value;   &

70、#160;                       /静态属性InterestRate         public static double InterestRate             

71、          get                                 return _interestRate;        

72、                     set                                 / 验

73、证数据                   if (value < 0.0)                             

74、                  Console.WriteLine(“利率不能为负数");                           

75、return;                                      else            

76、;                                   _interestRate = value / 100;            

77、;                                     static void Main(string args)          

78、60;             / 创建 SavingsAccount 的对象                     SavingsAccount objSavingsAccount =  new SavingsAccount(12345, 5000);   

79、;                  Console.WriteLine(“输入到现在为止已获得的利息和利率");                     objSavingsAccount.InterestEarned = In

80、t64.Parse(Console.ReadLine();                     SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine();               

81、0;     objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate;                     Console.WriteLine("获得的总利息为: 0",     

82、;        objSavingsAccount.InterestEarned);                          六、索引器    请看一个例子,一家公司某个部门人数很多,假设部门经理需要一份员工记录,或许是用于更新资料,或许只是了解一

83、个信息,不定义传统的方法来设置职员记录或其他方法来获取职员记录,而是在类中定义一个索引器,是很有道理的,索引器可以为员工的编号。索引器是一种特殊的方法,索引器允许使用方括号进行访问,而不是常规的get和set方法调用。使用索引器,使客户端代码更简洁。· 语法    访问修饰符 数据类型 this数据类型 标识符         get;          set;    

84、60;  · 说明    索引器一般用于类的数组元素    允许按数组方式来检索对象的数组元素。·  示例    class Photo         string _title;         public Photo(string title)   &

85、#160;                        this._title = title;                  public string Title    

86、                        get                            

87、                   return _title;                               &

88、#160;          class Album                          / 该数组用于存放照片             

89、;      Photo photos;                   public Album(int capacity)                     

90、;                          photos = new Photocapacity;                     

91、                 public Photo thisint index                              &#

92、160;            get                                         

93、          / 验证索引范围                           if (index < 0 | index >= photos.Length)      

94、;                                                 Console.WriteLine(&q

95、uot;索引无效");                            / 使用 null 指示失败                  

96、;          return null;                                         &

97、#160;             / 对于有效索引,返回请求的照片                            return photosindex;    

98、                                    set                 

99、;                            if (index < 0 | index >= photos.Length)                 

100、0;                                   Console.WriteLine("索引无效");          &#

101、160;                 return;                                 

102、0;       photosindex = value;                       public Photo thisstring title              get  

103、                       / 遍历数组中的所有照片                   foreach (Photo p in photos)    

104、                                    / 将照片中的标题与索引器参数进行比较            

105、60;        if (p.Title = title)                     return p;                 &#

106、160;                    Console.WriteLine("未找到");                   / 使用 null 指示失败    

107、0;              return null;                       class TestIndexer       static void Main(string args) 

108、        / 创建一个容量为 3 的相册         Album friends = new Album(3);         / 创建 3 张照片         Photo first = new Photo("Jenn");  &#

109、160;      Photo second = new Photo("Smith");         Photo third = new Photo("Mark");         / 向相册加载照片         friends0 = first;         friends1 = second;         friends2 = third;         / 按索引检索

温馨提示

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

评论

0/150

提交评论