面向对象程序设计 习习题_第1页
面向对象程序设计 习习题_第2页
面向对象程序设计 习习题_第3页
面向对象程序设计 习习题_第4页
面向对象程序设计 习习题_第5页
免费预览已结束,剩余12页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第6章 面向对象程序设计一选择题1下面有关类和对象的说法中,不正确的是【 】。A) 类是系统提供的一种数据类型B) 对象是类的实例C) 类和对象的关系是抽象和具体的关系D) 任何一个对象只能属于一个具体的类2面向对象的特点主要概括为【 】。A) 可分解性、可组合型性和可分类性B) 继承性、封装性和多态性C) 封装性、易维护性、可扩展性和可通用性D) 抽象性、继承性和封装性3要使一个类能被同一命名空间中的其他类访问,但不能被这个命名空间以外的类访问,该类可以【 】。A) 不使用任何修饰符B) 使用private修饰符C) 使用public修饰符D) 使用internal修饰符4在C#中,【 】访

2、问修饰符修饰的字段只能由当前程序集访问。A) privateB) publicC) protectedD) internal5类的字段和方法的默认访问修饰符是【 】。A) publicB) privateC) protectedD) internal6下列关于构造函数的描述中,不正确的是【 】。A) 构造函数中,不可以包含return语句B) 一个类只能有一个构造函数C) 实例构造函数在生成类实例时被自动调用D) 用户可以定义无参构造函数7下列关于构造函数的描述中,【 】是正确的。A) 构造函数名必须与类名相同B) 构造函数不可以重载C) 构造函数不能带参数D) 构造函数可以声明返回类型8下列

3、的【 】不是构造函数的特征。A) 构造函数的函数名与类名相同B) 构造函数可以重载C) 构造函数可以带有参数D) 可以指定构造函数的返回值类型9类ClassA有一个名为M1的方法,在程序中有如下一段代码,假设该段代码是可以执行的,则声明M1方法时一定使用了【 】修饰符。ClassA Aobj=new ClassA();();A) publicB) public staticC) privateD) virtual10在C#中,从属性的读写特性上来进行分类,可以划分为以下3种,除了【 】。A) 只读属性B) 只写属性C) 读写属性D) 不可读不可写属性11在C#中,以下关于属性的描述中正确的是【

4、 】。A) 属性是以public关键字修饰的字段,以public关键字修饰的字段也可称为属性B) 属性是访问字段值的一种灵活机制,属性更好地实现了数据的封装和隐藏C) 要定义只读属性只需在属性名前加上readonly关键字D) C#的类中不能自定义属性12以下类MyClass的属性count属于【 】属性。class MyClass int i;int count get return i; A) 只读B) 只写属性C) 读写D) 不可读不可写13C#中的TestClass为一自定义类,其中有如下属性定义:public int Property 使用以下语句创建了该类的对象,并让变量obj引用

5、该对象。TestClass obj=new TestClass();那么,可通过【 】方式访问类TestClass的Property属性。A) MyClass. PropertyB) obj. PropertyC) TestClass. PropertyD) obj. Property()14关于C#语言的方法,下列叙述正确的是【 】。A) 方法的定义不能嵌套,但方法的调用可以嵌套B) 方法的定义可以嵌套,但方法的调用不能嵌套C) 方法的定义和调用都不能嵌套D) 方法的定义和调用都可以嵌套15以下所列的各方法头部中,正确的是【 】。A) void play(var a:Integer, var

6、 b:Integer)B) void play(int a, b)C) void play(int a, int b)D) Sub play(a as integer, b as integer)16在类A中定义了属性y:class A public int yget return 1; set 并试图通过下列代码来实现对属性y的访问:A b=new A();=2;int x=;对此,下列说法正确的是【 】。A) 属性y可读可写,因此变量x的值为2B) 属性y可读,但不可写,因此语句“=2;”是错误的C) 属性y可写,但不可读,因此语句“int x=;”是错误的D) 属性y可读可写,变量x的值

7、为117有以下类声明:public class Class1private string _sData="OK!" privare string sDataset _sData = value;在Main函数中,在成功创建该类的对象obj后,以下【 】语句是合法的。A) obj. _sData="Hello!"B) obj. set;C) obj. sData="Hello!"D) (obj. sData);18在类的定义中,类的【 】描述了该类的对象的行为特征。A) 字段B) 方法C) 属性D) 类名19调用重载方法时,系统根据【

