第6章 面向对象程序设计 习题 联系客服

发布时间 : 星期二 文章第6章 面向对象程序设计 习题更新完毕开始阅读1e65e2b3168884868662d642

35.声明一个委托类型:public delegate int myCallBack(int x); 则以下可以和委托myCallBack

绑定的方法是【】 A) void myCallBack(int x); B) int receive(int num); C) string receive(int x); D) 不确定的 36.有以下部分C#代码,其中MyDelegate是一个【】。 static void fun(string s) { Console.WriteLine(s); } public static void Main()

{ MyDelegate p=new MyDelegate(fun); p(\}

A) 结构类型; B) 委托类型 C) 函数 D) 类名 37.对于下面声明的委托和定义的类:

delegate int Mydelegate(int n); class A

{ public int f(int i) { return 0; } public void g(int j) { }

public static int h(int k) { return 0; } }

下面语句中哪些是正确的【】。 Mydelegate d1=new Mydelegate(A.h); //语句1 A a=new A(); Mydelegate d2=new Mydelegate(a.f); //语句2

Mydelegate d3=new Mydelegate(a.g); //语句3 Mydelegate d4=new Mydelegate(a.h); //语句4 A) 语句1、语句2、语句3、语句4 B) 语句1、语句2 C) 语句3、语句4 D) 语句2、语句3 38.以下用于定义事件的关键字是【】。

A) delegate B) event C) this D) value 39.将发生的事件通知其他对象(订阅者)的对象称为事件的【】。

A) 广播者 B) 发行者 C) 通知者 D) 订阅者 40.已知类MyClass中事件MouseClicked定义如下:

public delegate void mydelegate(); public event mydelegate MouseClicked(); 执行下列语句: Method obj=new Method(); MyClass e=new MyClass(); e. MouseClicked +=obj.fun;

e. MouseClicked +=obj.fun;

其中Method类中包含事件处理方法fun,然后引发该MouseClicked 事件,其结果为【】。 A) obj.fun方法被调用一次 B) obj.fun方法被调用二次 C) obj.fun方法不会被调用 D) obj.fun方法被调用四次 二.填空题

1.【类】是面向对象编程的基础模块,在C#中,所有的内容都被封装在其中。

2.声明类之后,通过new创建【类对象】,它是一个引用类型的变量。

3.静态字段是用【 static】修饰符声明的字段,无论存在多少个类实例,它们都共享一个字段副本。

4.定义方法时使用的参数是【形参】,调用方法时使用的参数是【实参】。 5.数据类型说明符用来说明方法返回值的类型,如果没有返回值,则类型说明符应为【void】。 6.下列方法的作用是求两个数的较大数,并把较大数作为返回值,请填空。 float max_v(【 (1)】) { float max; max=a; if(max

【(2)】;

} (1) int a, int b (2) return(max)

7.在调用方法时,要使参数按引用方式进行传递,需要使用关键字【ref】。

8. 在调用方法时,要使参数按输出方式进行传递,需要使用关键字【out 】,此时并不要求实参变量已经初始化。

9.在类的成员声明时,若使用了【protected】修饰符,则该成员只能在该类或其派生类中

进行访问。

10.类的静态成员属于【类】所有,非静态成员属于类的实例所有。 11.已知某类的类名为ClassA,则该类的析构函数名为【~ClassA 】。

12.C#方法的参数有四种,分别是:值参数(对应值传递)、引用参数(对应地址传递)、

输出参数和参数数组,在形参中声明参数数组时应使用【params】关键字。

13.要给属性对应的数据成员赋值,通常要使用set访问器,set访问器始终使用【 value】

来设置属性的值。

14.声明一个公有委托类型MyFun1,该委托类型可以与无参且返回值为int类型的方法相

关联,则该声明语句应为【public delegate int MyFun1(); 】。 15.下列程序的输出结果是【30】。 class Program { static void sub(int x, int y, int z)

{ z=x*x+y*y; }

public static void Main(string[] args) { int a=30; sub(5, 2, a);

Console.WriteLine(\}

}

16.下列程序的运行结果是【3,5 】。 class program { static void Func(int a, out int x,out int y) { x=a/10; y=a; } static void Main() { int m=35; int a, b; Func(m, out a,out b);

Console.WriteLine(\

} }

17.下列程序的运行结果是【18】。

class A

{ private int x;

public static A operator -(A b, A c) { A a=new A(); a.x=b.x * c.x; return a; }

public void setx(int x) { this.x=x; } public int getx(){ return x; } }

class Program { static void Main() { A a=new A(); a.setx(3); A b=new A(); b.setx(6); A c = a - b;

Console .WriteLine (\ } }

18. 下列程序的运行结果是【中国地质大学】。

public class University { const int MAX = 10;

private string[] name = new string[MAX]; public string this[ int index ] { get

{ if (index >= 0 && index < MAX) return name[index];

else return name[0]; } set

{ if (index >= 0 && index < MAX) name[index] = value; } }

class Program { static void Main()

{ University un=new University(); un[0] = \清华大学\ un[1] = \北京大学\ un[2] = \中国地质大学\ Console.WriteLine(un[2]); } } 三.改错题

}

(说明:下列程序中部分下划线的代码有错误,请将有错误的部分改正过来,并说明原因) 1. class A { A(){ } } A a=new A();

答:“A(){ }”应改为“public A(){ }”。因为在默认修饰符的情况下,类中的成员被默认为私有

成员,因此在用A创建a时试图调用此构造函数,会因此构造函数为私有成员而拒绝访问。 2. class A { public static int x=100; public int y=200; } class Program { static void Main(string[] args) { A a=new A(); a.x=10; a.y=20; } }

答:“a.x=10;”应改为“A.x=10;”。因为x是类A中的静态成员。 3. class A { A(){ } void A(){ } private A(int x){ } private A(int y){ } }

答:“void A(){ }”应改为“A(){}”,因为构造函数不能带任何返回类型修饰符。“private A(int

x){ }”和“private A(int y){ }”实际上是同一个构造函数,应删除其中一个。 4. class A

{ int f(){ return 1; } void f(){ } void g(int x){ } void g(int y){ } }

答:类A中试图重载函数f()和函数g(),但函数的重载是通过定义不同的参数个数和类型来实现的,其返回类型不能说明函数的重载特性,因此应删除其中的一个f()函数;类似的原因,函数g()中的形参名不同也不能说明函数的重载特性,实际上这两个g()函数是一样的,因此也需去掉其中之一。 四.问答题

1.简述类和对象的关系。 2.简述面向对象的基本特征。

3.类的声明格式中包含哪些部分?各有什么意义? [访问修饰符] class 类名[:基类类名] {