实验指导书-1-实验二、面向对象程序设计2.1面向对象程序设计一、实验目的1.理解C#语言是如何体现面向对象编程基本思想。2.掌握类对象的定义。3.了解类的封装方法,以及如何创建类和对象。4.了解成员变量和成员方法的特性。5.掌握静态成员的用法。二、实验要求1.分析程序,上机验证结果。2.写出程序,并调试程序,要给出测试数据和实验结果。3.整理上机步骤,总结经验和体会。4.完成实验日志和上交程序。三、实验内容题目一:程序分析(1)分析下面两个程序,确定那个程序好,说明理由。程序要求:定义一个圆类,计算圆的面积和周长。程序1:publicclasscircle{publicstaticvoidMain(){doubleradium,delimeter,square;constdoublepai=3.1415926;radium=Convert.ToInt32(Console.ReadLine());delimeter=2*pai*radium;square=pai*pai*radium;Console.WriteLine(delimeter={0},square={1},delimeter,square);Console.ReadLine();}}程序2:publicclasscircle{doubledelimeter,square;constdoublepai=3.1415926;publicvoidcalculate(doublerad){delimeter=2*pai*rad;square=pai*pai*rad;Console.WriteLine(delimeter={0},square={1},delimeter,square);}实验指导书-2-publicstaticvoidMain(){doubleradium;circlecir=newcircle();radium=Convert.ToInt32(Console.ReadLine());cir.calculate(radium);Console.ReadLine();}}第二个程序号,因为将相关的操作进行了提取,采用函数的方式,将相关的事物包装成一个处理过程,方便代码的重用。(2)分析程序,写出程序的运行结果,并上机进行验证。UsingSystem;publicclassstudents{stringid,name;intage;publicstudents(stringid,stringname,intage){this.id=id;this.name=name;this.age=age;}publicvoidDisplay(){Console.WriteLine(id={0},name={1},age={2},id,name,age);}publicstaticvoidMain(){//stringid,name;//intage;studentsstu=newstudents(0001,zhangsan,16);stu.Display();Console.ReadLine();}}(3)分析程序,写出程序的运行结果,并上机进行验证。publicclassDate{privateintYear,Month,Day;publicDate(intYear,intMonth,intDay){this.Year=Year;实验指导书-3-this.Month=Month;this.Day=Day;}publicDate(System.DateTimedt){Year=dt.Year;Month=dt.Month;Day=dt.Day;}publicvoidDisplayDate(){Console.WriteLine({0}年{1}月{2}日,Year,Month,Day);}}publicclassTester{publicstaticvoidMain(){System.DateTimecurrentTime=System.DateTime.Now;Datedt=newDate(2008,7,18);dt.DisplayDate();Datedt2=newDate(currentTime);dt2.DisplayDate();Console.ReadLine();}}题目二:程序编写(1)实现一个包含类属性方法的简单加法程序,并能显示结果。classAdd{inta;intb;intresult;publicAdd(inta,intb){this.a=a;this.b=b;}publicintadd(){returnthis.result=this.a+this.b;}}publicclassMains{publicstaticvoidMain(){Addtest=newAdd(233,467);Console.WriteLine(test.add());Console.Read();实验指导书-4-}}}(2)实现一个Person类,要求:属性包含姓名、年龄、身份证号、工作、工资等,并显示各属性的值。实验指导书-5-namespaceConsoleApplication2{classPerson{privatestringname;publicstringName{get{returnthis.name;}set{this.name=value;}}privateintage;publicintAge{get{returnthis.age;}set{this.age=value;}}privatestringpid;publicstringPid{get{returnthis.pid;}set{this.pid=value;}}privatestringposition;publicstringPosition{get{returnthis.position;}set{this.position=value;}}privatestringwage;publicstringWage{get{returnthis.wage;}set{this.wage=value;}}publicPerson(){}publicvoidshowInformation(){Console.WriteLine(name:+name+\n+age:+age+\n+pid:+pid+\n+Position:+position+\n+wage:$+wage);}}publicclassMains{publicstaticvoidMain(){Personqihuan=newPerson();qihuan.Name=齐欢;qihuan.Age=22;qihuan.Pid=0905010109;qihuan.Position=CEO;qihuan.Wage=1000000;qihuan.showInformation();Console.Read();}}}2.2C#面向对象程序设计(二)一、实验目的1.掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数。2.理解类的成员的访问控制的含义,公有、私有和保护成员的区别。3.掌握参数传递的用法。4.掌握属性的作用和使用。二、实验要求1.分析程序,上机验证结果。2.写出程序,并调试程序,要给出测试数据和实验结果。3.整理上机步骤,总结经验和体会。4.完成实验日志和上交程序。三、实验内容题目一:程序分析(1)分析程序,写出程序的运行结果,并上机进行验证,然后回答后面问题。实验指导书-6-publicclassBankAccount{staticinttotalAccountNumber=0;stringBankAccountId;doubleinitialDepositAmount=0.00;publicBankAccount(stringmyId){this.BankAccountId=myId;this.initialDepositAmount=0.00;totalAccountNumber++;}publicvoiddisplayid(){Console.WriteLine(mbaid={0},initialDepositAmount={1},this.BankAccountId,this.initialDepositAmount);}publicstaticvoiddisplay(){Console.WriteLine(totalAccountNumber={0},totalAccountNumber);}}publicclassTester{publicstaticvoidMain(){BankAccountmba=newBankAccount(37000001);BankAccountmba2=newBankAccount(3700002);BankAccountmba3=newBankAccount();BankAccountmba4=newBankAccount(3700004);//Console.WriteLine(mba2ID={0},mba2.BankAccountId);mba2.displayid();BankAccount.display();Console.ReadLine();}}请回答问题:(1)按你自己的算法修改以上程序,比如可只输出生成的账户数。(2)把注释去掉后会怎样,为什么?输出ID(3)为什么display用类名直接引用,可以用对象来引用么?尝试输出结果。不能输出(4)类的静态变量和非静态变量的引用区别。判断一下语句的正确性:静态方法只能使用静态变量,不能使用实例变量。因为对象实例化之前,实例变量不可用。这个观点正确吗?(√)类的静态变量只有一个版本,所有实例对象引用的都是同一个版本。(√)对象实例化后,每个实例变量都被制作了一个副本,它们之间互不影响。(√)题目二:程序编写1.编写一个传值调用的程序。程序功能要求:程序首先给整型变量x和y赋初值3,5,然后使用传值调用方式调用方法对x和y做乘方并及输出x和y的乘方值,最后输出x和y得值。再将此方法给为对象调用加ref修饰查看输出结果差异。实验指导书-7-usingSystem;namespaceTest{classPower{voidDisplayPower1(doublex,doubley){x=Math.Pow(x,2);y=Math.Pow(y,2);Console.WriteLine(x的值为:{0},y的值为:{1},x,y);}voidDisplayPower2(refdoublex,refdoubley){x=Math.Pow(x,2);y=Math.Pow(y,2);Console.WriteLine(x的值为:{0},y的值为:{1},x,y);}staticvoidMain(string[]args){doublea=3,b=5;PowerA=newPower();A.DisplayPower1(a,b);Console.WriteLine(传值调用后a的值为:{0},b的值为:{1},a,b);A.DisplayPower2(refa,refb);Console.WriteLine(引用调用后a的值为:{0},b的值为:{1},a,b);Console.ReadLine();}}}【思考题】1.方法的参数传递有哪些方式?区别时什么?值传递,引用传递,前者是新生成一个局部变量进行数据的处理,并不会影响原始的传入参数,后者类似C中的指针,会影响原来的值。2.什么是构造方法。构造方法是一个类实例化后第一个执行的方法。它主要用于成员变量的初始赋值。2.3类的继承一、实验目的1.掌握继承的工作机制和意义。2.掌握派生类的定义方法和实现。3.掌握base关键字的使用。4.编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序。二、实验要求1.