8、】来选择具体的方法。A) 参数的类型B) 参数的个数和类型C) 参数个数D) 方法的返回值类型20下列关于方法重载的说法中,完全正确的是【 】。A) 重载方法的参数个数必须不同B) 重载方法必须具有不同的形参列表C) 重载方法必须具有不同的返回值类型D) 重载方法的参数类型必须不同21关于静态成员,下列说法正确的是【 】。A) 同一个类中的静态成员,类实例化后,在不同的对象中形成不同的静态成员B) 在类实例化后,同类型的对象都共享类的静态成员,静态成员只有一个版本C) 在类定义时静态成员属于类,在类实例化后静态成员属于对象D) 在类实例化后静态成员已被实例化,因此不同的对象有不同的静态成员22

9、下列关于静态方法的说法,错误的是【 】。A) 静态方法不对特定实例进行操作,不与实例相关联B) 使用静态方法的语法格式:类名.静态方法(实参列表)C) 静态方法只能访问类中的静态成员,不能访问非静态成员D) 静态方法不能访问类中的静态成员23已知: int a=100;void Func(ref int b) 则下列函数调用正确的是【 】。A) Func(ref(10*a)B) Func(ref 10*a)C) Func(ref(a)D) Func(ref a)24下面对方法中的ref和out参数说明错误的是【 】。A) ref和out参数传递方法相同,都是把实参的内存地址传递给形参,实参与形

10、参指向同一个内存存储区域,但ref要求实参必须在调用之前明确赋过值B) ref是将实参传入形参,out只能用于从方法中传出值,而不能从方法调用处接受实参数据。C) ref和out参数因为传递的是实参的地址,所以要求实参和形参的数据类型必须一致D) ref和out参数要求实参和形参的数据类型或者一致,或者实参能被隐式地转化为形参的类型25设方法Max的签名为:public void Max(out int max, params int a),maxval是一个int型的值类型变量,arrayA是一个int型的数组对象,则下列调用该方法的语句中有错的是【 】。A) Max(maxval,4,5,

11、3)B) Max(out maxval, 4, 5, 3)C) Max(out maxval, arrayA)D) Max(out maxval, 4, 5)26. 有以下类声明:class Class1public static int Count = 0;public Class1()Count+;在执行以下语句后,的值是【 】。Class1 o1 = new Class1();Class1 o2 = new Class1();A) 1B) 2C) 3D) 027在类MyClass中有下列方法定义:public void test(params int arr) ("使用para

12、ms参数!"); public void test(int x, int y) ("使用两个整形参数!"); 请问上述方法重载有无二义性若没有,则下列语句的输出为【 】。Myclass x=new MyClass();(0);(0,1);(0,1,2);A) 有语义二义性B) 使用params参数!使用params参数!使用params参数!C) 使用params参数!使用两个整形参数!使用params参数!D) 使用params参数!使用两个整形参数!使用两个整形参数!28分析以下C#语句,注意类MyClass没有访问修饰符。若必须为类MyClass添加访问修饰

13、符,并使MyClass的可访问域保持不变,则应选择【 】。namespace testclass MyClassint i;A) privateB) publicC) protectedD) internal29C#中MyClass为一个自定义类,其中有以下方法定义:public void Hello() 并使用以下语句创建了该类的对象obj,则可以访问类MyClass的Hello方法的语句是【 】。MyClass obj=new MyClass()A) ()B) obj:Hello()C) D) MyClass:Hello30下列的关键字中可用于引用类的当前实例的是【 】。A) baseB)

14、 thisC) newD) override31在C#中,以下有关索引器的参数个数的说法中正确的是【 】。A) 索引器只能有一个参数B) 索引器可以有多个参数C) 索引器可以没有参数D) 索引器至少要有两个参数32委托声明的关键字是【 】。A) delegateB) sealedC) operatorD) event33以下语句的作用是【 】。public delegate void Hello(string s);A) 声明了一个名称为Hello的全局方法B) 声明了一个名称为Hello的函数原型C) 声明了一个名称为Hello的函数指针D) 声明了一个名称为Hello的委托类型34有声明语

