实验9 面向对象编程技术
实验目的:
1. 类的声明
2. 对象的实例化
3. 静态成员和非静态成员
4. 掌握如何定义类的方法
5. 掌握如何调用方法
6. 构造函数
实验准备:
参考课件:《第7章 面向对象编程技术.ppt》
实验内容:
1) 类的声明:
类是C#的一种自定义数据类型。声明格式为 :
[类修饰符] class 类名 [:基类类名]
{
类的成员
}
方括号括起的内容表示可选的内容(根据实际情况可以有,也可以没有)。类修饰符目前一般省略。基类类名在目前也省略。
类的成员定义类似于普通变量的定义。但前面可以有成员修饰符。成员修饰符表示成员的可见范围,目前主要有public 和private两种。Public 修饰的成员可以在类的外部直接访问,而private的成员只能在该类内部可见(该类内部的方法可以访问)。
[例子]定义一个表示车辆信息的类(有3个成员变量)
class Vehicle
[例子]定义一个表示车辆信息的类(有3个成员变量)
class Vehicle
{
public int passengers;
public int fuelcap;
public int mpg;
}
public int passengers;
public int fuelcap;
public int mpg;
}
练习1:定义一个表示学生成绩类,成员包含学生的姓名、班级、成绩和科目
public class Scourse
public class Scourse
{
string name;
string _class;
double score;
string C#
}
2) 对象的声明:
定义类仅仅是定义了类的结构。一般要利用这个类型生成相应的对象,才能够使用对象的成员。
声明对象名格式():
类名 对象名
例:Vehicle minivan;
创建类的实例:
使用new 关键字可以建立类的一个实例:
对象名 = new 类名();
创建了相应的实例后,可以使用 对象名.成员名 的方式访问对象的成员
例:
例:
using System;
class ClassA
{
class ClassA
{
public int mm;
};
class ClassB
{
};
class ClassB
{
public static void Main()
{
ClassA a;
// a.mm = 100; // 错误,对象未实例化
a = new ClassA();
a.mm = 100; // 正确
Console.);
}
}
{
ClassA a;
// a.mm = 100; // 错误,对象未实例化
a = new ClassA();
a.mm = 100; // 正确
Console.);
}
}
练习2:利用上面定义的学生成绩类,创建对象,并访问对象成员
public class Scourse
{
string name;
string _class;
double score;
public static void Main() {
Scourse st1;
st1 = new Scourse();
st1.name = "张三";
Console.WriteLine(st1.name);
}
}
writeline方法属于类
3) 静态成员和非静态成员
静态成员在声明成员的指令前加上static 保留字
静态成员属于类共同所有,非静态成员属于类的对象所有
练习3:类定义如下:
class ClassA
{
public int m1;
public string m2;
public static string m3;
};
编写一个程序,要求访问以上所有成员。
class ClassA
class ClassA
{
public int m1;
public string m2;
public static string m3;
public static void Main()
{
ClassA a = new ClassA();
a.m1 = “m1”;
a.m2 = "m2";
m3 = "m3";
Console.WriteLine(a.m1 + "\n" + a.m2 + "\n" + ClassA.m3);
}
};
4) 定义类的方法
方法的定义格式如下:
[修饰符] 返回值类型 方法名(形式参数列表)
{
方法体语句
}
例子:
using System;
class Student
{
// int id; string name;
public void sayHello() {Console.WriteLine("Hi!");}
}
class Test
{
public static void Main()
{
Student s1=new Student();
s1.sayHello();
}
}
类的方法表示对象可以完成的某种功能,或者可以进行的某种运算。
思考:指出下列程序代码中的错误,并改正
class Test
{
static void Main()
{
M();
}
}
int M()
{
Console.WriteLine("Welcome");
}
using System;
class Test
{
static void Main()
{Test t= new Test();
t.M();
}
void M()
{
Console.WriteLine("Welcome");
}
}
练习4:
1 在Student类中增加一个表示知识多少的成员变量 Knowledge。study方法可以增加Knowledge的值。请根据这个假设定义一个study方法。在Main()方法中调用这个study方法,并显示调用前和调用后 Knowledge的值。
using System;
class Student
{
int Knowledge;
// int id; string name;
public void study()
{
Knowledge++;
}
public void sayHello() { Console.WriteLine(" Knowledge" + Knowledge); }
}
class Test
{
public static void Main()
{
Student s1 = new Student();
s1.sayHello();
s1.study();
s1.sayHello();
}
}
5) 调用方法
一般同一个方法调用的时候都有一些区别,这些调用之间的区别使用参数来指定。比如,调用Console.WriteLine()方法,使用不同的参数,产生的效果也会不同。
参数可以有多个,类似于变量,需要指定参数的类型。在方法定义的时候,把所用的参数(形参)依次列出:
[修饰符] 返回值类型 方法名(类型1 参数名1, 类型2 参数名2, 类型3 参数名3,...)
{
方法体语句
}
注意:参数之间使用逗号分隔,而且每个参数前面都必须有类型。
我们有时候需要了解方法执行的结果。可以通过方法的返回值来表示方法执行的结果。返回值的类型在方法头中指定。实际返回的值,在方法体中通过return 语句指定。
return 语句后接一个表达式,表示要把return后接的表达式的值返回到调用者。
如果方法不需要返回值,则返回类型为 void(无类型),在方法体中直接使用return 返回。也可以不用 return,让方法体执行结束后直接返回。
例:表示汽车加速的方法:
using System;
class Car
{
public double v=0.0;
public double Acce(double a)
{ v = v+a; return v; }
public static void Main()
{
Car t1 = new Car ();
Console.WriteLine("v0={0}", t1.v);
Console.WriteLine("v1={0}", t1.Acce(4));
Console.WriteLine("v2={0}", t1.v);
}
}
使用不同的参数调用的时候,对对象的影响是不同的。
练习5:给Car类添加一个表示目前汽车前进方向的数据成员Direct(单位为角度)。方法Turn表示调整汽车的方向。定义并调用这个Turn方法,并返回调整之后的汽车方向
class Car
{
public double Direct;
public double v = 0.0;
public double Acce(double a)
{ v = v + a; return v; }
double Turn()
{
Direct++;
return Direct;
}
public static void Main()
{
Car t1 = new Car();
Console.WriteLine("Direct{0}", t1.Turn());
Console.WriteLine("v0={0}", t1.v);
Console.WriteLine("v1={0}", t1.Acce(4));
Console.WriteLine("v2={0}", t1.v);
}
}
6) 构造函数
构造函数:
构造函数是类的特殊成员,具有特殊的名字,并且是由系统自动调用,而不能有代码直接调用的。
为了在生成对象的时候对对象进行初始化,需要使用构造函数。
构造函数也是类的方法成员。构造函数的方法名必须与类名相同。在对象生成时,可以设置构造函数的参数。
构造函数没有返回值(注意也不是void)。
using System;
class Point
{
int x, y;
public Point(int x0, int y0) {x=x0; y=y0; } // 构造函数
public void sayHello()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论