C面向对象编程习题Word文件下载.docx
《C面向对象编程习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《C面向对象编程习题Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
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+"
(重写的方法)"
;
classDefaultInitializerApp
publicstaticvoidMain()
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
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.()可以看作类的模具。
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.BaseClass
B.BassClassClass1
C.Class1
D.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{
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)
更新数据表"
staticvoidMain()
CDataBasedb=newCDataBase();
db.OpenTable("
Customers"
a)该段代码错误,因为在定义接口时,接口中的方法没有提供实现
b)该段代码错误,因为接口中声明的方法不是公有的,应此在CDataBase类中不能访问接口中的方法
c)该段代码正确,同时由于客户没有调用UpdataTable方法,可以把CDataTable类中的UpdataTable去掉,代码仍然正确
d)该段代码正确,但是如果在IDataBase接口中声明一个方法voidExecute(stringsql);
则必须在CDataBase中实现该方法
27.C#中下列代码运行结果是()(选择一项)
publicclassStudent{
publicvirtualvoidExam(){
学生都要考试"
publicclassUndergraduate:
Student{
publicnewvoidExam(){
base.Exam();
大学生有选择考试科目的权利"
publicclassTest{
staticvoidMain(){
Studentstu=newUndergraduate();
stu.Exam();
a)学生都要考试
b)大学生有选择考试科目的权利
c)大学生都要考试
大学生有选择考试科目的权利
d)学生都要考试
学生都要考试
28)c#中下列代码的运行结果是()(选择一项)
structStudent{
publicintage;
publicstringname;
publicStudent(intage,stringname){
this.age=age;
this.name=name;
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
Raise5(int
I)
if(I%3==1)
Got5();
event
notify5
Got5;
Handlers
static
Method1()
Console.WriteLine("
时间处理完成"
}
class10
static
Main(String[]
args)
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
myCallBack(int
x);
则用该委托产生的回调方法的原型应该是()
A.
x)
B.
receive(int
num)
C.
string
D.不确定的
3.C#中,关于事件的定义正确的是()。
a)private
OnClick();
b)private
OnClick;
c)public
Click();
Click
d)public
OnClick
4.
在C#中,下列代码的运行结果是().
Public
BuyTicketDelegate(string
num);
Student
BuyTicketDelegate
btEvent;
Student(string
num)
btEvent+=
new
BuyTicketDelegate(this.BuyTicket);
ShowNum(string
btEvent(num);
Private
BuyTicket(string
Console.WriteLine(“我要买”+num+”次车票”);
Static
Main()
Console.WriteLine(“创建学生对象”);
stu
=
Student(“TI”);
Console.WriteLine(“创建完毕”);
Stu.ShowNum(“TI”);
a)
创建学生对象
创建完毕
b)
我要买TI次车票
创建完毕
c)
d)
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)构造函数在对象销毁时自动执行