15、句:delegate void TimeDelegate(string s),则以下可以和委托TimeDelegate绑定的方法是【 】。A) void f() B) string f()C) void f(string a) D) string f(string a) 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有以下

16、部分C#代码,其中MyDelegate是一个【 】。static void fun(string s) (s); public static void Main()MyDelegate p=new MyDelegate(fun);p("Hello!");A) 结构类型;B) 委托类型C) 函数D) 类名37对于下面声明的委托和定义的类:delegate int Mydelegate(int n);class Apublic int f(int i) return 0; public void g(int j) public static int h(int k) retur

17、n 0; 下面语句中哪些是正确的【 】。Mydelegate d1=new Mydelegate;2MouseClicked +=;e. MouseClicked +=;其中Method类中包含事件处理方法fun,然后引发该MouseClicked 事件,其结果为【 】。A) 方法被调用一次B) 方法被调用二次C) 方法不会被调用D) 方法被调用四次二填空题1【 类 】是面向对象编程的基础模块,在C#中,所有的内容都被封装在其中。2声明类之后,通过new创建【 类对象 】,它是一个引用类型的变量。3静态字段是用【 static 】修饰符声明的字段,无论存在多少个类实例,它们都共享一个字段副本。

18、4定义方法时使用的参数是【形参】,调用方法时使用的参数是【 实参 】。5数据类型说明符用来说明方法返回值的类型,如果没有返回值,则类型说明符应为【 void 】。6下列方法的作用是求两个数的较大数,并把较大数作为返回值,请填空。float max_v(【 (1)】) float max;max=a;if(max<b) max=b;【(2)】;(1)int a, int b(2) return(max)7在调用方法时,要使参数按引用方式进行传递,需要使用关键字【 ref 】。8. 在调用方法时,要使参数按输出方式进行传递,需要使用关键字【 out 】,此时并不要求实参变量已经初始化。9在类

19、的成员声明时,若使用了【protected】修饰符,则该成员只能在该类或其派生类中进行访问。10类的静态成员属于【 类 】所有,非静态成员属于类的实例所有。11已知某类的类名为ClassA,则该类的析构函数名为【ClassA 】。12C#方法的参数有四种,分别是:值参数(对应值传递)、引用参数(对应地址传递)、输出参数和参数数组,在形参中声明参数数组时应使用【params】关键字。13要给属性对应的数据成员赋值,通常要使用set访问器,set访问器始终使用【 value】来设置属性的值。14声明一个公有委托类型MyFun1,该委托类型可以与无参且返回值为int类型的方法相关联,则该声明语句应为

20、【 public delegate int MyFun1(); 】。15下列程序的输出结果是【 30 】。class Programstatic 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);("0",a);16下列程序的运行结果是【3,5 】。class program static void Func(int a, out int x,out int y)x=a/10;y=a%10;static void Main()int

21、 m=35;int a, b;Func(m, out a,out b);("0,1",a,b);17下列程序的运行结果是【 18 】。class A private int x;public static A operator -(A b, A c)A a=new A();= * ;return a;public void setx(int x) =x; public int getx() return x; class Program static void Main() A a=new A();(3); A b=new A();(6); A c = a - b; Con

