面向对象编程习题.docx
- 文档编号:8735920
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:20
- 大小:23.30KB
面向对象编程习题.docx
《面向对象编程习题.docx》由会员分享,可在线阅读,更多相关《面向对象编程习题.docx(20页珍藏版)》请在冰豆网上搜索。
面向对象编程习题
C#面向对象编程-多态
1.C#中的方法重写使用关键字()。
a)override
b)overload
c)static
d)inherit
2.以下的C#代码,试图用来定义一个接口:
publicinterfaceIFile{
intA;
intdelFile(){
A=3;
}
voiddisFile();
}
关于以上的代码,以下描述错误的是()。
(选择一项)
a)以上的代码中存在的错误包括:
不能在接口中定义变量,所以intA代码行将出现错误
b)以上的代码中存在的错误包括:
接口方法delFile是不允许实现的,所以不能编写具体的实现函数
c)代码voiddisFile();定义无错误,接口可以没有返回值
d)代码voiddisFile();应该编写为voiddisFile(){};
3.在C#中,接口与抽象基类的区别在于()。
a)抽象基类可以包含非抽象方法,而接口只能包含抽象方法
b)抽象基类可以被实例化,而接口不能被实例化
c)抽象基类不能被实例化,而接口可以被实例化
d)抽象基类就是接口,它们之间无差别
4.在开发某图书馆的图书信息管理系统的过程中,开始为教材类图书建立一个TextBook类;现在又增加了杂志类图书,于是需要改变设计,则下面最好的设计应该是()。
a)建立一个新的杂志类Journal。
b)建立一个新的杂志类Journal,并继承TextBoook类。
c)建立一个基类Book和一个新的杂志类Journal,并让Journal类和TextBoook类都继承于Book类。
d)不建立任何类,把杂志图书的某些特殊属性加到TextBoook类中。
5.可以使用()关键字重写方法。
a)Override
b)New
6.()可以看作类的模具。
A.抽象类
B.接口
C.虚方法
7.以下叙述正确的是:
()
A.接口中可以有虚方法。
B.一个类可以实现多个接口。
C.接口不能被实例化。
D.接口中可以包含已实现的方法。
8.下列代码输出为():
classFather{
publicvoidF(){Console.WriteLine("A.F");}
publicvirtualvoidG(){Console.WriteLine("A.G");}
}
classSon:
Father{
newpublicvoidF(){Console.WriteLine("B.F");}
publicoverridevoidG(){Console.WriteLine("B.G");}
}
classoverride_new{
staticvoidMain(){
Sonb=newSon();
Fathera=b;
a.F();
b.F();
a.G();
b.G();
}
}
A.A.FB.FA.GB.G
B.A.FB.FB.GB.G
C.A.FA.FB.GB.G
D.B.FB.FB.GB.G
9.写出程序的输出结果:
publicclassA
{
publicvirtualvoidFun1(inti)
{
Console.WriteLine(i);
}
publicvoidFun2(Aa)
{
a.Fun1
(1);
Fun1(5);
}
}
publicclassB:
A{
publicoverridevoidFun1(inti)
{
base.Fun1(i+1);
}
publicstaticvoidMain(){
Bb=newB();
Aa=newA();
a.Fun2(b);
b.Fun2(a);
}
}
10.在C#中,允许多接口继承,从多个接口时,使用“:
”后跟继承的接口的名字,多个接口名称之间使用()符号进行分割。
(选择一项)
a)”.’
b)”->”
c)”,”
d)”:
:
”
11.在.NET中,关于组件多态性的陈述,下面除了()都是正确的。
(选择一项)
a可以通过接口实现多态性
b可以通过抽象类实现多态性
c多态性不只是重载或重写,而是智能重写
d在多态性中,需要调用哪个方法的决定是在设计时做出的
12.多态性允许对类的某个方法进行调用而无需考虑该方法所提供的特定实现,例如,可能有名为了Road的类,它调用另一个类的Drive方法,另一个类可能是SportsCar或SmallCar,
但二者都提供Drive方法,虽然Drive方法的实现因类的不同而异,但Road类仍可以调用它,并且它提供的结果可由Road类使用和解释。
在.NET中,可以由以下的方式来实现组件中多态性,除了()。
(选择一项)
a)通过接口实现多态性
b)通过多个不同的子类从单个基类继承实现多态
c)通过抽象类实现多态性
d)通过受保护的成员函数来实现多态性
13.阅读以下的C#代码:
classA
{
publicabstractvoidprintStr(stringstr)
{
Console.WriteLine(str);
}
}
classB:
A
{
publicoverridevoidprintStr(stringstr)
{
str=str+"(重写的方法)";
Console.WriteLine(str);
}
}
classDefaultInitializerApp
{
publicstaticvoidMain()
{
Bb=newB();
Aa=b;
a.printStr("打印");
b.printStr("打印");
Console.ReadLine();
}
}
运行程序后将在控制台窗口打印()。
(选择一项)
a.打印重写的方法
b.打印打印重写的方法
c.打印
d.程序有误,不能运行
14.在C#的语法中,()关键字可以实现在派生类中对基类的虚函数进行重载(选一项)
a>override
b>new
c>static
d>virtual
15.对下面的C#程序:
usingSystem;
publicinterfaceIAccount
{
voidPosInterest();
voidDeductFees(intfeeSchedule);
}
classBusinessAccount:
IAccount
{
intA;
publicstaticvoidMain()
{
BusinessAccountB=newBusinessAccount();
Console.WriteLine(B.A);
Console.ReadLine();
}
publicvoidIAccount.PostInterest()
{
A=A+1;
}
publicvoidIAccount.DeductFees(intfeeSchedule)
{
A=A+feeSchedule;
}
}
以下的说法正确的是()(选择一项)
a)程序将出现编译错误,指示不能在实现接口BusinessAccount的类中定义成员A.
b)程序将出现编译错误,指示Public关键字对接口项无效
c)程序编译正常,但是出现运行时错误,指示变量A没有初始化
d)程序将正常运行,输出为0
16.可以使用()关键字重写方法。
A.Override
B.new
17.()可以看作类的模具。
A.抽象类
B.接口
C.虚方法
18.请问,此程序输出结果是()
abstractclassBaseClass{publicvirtualvoidMethodA(){Console.WriteLine("BaseClass");}publicvirtualvoidMethodB(){}}classClass1:
BaseClass{
publicvoidMethodA(){Console.WriteLine("Class1");}publicoverridevoidMethodB(){}}classClass2:
Class1{newpublicvoidMethodB(){}}classMainClass{publicstaticvoidMain(string[]args){Class2o=newClass2();o.MethodA();}}
A.BaseClassB.BassClassClass1
C.Class1D.Class1BassClass
19.请问,此程序输出结果是()
publicabstractclassA{publicA(){Console.WriteLine('A');}publicvirtualvoidFun(){Console.WriteLine("A.Fun()");}}publicclassB:
A{publicB(){Console.WriteLine('B');}publicnewvoidFun(){Console.WriteLine("B.Fun()");}publicstaticvoidMain(){Aa=newB();a.Fun();}}
A.ABA.Fun() B.ABB.Fun() C.BAA.Fun() D.BAB.Fun()
20.以下叙述正确的是():
A.接口中可以有虚方法。
B.一个类可以实现多个接口。
C.接口不能被实例化。
D.接口中可以包含已实现的方法。
21.以下关于C#代码的说法正确的是()。
(选择一项)
PublicabstractAnimal
{
PublicabstractvoidEat();
PublicvoidSleep()
{
}
}
a.该段代码正确
b.代码错误,因为类中存在非抽象方法
c.代码错误,因为类中的方法没有实现
d.通过代码“Animalan=newAnimal();”可以创建一个Animal对象
22.在c#中,关于继承和接口,以下说法正确的是()(单选)
a.c#允许许多接口实现,也允许多重继承
b.c#允许多接口实现,但不允许多重继承
c.c#不允许多接口实现,但允许多重继承
d.c#不允许多重接口实现,也不允许多重继承
23)在C#中,已知下列代码的运行结果是“老虎吃动物”,请问在空白处1和空白处2
分别应该填写的代码是()
PublicclassAnimal
{
Public空白处1voidEat()
{
Consone.WriteLine(“我要吃”);
}
}
PublicclassTiger:
Animal
{
Public空白处2voidEat()
{
Consone.WriteLine(“老虎吃动物”);
}
PubliccalssTest
{
StaticvoidMain()
{
Animalan=newTiger();
an.Eat;
}
}
}
a)Virtual,new
b)override,virtual
c)virtual,override
d)new,virtual
24)在C#中,下列关于抽象类和接口的说法,正确的是)()(选择一项)
a)在抽象类中,所以的方法都是抽象方法
b)继承自抽象类的子类必须实现起父类(抽象类)中的所以抽象方法
c)在接口中,可以有方法实现,在抽象类中不能有方法实现
d)一个类可以从多个接口继承,也可以从多个抽象类继承
25)关于以下C#代码的说法正确的是()
PublicabstractclassAnimal{
PublicabstractvoidEat();
}
PublicclassTiger:
Animal{
PublicoverridevoidEat(){
Console.WriteLine(“老虎吃动物”);
}
}
PublicclassTigress:
Tiger{
Staticvoidmain(){
Tigresstiger=newTigress();
Tiger.Eat();
}
}
a)代码正确,但没有输出
b)代码正确,并且输出为”老虎吃动物”;
c)代码错误,因为Tigress类没有实现抽象基类Animal中的抽象方法
d)代码错误,因为抽象基类Animal的Eat方法没有实现
26)在c#中某程序员定义了一个IDataBase接口,以及实现该接口的类CDataBase,下列关于该段代码说法正确的是()(选择一项)
publicinterfaceIDataBase
{
voidOpenTable(stringtableName);
voidUpDataTable(stringtableName);
}
publicclassCDataBase:
IDataBase
{
publicvoidOpenTable(stringtableName)
{
Console.WriteLine("打开数据表");
}
publicvoidUpdataTable(stringtableName)
{
Console.WriteLine("更新数据表");
}
staticvoidMain()
{
CDataBasedb=newCDataBase();
db.OpenTable("Customers");
}
}
a)该段代码错误,因为在定义接口时,接口中的方法没有提供实现
b)该段代码错误,因为接口中声明的方法不是公有的,应此在CDataBase类中不能访问接口中的方法
c)该段代码正确,同时由于客户没有调用UpdataTable方法,可以把CDataTable类中的UpdataTable去掉,代码仍然正确
d)该段代码正确,但是如果在IDataBase接口中声明一个方法voidExecute(stringsql);则必须在CDataBase中实现该方法
27.C#中下列代码运行结果是()(选择一项)
publicclassStudent{
publicvirtualvoidExam(){
Console.WriteLine("学生都要考试");
}
}
publicclassUndergraduate:
Student{
publicnewvoidExam(){
base.Exam();
Console.WriteLine("大学生有选择考试科目的权利");
}
}
publicclassTest{
staticvoidMain(){
Studentstu=newUndergraduate();
stu.Exam();
}
}
a)学生都要考试
b)大学生有选择考试科目的权利
c)大学生都要考试
大学生有选择考试科目的权利
d)学生都要考试
学生都要考试
28)c#中下列代码的运行结果是()(选择一项)
structStudent{
publicintage;
publicstringname;
publicStudent(intage,stringname){
this.age=age;
this.name=name;
}
}
publicclassTest{
staticvoidMian(){
Studentstu1=newStudent(18,"小方");
Studentstu2=newStudent(24,"小刚");
stu2=stu1;
stu1.age=30;
stu1.name="小燕";
Console.WriteLine(stu2.age);
Console.WriteLine(st2.name);
}
}
a)18小方
b)18小燕
c)30小燕
d)30小方
29)在C#中,下列()关键字用于重写基类的虚拟方法。
(选择一项)
a)override
b)new
c)base
d)virtual
委托和事件
C#面向对象编程-委托和事件
1.阅读以下C#代码
Namespace tevent
{
public delegate void notify5();
class eventTest
{
public void Raise5(int I)
{
if(I%3==1) Got5();
}
public event notify5 Got5;
}
class Handlers
{
public static void Method1()
{
Console.WriteLine("时间处理完成");
}
}
class class10
{
static void Main(String[] args)
{
eventTest eObj=new eventTest();
eObj.Got5+=new notify5(Handlers.Method1);
for(int cnt=0;cnt<5;cnt++)
{
int y=cnt*2+1; eObj.Raise5(y);
}
Console.WriteLine(); }
}
代码允许的结果为()。
A)控制台窗口不能出任何信息。
B)在控制台窗口输出“时间处理完成”1次
C)在控制台窗口输出“时间处理完成”2次
D)在控制台窗口输出“时间处理完成”5次
2.声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是()
A. void myCallBack(int x)
B. int receive(int num)
C. string receive(int x)
D.不确定的
3.C#中,关于事件的定义正确的是()。
a)private event OnClick();
b)private event OnClick;
c)public delegate void Click();public event Click void OnClick();
d)public delegate void Click();public event Click OnClick
4. 在C#中,下列代码的运行结果是().
Public delegate void BuyTicketDelegate(string num);
Public class Student
{
Public event BuyTicketDelegate btEvent;
Public Student(string num)
{
btEvent+= new BuyTicketDelegate(this.BuyTicket);
}
Public void ShowNum(string num)
{
btEvent(num);
}
Private void BuyTicket(string num)
{
Console.WriteLine(“我要买”+num+”次车票”);
}
}
Static void Main()
{
Console.WriteLine(“创建学生对象”);
Student stu = new Student(“TI”);
Console.WriteLine(“创建完毕”);
Stu.ShowNum(“TI”);
}
a) 创建学生对象 创建完毕
b) 创建学生对象 我要买TI次车票 创建完毕
c) 创建学生对象 创建完毕 我要买TI次车票
d) 我要买TI次车票 创建学生对象 创建完毕
C#面向对象编程-封装
1.C#语言使用()来引入名称空间。
a)Import
b)Using
c)Include
d)Lib
2.在.NET中,以下关于命名空间的描述,正确的是().(选择一项)
a)命名空间不可以进行嵌套
b)在一个.cs文件中,只能存在一个命名空间
c)使用private修饰的命名空间,其内部的类也不允许访问
d)命名空间使得代码更加有条理、结构更清晰
3.在C#类中()选一项
a)允许有多个相同名称的构造函数
b)允许有多个不同名称的构造函数
c)至少要有一个构造函数
d)只能有一个构造函数
4.在C#中,可以直接在名称空间内声明如下类型,除了()
A)数组
B)接口
C)结构
D)委托
5.C#程序中的类myClass中的成员变量var1如下:
publicclassmyClass{…privateintvar1;…
则可以访问var1的有()。
(选择一项)
a)myClass中包含的类
b)myClass的继承类
c)myClass的父类
d)和myClass在同一命名空间下的类
6.下列关于类方法的声明,正确的是()(选择两项)
a)方法定义类所许可的行动
b)从一个类创建的所有对象可以使用同一组属性和方法
c)每个方法应该有一个参数
d)如果在不同类中定义了类似的操作,刚他们的行为不应该是类似的
7.析构函数的语法是()
semester(){//析构函数的实现}
A.对
B.错
8.C#类中的构造函数的特点是()选一项
a)一个类中,只能有一个构造函数
b)构造函数的名称与类名一样
c)构造函数在对象销毁时自动执行
d)要求构造函数至少有两个参数
9.针对以下C#代码
UsingSystem;
PublicclassTeacher
{
PublicstringteacherName;
Publicstri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 习题