资源描述
. . . .
##########X
实 验 报 告
实验课程名称: 面向对象的程序设计
实验项目名称:实验三C#面向对象程序设计
专 业 班 级: ##########
学 号: X
姓 名: 新浪微博:圣痕轨迹
指 导 教 师: X
实验三 C#面向对象程序设计
一、实验目的
1.理解C#语言是如何表达面向对象编程基本思想。
2.掌握类对象的定义。
3.了解类的封装方法,以与如何创建类和对象。
4.了解成员变量和成员方法的特性。
5.掌握静态成员的用法。
6.掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数。
7.理解类的成员的访问控制的含义,公有、私有和保护成员的区别。
8.掌握参数传递的用法。
9.掌握属性的作用和使用。
二、实验要求
1. 分析程序,上机验证结果。
2. 写出程序,并调试程序,要给出测试数据和实验结果。
3. 整理上机步骤,总结经验和体会。
4. 完成实验日志和上交程序。
三、实验容
题目一:程序分析
(1)分析下面两个程序,确定那个程序好,说明理由。
程序1:
程序2:
第二个好,能让我们更直观的看清圆的周长和面积。
(2)分析程序,写出程序的运行结果,并上机进行验证。
(3)分析程序,写出程序的运行结果,并上机进行验证。
(4)分析程序,写出程序的运行结果,并上机进行验证,然后回答后面问题。
请回答以下问题:
(1) 按你自己的算法修改以上程序,比如可只输出生成的账户数。
(2) 把注释去掉后会怎样,为什么?
没有影响,因为注释不影响程序执行。
(3) 为什么display用类名直接引用,可以用对象来引用么?尝试输出结果。
不能用对象来引用。
(4) 类的静态变量和非静态变量的引用区别。判断一下语句的正确性:
静态方法只能使用静态变量,不能使用实例变量。因为对象实例化之前,实例变量不可用。这个观点真确么?(√)
类的静态变量只有一个版本,所有实例对象引用的都是同一个版本。(√)
对象实例化后,每个实例变量都被制作了一个副本,它们之间互不影响。(√)
题目二:程序编写
(1) 实现一个包含类属性方法的简单加法程序,并能显示结果。
namespace Test
{
classAdd
{
double a, b;
public Add(double a, double b)
{
this.a = a; this.b = b;
}
publicvoid DisplayAdd()
{
Console.WriteLine("{0}", a + b);
}
staticvoid Main(string[] args)
{
double a, b;
Console.WriteLine("请输入要求和的两个数:"); a = Convert.ToInt64(Console.ReadLine()); b = Convert.ToInt64(Console.ReadLine()); Add s = newAdd(a, b); s.DisplayAdd(); Console.ReadLine();
}
}
}
(2) 实现一个Person类,要求:属性包含、年龄、号、工作、工资等,并显示各属性的值。
namespace Person
{
classPerson
{
string name, id, job; int age; double wage;
private Person(string name, int age, string id, string job, double wage)
{
this.name = name; this.age = age; this.id = id; this.job = job; this.wage = wage;
}
privatevoid DisplayPerson()
{
Console.WriteLine(":{0}\n年龄:{1}\n号:{2}\n工作:{3}\n工资:{4} ", name, age, id, job, wage);
}
staticvoid Main(string[] args)
{
Person p = newPerson("圣痕轨迹", 20, "130***********", "学生", 0); p.DisplayPerson(); Console.ReadLine();
}
}
}
(3)编写一个传值调用的程序。
程序功能要求:程序首先给整型变量x 和y 赋初值3,5,然后使用传值调用方式调用方法对x 和y 做乘方并与输出x 和y 的乘方值,最后输出x和y得值。再将此方法给为对象调用加ref修饰查看输出结果差异。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test6
{
classPower
{
void DisplayPower1(double x, double y)
{
x = Math.Pow(x, 2); y = Math.Pow(y, 2);
Console.WriteLine("x的值为:{0},y的值为:{1}", x, y);
}
void DisplayPower2(ref double x, ref double y)
{
x = Math.Pow(x, 2); y = Math.Pow(y, 2);
Console.WriteLine("x的值为:{0},y的值为:{1}", x, y);
}
staticvoid Main(string[] args)
{
double a = 3, b = 5; Power A = newPower(); A.DisplayPower1(a, b);
Console.WriteLine("传值调用后a的值为:{0},b的值为:{1}", a, b); A.DisplayPower2(ref a, ref b);
Console.WriteLine("引用调用后a的值为:{0},b的值为:{1}", a, b); Console.ReadLine();
}
}
}
[思考题]
1. 方法的参数传递有哪些方式?区别时什么?
方法的参数传递分为参数按值传递和参数按引用传递两种:参数按值传递是在调用带参数的方法时,参数的值复制到方法中;参数按引用传递是一个方法的参数是对象或数组。
2. 什么是构造方法。
构造方法是一种特殊的成员方法,在C#中,任何变量在被使用前都必须先设置初值.C#提供了为类的成员变量赋初值的专门方法。
[实验总结]
通过本次上机实验,我理解了C#语言是如何表达面向对象编程基本思想,掌握了类对象的定义,了解类的封装方法、如何创建类和对象,以与成员变量和成员方法的特性。掌握了静态成员的用法和构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。还能够根据给定的要求定义类并实现类的成员函数。最后,还掌握了参数传递的用法和属性的作用和使用
5 / 5
展开阅读全文