22、sole .WriteLine ("0",(); 18. 下列程序的运行结果是【中国地质大学 】。public class University const int MAX = 10; private string name = new stringMAX; public string this int index get if (index >= 0 && index < MAX) return nameindex; else return name0; set if (index >= 0 && index < M

23、AX) nameindex = value; class Program static void Main() University un=new University(); un0 = "清华大学" un1 = "北京大学" un2 = "中国地质大学" (un2); 三改错题(说明:下列程序中部分下划线的代码有错误,请将有错误的部分改正过来,并说明原因)1class AA() A a=new A(); 答:“A() ”应改为“public A() ”。因为在默认修饰符的情况下,类中的成员被默认为私有成员,因此在用A创建a时试图调用

24、此构造函数,会因此构造函数为私有成员而拒绝访问。2class Apublic static int x=100;public int y=200;class Programstatic void Main(string args)A a=new A();=10;=20;答:“=10;”应改为“=10;”。因为x是类A中的静态成员。3class AA() void A() private A(int x) private A(int y) 答:“void A() ”应改为“A()”,因为构造函数不能带任何返回类型修饰符。“private A(int x) ”和“private A(int y)

25、”实际上是同一个构造函数,应删除其中一个。4class Aint f() return 1; void f() void g(int x) void g(int y) 答:类A中试图重载函数f()和函数g(),但函数的重载是通过定义不同的参数个数和类型来实现的,其返回类型不能说明函数的重载特性,因此应删除其中的一个f()函数;类似的原因,函数g()中的形参名不同也不能说明函数的重载特性,实际上这两个g()函数是一样的,因此也需去掉其中之一。四问答题1简述类和对象的关系。2简述面向对象的基本特征。3类的声明格式中包含哪些部分各有什么意义访问修饰符 class 类名:基类类名 成员定义列表; 4什

26、么是实例方法什么是静态方法5类可以使用哪些修饰符各代表什么含义6简述构造函数和析构函数的作用。ð 是在创建对象时自动执行的类方法。ð 通常用于对成员变量进行初始化。ð 在类对象被系统销毁时自动执行。ð 析构函数也仅仅执行一次,通常用于对象被销毁前的“扫尾”工作。7什么是属性 v 是一种特殊的类成员,目的是保护字段、对字段的赋值和取值进行限定。答:属性是C#中的一种语法结构。如下: private int _年龄; public int年龄 set if (value > 0) _年龄= value; get return _年龄; 8为什么使用属性

27、 答:属性是实现封装的一种方式,起到保护类成员变量的作用。调用简洁方便。而且,通过属性可以访问私有成员变量。 9属性的类型有什么 答:属性类型有:读写属性,只读属性,只写属性。 11什么是索引器 答:索引器是C#中的一种语法结构。如下: 访问修饰符 数据类型this数据类型 标识符 get;索引器的作用是什么 答:作用:索引器是实现封装的一种方式,起到保护类成员的作用;同时使用起来简单方便:为集合对象创建索引器后,可以对类对象指定索引来直接访问数组元素即用索引数组的方式索引对象。 13. 索引器可以重载吗可以为索引器指定几个索引器参数答:索引器可以重载。可以为索引器至少指定一个索引器参数。 1

28、4什么时候使用属性,什么时候使用索引器答:类中有成员变量就应该有属性。当成员变量是集合类型的时候,可以创建索引器。五程序阅读题1阅读下列程序,写出程序的输出结果。 考察类对象public class TPoint int x, y; public void setpoint(int x1,int y1) x = x1; y = y1; public void dispoint() ("点:(0,1)", x, y); class Program static void Main(string args) TPoint p1, p2; p1= new TPoint(); (2

29、, 6); p2 = p1; (8, 3); (); (); 点:(8,3)点:(8,3)2阅读下列程序,写出程序的输出结果。考察方法参数传递class Program static void f1(ref int a, ref int b, out int sum, out int sub) int t; t=a; a=b; b=t; sum = a + b; sub = a - b; public static void Main(string args) int x=10, y=20,xx=30,yy=40; f1(ref x, ref y, out xx, out yy); (&quo

30、t;x=0,y=1,xx=2,yy=3", x,y,xx, yy); x=20,y=10,xx=30,yy=103阅读下列程序,写出程序的输出结果。考察索引器public class Weeks string week= "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" ; public string thisint i get if (i >= 0 && i< 7)

31、 return weeki; else return week0; set if (i >= 0 && i< 7) weeki = value; class Programstatic void Main() Weeks w = new Weeks(); w0 = "星期天" w1 = "星期一" (w2); (w7); Tues星期天4阅读下列程序,写出程序的输出结果。考察委托使用delegate void mydelegate(double x, double y);class MyDeClass public void

32、add(double x, double y) ("0+1=2", x, y, x + y ); public void sub(double x, double y) ("0-1=2", x, y, x - y); class Program static void Main(string args) MyDeClass obj = new MyDeClass(); mydelegate p; p = ; p += ; p(10, 20); 10+20=3010-20=-105阅读下列程序,写出程序的输出结果。考察委托使用public delegate

33、 int mydelegate(int x, int y); class Math public int fun1(int x, int y) return x * x + y * y; public int fun2(int x, int y) return x * x - y * y; class Program static void Main(string args) int result;mydelegate objCall; Math objMath = new Math(); objCall = ; result = objCall(5, 3); ("结果为0"

34、;, result); objCall = ; result = objCall(5, 3); ("结果为0", result); (); 结果为34结果为165. 阅读下列程序,写出程序的输出结果。考察事件public delegate void mydelegate1(int i);class MyEvent public event mydelegate1 Event1; public void FireEvent1(int i) if (Event1 != null) Event1(i); public class Program public static voi

35、d show(int i) ("0 ", i); public static void Main() MyEvent a = new MyEvent(); += new mydelegate1(show); for (int i = 0; i <= 30; i+) if (i % 7 = 0) (i); 0 7 14 21 286. 阅读下列程序,写出程序的输出结果。考察运算符重载class Complex double a, b; public Complex(double m, double n) a=m; b=n; public static Complex o

36、perator +(Complex x,Complex y) Complex t=new Complex(0,0); =+; =+; return(t); public void DispCom() if (b>0 ) ("0+1i",a,b); else ("0-1i",a,-b); class Program public static void Main(string args) Complex x=new Complex(1,2);Complex y=new Complex(3,4); Complex z=new Complex(0,0);

37、z=x+y;();(); (); 1+2i3+4i4+6i六编程题1创建一个Student类,要求:v 该类封装学生的姓名、性别和成绩等信息。v 通过构造函数给姓名和性别信息赋值。v 姓名和性别信息只能读不能写,成绩信息通过属性进行读写,对成绩属性进行赋值时,若成绩大于100分赋100分,若成绩低于0分赋0分。v 具有一个判断成绩等级的方法 class Student private string name; private string sex; private int cj; public Student(string name, string sex) = name; = sex; pu

38、blic string Name get return name; public string Sex get return sex; public int Score get return cj; set if (value > 100) cj = 100; else if (value < 0) cj = 0; else cj = value; public string grade(int a) string dj; if (a >= 90) dj = "优秀" else if (a >= 80) dj = "良好" els

39、e if (a >= 70) dj = "中等" else if (a >= 60) dj = "及格" else dj = "不及格" return dj; 2声明一个用于检查用户合法性及用户级别的类CheckUser,具体要求如下:v 该类包含UserName(用户名)和UsePwd(密码)两个string类型的属性。v 包含一个带有两个string类型参数的构造函数。v 包含一个返回值为int类型的UserLevel()方法,返回值为0表示高级用户,为1表示普通用户,为2表示用户不存在。若用户名为“zhangsan”

40、,密码为”123456”,则为高级用户。若用户名为“lisi”,密码为”654321”,则为普通用户。所有其他用户均为不合法用户。class CheckUser private string name; private string pwd; public string UserName get return name; set name = value; private string UserPwd get return pwd; set pwd = value; public CheckUser(string name, string pwd) = name; = pwd; public

41、int UserLevel() int level = 2; if (UserName = "zhangsan" && UserPwd = "123456") level = 0; if (UserName = "lisi" && UserPwd = "654321") level = 1; return level; 3设计实现一个商品销售的简单管理程序。具体要求如下:v 每一种商品对象要存储的是商品名称、库存量及商品的单价。v 每销售一件商品要计算销售总额和商品库存量。class

42、 Goods private string name; public string Name get return name; set name = value; private int count; riteLine ("total:0",total );public void DisplayAll()("学号:0t姓名:1t性别:2", num ,name,sex ); public class teststatic void Main() Person myPerson = new Person(1001, "张小为", &qu

43、ot;女");();();7创建一个复数类Complex,可以实现复数的赋值(通过构造函数)、显示(通过实例方法)和加法运算(通过“+”运算符重载)。 class Complex int real, imag; public Complex(int a, int b) real = a; imag = b; public void Display() ("=0,=1", real, imag); public static Complex operator +(Complex p1, Complex p2) Complex p=new Complex(0,0); = + ; = + ; return p; 8设计一个控制台应用程序,创建一个List类,可以存储整数、实数、字符数据等(最多存放100个元素),并可以添加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论