实验名称:类与对象一.实验目的:(1)理解C#语言是如何体现面向对象编程基本思想;(2)掌握类对象的定义;(3)了解类的封装方法,以及如何创建类和对象;(4)了解成员变量和成员方法的特性;(5)掌握静态成员的用法;(6)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。
能够根据给定的要求定义类并实现类的成员函数;(7)掌握参数传递的用法;(8)掌握属性的作用和使用。
二.上机内容:1)创建MyDataTime类,熟悉构造函数、析构函数的定义方法、属性的定义方法以及一般方法的定义过程。
(2)创建Fraction类,掌握运算符重载、静态方法的使用及其与实例方法的区别。
(3)创建Swap类,掌握C#方法中参数的传递。
(4)整理上机步骤,总结经验和体会。
(4)完成实验报告。
四.上机步骤:类的创建与应用:创建一个MyDataTime类,要求如下:(1)私有字段:year,month,day;(2)属性:Year,Month,Day。
注意在定义Month和Day的settor时要检验设置值的有效性,其中,,同时在对Day进行设置的时候要注意闰年和平年的2月的天数。
(3)方法:构造函数:根据需求确定不同参数列表的构造方法。
析构函数:提示析构对象。
PrintMyDataTime:以“2011/4/24”、“2011年4月24日”、“2011.4.24”、“二〇一一年四月二十四日”的形式输出Year,Month和Day。
using System;using ;namespace ConsoleApplication1{class MyDataTime{private int year;public int Year{set { year = value; }get { return year; }}private int month;public int Month{set{if (value >= 1 && value <= 12){month = value;}else{("month的赋值范围为[1,12];您输入的值不正确"); }}get { return month; }}public int day;public int Day{set{if (month == 2 ){if(year%400==0||(year%100!=0&&year%4==0)){if(value>=1&&value<=29){day=value;}else{if(value>=1&&value<=28){day=value;}}}}else if (month == 1 || month == 3 || month == 5 || month == 7 ||month == 8 || month == 10 || month == 12){ if (value >= 1 && value <= 31){ day = value; }}else{if(value>=1&&value<=30){day=value;}}}get { return day; }}public MyDataTime(int x, int y, int z){ Year=x;Month=y;Day=z;}public void show1(){("您输入的时间是:{0}/{1}/{2}", year, month, day);}public void show2(){("您输入的时间是:{0}年{1}月{2}日", year, month, day); }public void show3(){("您输入的时间是:{0}.{1}.{2}", year, month, day);}}class Program{static void Main(string[] args){("请输入年:");int a = ());("请输入月:");int b = ());("请输入日:");int c = ());MyDataTime k = new MyDataTime(a,b,c);();();();();}}}通过类程序说明静态变量/方法与实例变量/方法的区别:创建一个分数类(Fraction),要求如下:私有字段:FenZi,FenMu构造函数:Fraction(int FenZi, int FenMu),注意要校验分母,不能为0;方法:重载运算符和-(负号),完成分数的加减乘除以及求相反数运算。
注意四种运算均为静态方法。
DaoShu:求分数的倒数。
GongYueShu,GongBeiShu:分别用于求两个整数的公约数和公倍数,可以用于上述分数运算结果的化简;Display:用于在屏幕上输出分数,形式为:。
ToDouble:用于将分数转换为一个小数。
注意:运算符重载、公约数、公倍数、倒数为静态方法,其余为实例方法。
在验证程序中要用到两类方法,并体会两类方法的区别。
using System;using ;using ;namespace ConsoleApplication29{class Fraction{private int FenZi;public int X{set { FenZi = value; }get { return FenZi; }}private int FenMu;public int Y{set{if (value == 0){ ("分母不能为0!");}else{FenMu = value; }}get { return FenMu; }}public Fraction(int FenZi,int FenMu){= FenZi;= FenMu;}public void display(){("得到分数:{0}/{1}",FenZi,FenMu);}public double ToDouble(){double g=(FenZi/FenMu);return g;}public static int gongyueshu( int a1, int b1){int t = 1;do{if(b1!=0){t = a1 % b1;a1 = b1;b1 = t;}else {break;}} while (t != 0);t = a1;return t;}public static int gongbeishu( int a2, int b2){int h = a2 * b2;int s=gongyueshu( a2, b2);h = h / s;return h;}public static void daoshu( int a3, int b3){int t=gongyueshu( a3, b3);a3=a3/t;b3=b3/t;("{0}/{1}",a3,b3);}public static Fraction operator *(Fraction f1, Fraction f2) {Fraction f = new Fraction(0, 0);= * ;= * ;int x1 = gongyueshu( , ;= / x1;= / x1;return f;}public static Fraction operator /(Fraction f1, Fraction f2) {Fraction f = new Fraction(0, 0);= * ;= * ;int x1 = gongyueshu( , ;= / x1;= / x1;return f;}public static Fraction operator +(Fraction f1, Fraction f2) {Fraction f = new Fraction(0, 0);= *+* ;= * ;int x1=gongyueshu( , ;= / x1;= / x1;return f;}public static Fraction operator -(Fraction f1, Fraction f2) {Fraction f = new Fraction(0, 0);= * - * ;= * ;int x1 = gongyueshu( , ;= / x1;= / x1;return f;}}class Program{static void Main(string[] args){ ("请输入第一个分数:");("请输入分子:");int aa = ());("请输入分母:");int ba = ());if (ba == 0){("分母不能为0!请重新输入一个不为0的数:");ba = ());}("请输入第二个分数:");("请输入分子:");int ab = ());("请输入分母:");int bb = ());if (bb == 0){("分母不能为0!请重新输入一个不为0的数:");bb = ());}Fraction f1 = new Fraction(aa, ba);Fraction f2 = new Fraction(ab, bb);Fraction fa = f1 + f2;Fraction fb = f1 - f2;Fraction fc = f1 * f2;Fraction fd = f1 / f2;();();();();();}}}方法中参数的传递:创建一个Swap类,分别定一个采用值参数、引用型参数、输出型参数、数组型参数的方法,完成两个整型数据和整型数组的排序和输出。
using System;using ;using ;namespace ConsoleApplication30{class Swap{public static void zhican(int a1, int a2){int t = 0;if (a1 > a2){("{0}>{1}", a1, a2);}else{t = a1; a1 = a2; a2 = t;("{0}>{1}", a1, a2);}}public static void xingcan(ref int a3, ref int a4) {int t;if (a3<a4){t = a4;a4 = a3;a3 = t;("{0}>{1}", a3, a4);}else{ ("{0}>{1}", a3, a4); }}public static void UseOut(out int a5,out int a6){int t;a5=98;a6 = 565;if(a5<a6){t = a5;a5 = a6;a6 = t;("{0}>{1}", a5, a6);}else{ ("{0}>{1}", a5, a6); }}public static void ShuZu(params int[] k)for (int i = 0; i < ; i++){for (int j = i+1; j < ; j++){int t = 0;if (k[i] > k[j]){t = k[i]; k[i] = k[j]; k[j] = t; }}}("最后数组的顺序:");for (int i = 0; i < ; i++){("{0} ", k[i]);}}}class Program{static void Main(string[] args){("***值参数***");("请输入两个数:");int b1 = ());int b2 = ());(b1, b2);("b1={0},b2={1}", b1, b2);("***引用型参数***");("请输入两个数:");int b3 = ());int b4 = ());(ref b3,ref b4);("b3={0},b4={1}", b3, b4);("***输出参数***");int b5, b6;(out b5 ,out b6);("b5={0},b6={1}", b5, b6);("***数组型参数***");(23, 65, 9, 8, 78, 98, 4);();} }。