作者: 阅读次数: 588 发布时间: 2010-04-13 10:08:40
点击下载浏览该文件2010413101020203
实验三类与对象编程练习
【实验目的】
1. 理解C#语言是如何体现面向对象编程基本思想;
2. 掌握类对象的定义;
3. 了解类的封装方法,以及如何创建类和对象;
4. 了解成员变量和成员方法的特性;
5. 掌握静态成员的用法;
6. 掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;
7. 理解类的成员的访问控制的含义,公有、私有和保护成员的区别;
8. 掌握参数传递的用法;
9. 掌握属性的作用和使用。
【实验要求】
1. 编写一个包含类和类方法的程序;
2. 编写一个创建对象和使用对象的方法程序;
3. 编写不同成员变量、方法修饰方法的程序;。
4. 编写含有构造方法的类的程序;
5. 编写重载构造方法的程序;
6. 编写类含有静态变量的程序;
7. 编写通过ref、out修饰符传递参数的类程序;
8. 编写含有属性的类程序。
【实验内容】
一、定义一个圆类,计算圆的面积和周长
或者:
请比较以上两个程序,看起来后一个程序把问题复杂化了,是不是不如第一个程序好,它从设计思想上有什么优势么?
二、实现一个学生类
程序要求如下:
其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。要求:使用成员函数实现对数据的输出;使用构造函数实现对数据的输入。
参考代码如下:
以上程序使用了构造方法,请回答关键字this有何作用,你能将成员函数Display修改成别的代码也实现响应的功能么?
三、实现一个日期类型
程序要求如下:
定义日期类型Date。要求有以下面成员:年、月、日变量,重载的构造方法,一个实现年、月、日单独的输入,一个实现从系统时间里读出年月日,并实现打印方法成员,该方法要按照“XXXX年XX月XX日”格式输出日期。
参考代码如下:
请练习System.Datetime类型及其各属性的应用。列出System.Datetime主要包含哪些属性,并思考重载构造方法的作用。
四、实现一个包含类属性方法的简单加法程序
程序要求如下:
建立一个类,使其可以进行简单的加法运算。该程序要包含类、属性、方法等面向对象的基本元素。
作以下修改分析程序输出的原因:
将"xVal={0},yVal={1},zVal={2},sVal={3}"
改成"xVal={0},yVal={1},zVal={0},sVal={1}"查看区别,写出原因;
了解Math类下主要的静态数学方法,掌握求幂,求平方和对数等静态方法的使用规则。
五、通过类程序说明静态变量/方法与实例变量/方法的区别
static声明的成员变量/方法被视为类的成员变量/方法,而不把它当作实例对象的成员变量/方法。换句话说,静态变量/方法是类固有的,可以直接引用,其它成员变量/方法仅仅被声明,生成实例对象后才存在,才可以被引用。基于这样的事实,也把静态变量/方法称为类变量/方法,非静态变量称为实例变量/方法。
1.程序功能要求
编写帐户类,对每一账号赋值帐户并设置初始化存款为0.00元,设计一变量统计账号生成的数目。
请回答问题:
(1)按你自己的算法修改以上程序,比如可只输出生成的账户数。
(2)把注释去掉后会怎样,为什么?
(3)为什么display用类名直接引用,可以用对象来引用么?尝试输出结果。
(4)类的静态变量和非静态变量的引用区别。判断一下语句的正确性:
静态方法只能使用静态变量,不能使用实例变量。因为对象实例化之前,实例变量不可用。这个观点真确么?()
类的静态变量只有一个版本,所有实例对象引用的都是同一个版本。()
对象实例化后,每个实例变量都被制作了一个副本,它们之间互不影响。()
六、方法中参数传递的练习
在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在C#中,方法中的参数传递可以分为传值调用或对象方法调用等方式。传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。所以,如果不想改变参数的值,可以采用传值调用的方法。如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。
1.编写一个传值调用的程序
程序功能要求:程序首先给整型变量x和y赋初值3,5,然后使用传值调用方式调用方法对x和y做乘方并及输出x和y的乘方值,最后输出x和y得值。再将此方法给为对象调用加ref修饰查看输出结果差异。参考代码如下:
思考:(1)将响应的注释修改再调试查看结果,分析原因。
(2)将Main中x和y赋初值去掉,结果会怎样?如果Main中加ref,类Power的方法中参数前不加ref又会有何变化?说明了什么?
3)如果不想对x作无用的初始化,直接作参数传递,怎么实现?
【思考题】
1. 方法的参数传递有哪些方式?区别时什么?
2.什么是构造方法。