第7章繼承和接口設(shè)計(jì) 習(xí)題【教學(xué)試題】
《第7章繼承和接口設(shè)計(jì) 習(xí)題【教學(xué)試題】》由會(huì)員分享,可在線閱讀,更多相關(guān)《第7章繼承和接口設(shè)計(jì) 習(xí)題【教學(xué)試題】(20頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 第7章 繼承和接口設(shè)計(jì) 一.選擇題 1.在C#中,一個(gè)類【 】。 A) 可以繼承多個(gè)類 B) 可以實(shí)現(xiàn)多個(gè)接口 C) 在一個(gè)程序中只能有一個(gè)子類 D) 只能實(shí)現(xiàn)一個(gè)接口 2.【 】關(guān)鍵字用于在C#中從派生類中訪問基類的成員。 A) new B) super C) this D) base 3.在定義類時(shí),若希望類的某個(gè)方法能夠在派生類中進(jìn)一步改進(jìn),以滿足派生類的不同需要,則應(yīng)將該方法聲明為【 】。 A) new B) public C) virtual D) override 4.在C#中,在派生類中對(duì)
2、基類的虛方法進(jìn)行重寫,要求在派生類的聲明中使用【 】。 A) new B) public C) virtual D) override 5.已知類B是由類A繼承而來,類A中有一個(gè)名為M的非虛方法,現(xiàn)在希望在類B中也定義一個(gè)名為M的方法,且兩方法的參數(shù)個(gè)數(shù)和類型完全相同,若希望編譯時(shí)不出現(xiàn)警告信息,則在類B中聲明該方法時(shí),應(yīng)使用【 】關(guān)鍵字。 A) static B) new C) override D) virtual 6.假設(shè)類B繼承了類A,下列說法錯(cuò)誤的是【 】。 A) 類B中的成員可以訪問類A中的公有成員 B) 類B中的成
3、員可以訪問類A中的保護(hù)成員 C) 類B中的成員可以訪問類A中的私有成員 D) 類B中的成員可以訪問類A中的靜態(tài)成員 7.關(guān)于多態(tài),下列說法正確的是【 】。 A) 多態(tài)實(shí)際上就是重載,它們本質(zhì)上是以一樣的 B) 多態(tài)可以分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。前者的特點(diǎn)是在編譯時(shí)就能確定要調(diào)用成員方法的哪個(gè)版本,后者則是在程序運(yùn)行時(shí)才能確定要調(diào)用成員方法的哪個(gè)版本。 C) 編譯時(shí)多態(tài)是在程序運(yùn)行時(shí)才能確定要調(diào)用成員方法的哪個(gè)版本,而運(yùn)行時(shí)多態(tài)在編譯時(shí)就能確定要調(diào)用成員方法的哪個(gè)版本。 D) 多態(tài)和重載是兩個(gè)完全不同的概念,前者是通過定義虛方法和重寫虛方法來實(shí)現(xiàn),后者是通過對(duì)同一函
4、數(shù)名編寫多個(gè)不同的實(shí)現(xiàn)代碼來實(shí)現(xiàn)。 8.下列關(guān)于接口的說法,正確的是【 】。 A) 接口中定義的方法都必須是虛方法 B) 接口中定義的方法可以編寫其實(shí)現(xiàn)代碼 C) 繼承接口的類可提供被繼承接口中部分成員的實(shí)現(xiàn)代碼 D) 接口中的所有方法都必須在其派生類中得到實(shí)現(xiàn)。 9.下列關(guān)于虛方法的描述中,正確的是【 】。 A) 虛方法能在程序執(zhí)行時(shí)動(dòng)態(tài)確定要調(diào)用的方法,因此比非虛方法更靈活 B) 在定義虛方法時(shí),基類和派生類的方法定義語句中都要帶上virtual修飾符 C) 在重寫基類的虛方法時(shí),為消除隱藏基類成員的警告,需要帶上new修飾符 D) 在重寫基類的虛方法時(shí),需
5、要同時(shí)帶上virtual和override修飾符 10.在C#中,以下關(guān)于抽象類的敘述中錯(cuò)誤的是【 】。 A) 抽象類可以包含抽象方法 B) 含有抽象方法的類一定是抽象類 C) 抽象類不能被實(shí)例化 D) 抽象類可以是密封類 11.在C#中,以下關(guān)于抽象類和接口的敘述中正確的是【 】。 A) 抽象類可以包含非抽象方法,而接口不包含任何方法的實(shí)現(xiàn) B) 抽象類可以被實(shí)例化,而接口不能被實(shí)例化 C) 抽象類不能被實(shí)例化,而接口可以被實(shí)例化 D) 抽象類能夠被繼承,而接口不能被繼承 12.在C#中,以下關(guān)于抽象類和接口的敘述中正確的是【 】。 A)
6、在抽象類中,所有的方法都是抽象方法 B) 繼承自抽象類的子類必須實(shí)現(xiàn)其父類(抽象類)中的所有抽象方法 C) 在接口的定義中可以有方法實(shí)現(xiàn),在抽象類的定義中不能有方法實(shí)現(xiàn) D) 一個(gè)類可以從多個(gè)接口繼承,也可以從多個(gè)抽象類繼承 13.以下類和接口的區(qū)別中正確的是【 】。 A) 類可以繼承而接口不可以 B) 類不可以繼承而接口可以 C) 類可以多繼承而接口不可以 D) 類不可以多繼承而接口可以 14.下列方法定義中,【 】是抽象方法。 A) static void func(){ } B) virtual void func(){ } C
7、) abstract void func(){ } D) overridel void func(){ } 15.下列關(guān)于接口的說法,錯(cuò)誤的是【 】。 A) 一個(gè)類可以有多個(gè)基類和多個(gè)基接口 B) 抽象類和接口都不能被實(shí)例化 C) 抽象類自身可以定義成員,而接口不可以 D) 類不可以多重繼承,而接口可以。 16.已知類Base、Derived的定義如下: class Base { public void Hello() { System.Console.Write(“Hello in Base!”); } } class Derived:
8、Base { public new void Hello() { System.Console.Write(“Hello in Derived!”); } } 則下列語句段在控制臺(tái)中的輸出結(jié)果是【 】。 Derived x=new Derived(); x.Hello(); A) Hello in Base! B) Hello in Base! Hello in Derived! C) Hello in Derived! D) Hello in Derived!Hello in Base! 17.關(guān)于繼承,下列說法正確的是【 】。
9、 A) 子類將繼承父類所有的成員 B) 子類將繼承父類的非私有成員 C) 子類只繼承父類public成員 D) 子類只繼承父類的方法,而不繼承屬性 18.下列是抽象類的聲明的是【 】。 A) abstract class figure{ } B) class abstract figure{ } C) seald class figure{ } D) static class figure{ } 19.a(chǎn)bstract修飾的方法是抽象方法,抽象方法只有聲明而無主體,且【 】。 A) 只能存在于抽象類中
10、 B) 可以在任何類中 C) 只能在接口中 D) 只能在密封類中 20.重寫一個(gè)基類的虛方法時(shí),應(yīng)與原虛方法的方法名相同,并且【 】。 A) 不能改變方法的參數(shù)類型、個(gè)數(shù)和返回值 B) 可以改變方法的參數(shù)類型、個(gè)數(shù)和返回值 C) 可以改變方法的返回值 D) 可以改變方法的參數(shù)類型和個(gè)數(shù) 21.下面有關(guān)繼承的說法中,正確的是【 】。 A) A類和B類均有C類需要的成員,因此可以從A類和B類共同派生出C類 B) 在派生新類時(shí),可以指明是公有派生、私有派生或保護(hù)派生 C) 派生類可以繼承基類中的成員,
11、同時(shí)也繼承基類的父類中的成員 D) 在派生類中,不能添加新的成員,只能繼承基類的成員 22.為了防止從所修飾的類派生出其他類,可以將此類定義為【 】。 A) 抽象類 B) 密封類 C) 靜態(tài)類 D) 私有類 23.若想從派生類中訪問基類的成員,可以使用【 】。 A) this關(guān)鍵字 B) me關(guān)鍵字 C) base關(guān)鍵字 D) override關(guān)鍵字 24.下面有關(guān)派生類的描述中,不正確的是【 】。 A) 派生類可以繼承基類的構(gòu)造函數(shù) B) 派生類可以隱藏和重載基類的成員 C) 派生類不能訪問基類的私有成員 D) 派生
12、類只能有一個(gè)直接基類 25.C#中的多態(tài)不能通過【 】實(shí)現(xiàn)。 A) 接口 B) 抽象類 C) 密封類 D) 虛方法 26.下列程序錯(cuò)誤的原因是【 】。 sealed class SealedClass{ } class Derived:SealedClass{ } A) SealedClass類不能被繼承 B) 沒有Main()入口 C) SealedClass沒有被實(shí)例化 D) 以上皆是 27.下面關(guān)于接口的敘述中,不正確的是【 】。 A) 接口只是由方法、屬性、索引器或事件組成的框架,并沒有描
13、述任何對(duì)象的實(shí)例代碼 B) 接口的所有成員都被自動(dòng)定義為公有的,不可使用訪問修飾符來定義接口成員 C) 類可以通過在類型定義語句中包括冒號(hào)和接口名來表明它正在實(shí)現(xiàn)接口 D) 一個(gè)類只能實(shí)現(xiàn)一個(gè)接口 28.接口可以包含一個(gè)或多個(gè)成員,以下選項(xiàng)中【 】不能包含在接口中。 A) 方法 B) 屬性 C) 事件 D) 常量 29.下列敘述中,正確的是【 】。 A) 接口中可以有虛方法 B) 一個(gè)類可以實(shí)現(xiàn)多個(gè)接口 C) 接口能被實(shí)例化 D) 接口中可以包含已實(shí)現(xiàn)的方法 30. 關(guān)于虛方法實(shí)現(xiàn)多態(tài),下列說法錯(cuò)誤
14、的是【 】。 A) 定義虛方法使用關(guān)鍵字virtual B) 關(guān)鍵字virtual可以與override一起使用 C) 虛方法是實(shí)現(xiàn)多態(tài)的一種應(yīng)用形式 D) 派生類是實(shí)現(xiàn)多態(tài)的一種應(yīng)用形式 31. 以下類MyClass的定義中,【 】是合法的抽象類。 A) abstract class MyClass { public abstract int getCount(); } B) abstract class MyClass { public virtual abstract int getCount(); } C)
15、 abstract class MyClass { private abstract int getCount(); } D) abstract class MyClass { public static abstract int getCount(); } 32. 分析下列程序中類MyClass的定義 class BaseClass { public int i; } class MyClass:BaseClass { public new int i; } 則下列語句在Console 上的輸出為【 】。 MyClass y = new
16、MyClass(); BaseClass x = y; x.i = 100; Console.WriteLine("{0}, {1}",x.i,y.i); A) 0, 0 B) 100, 100 C) 0, 100 D) 100, 0 33. 在C#程序中定義如下IPlay接口,實(shí)現(xiàn)此接口代碼正確的是【 】。 interface IPlay { void Play(); void Show(); } A) class Teacher :Iplay { void Play(){ //省略部分代碼 } void Show0{ //省
17、略部分代碼} B) class Teacher :Iplay { public string Play(){ //省略部分代碼 } public void Show0{ //省略部分代碼} C) class Teacher :Iplay { public void Play(){ //省略部分代碼 } public void Show0{ //省略部分代碼} D) class Teacher :Iplay { public void Play(); public void Show0{ //省略部分代
18、碼}
34. 以下泛型集合聲明中正確的是【 】。
A) List
19、 D) 以上都不對(duì) 二.填空題 1.在C#中有兩種多態(tài)性:編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。編譯時(shí)的多態(tài)性是通過【虛方法和重寫虛方法 】實(shí)現(xiàn)的,運(yùn)行時(shí)的多態(tài)性是通過繼承和【重載/隱藏 】來實(shí)現(xiàn)的。 2.在聲明類時(shí),在類名前使用【abstract】修飾符,則聲明的類只能作為其他類的基類,不能被實(shí)例化。 3.在聲明類時(shí),在類名前使用【 sealed 】修飾符,則聲明的類不能作為其他類的基類,不能再派生新的類。 4. 下列程序的運(yùn)行結(jié)果是【AB 】??疾祛惖睦^承(構(gòu)造函數(shù)是先基類的先構(gòu)造,析構(gòu)函數(shù)是子類先析構(gòu)) class A { public A( ) { Console
20、.WriteLine("A"); } } class B:A { public B() { Console.WriteLine("B"); } } class Program { public static void Main() { B b = new B(); Console.ReadLine(); } } 5. 分析下列程序的運(yùn)行結(jié)果是【 】。考察類的繼承中base的使用 class A { public int x=100; } class B:A { new public int x; public B(
21、int y, int z){ x=y; base.x=z; } public int getx1(){ return base.x; } public int getx2(){ return x; } } class Program { public static void Main() { B b = new B(3, 6); int n = b.getx1(); int m = b.getx2(); Console.WriteLine("m=
22、{0},n={1}", m, n); } } m=3,n=6 6. 分析下列程序的運(yùn)行結(jié)果是【 】??疾祛惖睦^承(隱藏和重寫) abstract class BaseClass { public void MethodA() { Console.WriteLine("BaseClass.MethodA"); } public virtual void MethodB() { Console.WriteLine("BaseClass.MethodB"); } } class Class1 : BaseClass { ne
23、w public void MethodA() { Console.WriteLine("Class1.MethodA"); } public override void MethodB() { Console.WriteLine("Class1.MethodB"); } } class Class2 : Class1 { new public void MethodB() { Console.WriteLine("Class2.MethodB"); } } class MainClass { public static void Mai
24、n(string[] args) { Class2 a = new Class2(); a.MethodA(); a.MethodB(); Console.Read(); } } Class1.MethodA Class2.MethodB 7.下列程序的運(yùn)行結(jié)果是【AA CC DD DD 】。考察類的繼承(隱藏和重寫) class A { public void F1(){ Console.Write("AA "); } public virtual void F2() { Console.Wri
25、te("BB "); } } class B : A { new public void F1(){ Console.Write("CC "); } public override void F2(){ Console.Write("DD "); } } class Test { static void Main() { B b = new B(); A a = b; a.F1(); b.F1(); a.F2(); b.F2(); Console.Read(); } } 8. 閱讀下列程序,程序的輸出結(jié)果是【
26、】??疾祛惖睦^承 public class A { private int speed =10; public int Speed { get { return speed; } set { speed = value; Console.WriteLine("禁止駛?cè)?"); } } } public class B:A { public B() { if(this.Speed>=20) Console.Write ("機(jī)動(dòng)車"); els
27、e Console.Write ("非機(jī)動(dòng)車"); } } class Program { public static void Main() { B b=new B(); b.Speed = 30; } } 非機(jī)動(dòng)車禁止駛?cè)? 9. 閱讀下列程序,程序的輸出結(jié)果是【 】??疾祛惖睦^承 public class Person { private int age = 0; public int Age { get {
28、return age; } set { if(value>=18) Console.Write("成年人"); else Console.Write("未成年人"); age = value; } } } public class People : Person { public People(int age) { Age = age; Console.WriteLine("不得入內(nèi)"); } } class Program { public st
29、atic void Main() { People b = new People (25); Console .WriteLine("你的年齡是:{0}",b.Age); Console.Read(); } } 成年人不得入內(nèi) 你的年齡是:25 10. 閱讀下列程序,程序的輸出結(jié)果是【 】??疾旖涌诘挠成? interface IA { void Hello(); } class Base:IA { public void Hello() { Console.WriteLine("Hello in
30、Base!"); } } class Derived:Base { new public void Hello() { Console.WriteLine("Hello in Derived!"); } } class Program { public static void Main() { Base b=new Base(); Derived d=new Derived (); IA x; b.Hello(); d.Hello(); x=b; x.Hello(); x=
31、d; x.Hello(); Console.Read(); } } Hello in Base! Hello in Derived! Hello in Base! Hello in Base! 11. 閱讀下列程序,程序的輸出結(jié)果是【 】??疾旖涌诘挠成? interface IA { void Hello(); } class Base:IA { public void Hello() { Console.WriteLine("Hello in Base!"); } } class Derived:IA
32、{ new public void Hello() { Console.WriteLine("Hello in Derived!"); } } class Program { public static void Main() { Base b=new Base(); Derived d=new Derived (); IA x; x=b; x.Hello(); x=d; x.Hello(); Console.Read(); } } Hello in Base! Hello in Derived
33、! 12. 閱讀下列程序,程序的輸出結(jié)果是【 】??疾旖涌诘挠成? interface Ia //接口Ia聲明 { double fun1(); //接口成員聲明 int fun2(); //接口成員聲明 } class A //聲明基類A { public int fun2() //隱式實(shí)現(xiàn)接口成員fun2 { return 2; } } class B : A, I
34、a //類B從基類A和接口繼承 { double x; public B(double y) //構(gòu)造函數(shù) { x = y; } public double fun1() //隱式實(shí)現(xiàn)接口成員fun1 { return x; } } class Program { static void Main(string[] args) { B b = new B(2.5);
35、 Console.WriteLine("{0} ", b.fun1());
Console.WriteLine("{0} ", b.fun2());
Console.Read();
}
}
2.5
2
12. 閱讀下列程序,程序的輸出結(jié)果是【 】。考察類的實(shí)現(xiàn)與泛型
class Stack
36、 int top; //棧頂指針 public Stack() //構(gòu)造函數(shù) { maxsize = 10; data = new T[maxsize]; top = -1; } public Stack(int n) //重載構(gòu)造函數(shù) { maxsize = n; data = new T[maxsize]; top = -1; } public bool StackEmpty() //判
37、斷??辗椒? { return top == -1; } public bool Push(T e) //元素e進(jìn)棧方法 { if (top == maxsize - 1) return false; top++; data[top] = e; return true; } public bool Pop(ref T e) //元素出棧方法 { if (top == -1) return false;
38、 e = data[top]; top--;
return true;
}
}
class Program
{ static void Main(string[] args)
{ int e = 0;
Stack
39、數(shù)棧出棧次序:");
while (!s.StackEmpty()) //棧不空時(shí)出棧元素
{ s.Pop(ref e); Console.Write("{0} ", e); }
Console.WriteLine();
string e1 = "";
Stack
40、Push("John"); s1.Push("Simth"); Console.Write("字符串棧出棧次序:"); while (!s1.StackEmpty()) //棧不空時(shí)出棧元素 { s1.Pop(ref e1); Console.Write("{0} ", e1); } Console.ReadLine(); } } 整數(shù)棧出棧次序:2 3 1 字符串棧出棧次序:Simth John Mary 三.改錯(cuò)題 (說明:下列程序中部分下劃線的代
41、碼有錯(cuò)誤,請(qǐng)將有錯(cuò)誤的部分改正過來,并說明原因) 1. class A { public A(int x){ } } class B:A { public B(int x){ } } 答:“public B(int x){ }”應(yīng)改為“public B(int x):base(x){ }”。因?yàn)榛怉中沒有無參數(shù)的構(gòu)造函數(shù)。 2. class A { void A(){ } private A(int x){ } private A(int y){ } } 答:“void A(){ }”應(yīng)改為“A(){}
42、”,因?yàn)闃?gòu)造函數(shù)不能帶任何返回類型修飾符?!皃rivate A(int x){ }”和“private A(int y){ }”實(shí)際上是同一個(gè)構(gòu)造函數(shù),應(yīng)刪除其中一個(gè)。 3. interface I { int x; public void f(int x); void g(int x); int h(int x){ return 1; } } class A:I { public void f(int x){ } public int h(int x){ } } 答:“int x;”應(yīng)予以刪除,因?yàn)榻涌谥胁辉试S
43、存在成員變量?!皃ublic void f(int x);”中的修飾符“public”應(yīng)予以刪除,因?yàn)榻涌诘姆椒ㄇ安辉试S存在任何修飾符;“int h(int x){ return 1; }” 應(yīng)改為“int h(int x);”,因?yàn)椴荒茉诮涌诼暶鞯暮瘮?shù)中編寫實(shí)現(xiàn)代碼;應(yīng)該在類A中添加函數(shù)“void g(int x);”的實(shí)現(xiàn)代碼。 4. class A{ } class B{ } class C: A, B { } 答:必須將“class C:A,B”中的“A”或“B”其中之一去掉,因?yàn)镃#中不允許類進(jìn)行多重繼承。 5. class A { pro
44、tected static void f(){ } protected void g(){ } } class B:A { new public static void f() { } new public void g(){ } public void h() { base.f(); base.g(); f(); g(); } } 答:“base.f();”應(yīng)改為“A.f();”,原因是類A中的方法“f()”是靜態(tài)方法,它不能被實(shí)例化,只能通過類名來訪問。 四.問答題 1.什么是類的繼承?怎樣定義派生類? 繼承是指一個(gè)類可以
45、繼承另一個(gè)類中的相關(guān)成員,被繼承的類稱為基類、超類或父類,繼承而形成的類稱為派生類或子類 利用繼承機(jī)制,新的類可以從已有的類中派生。那些用于派生的類稱為這些特別派生出的類的“基類” 2.簡(jiǎn)述創(chuàng)建派生類時(shí),構(gòu)造函數(shù)的調(diào)用。 先創(chuàng)建基類的構(gòu)造函數(shù),在創(chuàng)建自己的構(gòu)造函數(shù) 3.怎樣定義基類虛方法,并在派生類中重寫基類虛方法? virtual 方法名([參數(shù)列表]) { 語句序列 } override 方法名([參數(shù)列表]) { 語句序列 } 4.抽象方法和虛方法有什么異同? 抽象方法是只有定義、沒有實(shí)際方法體的函數(shù),它只能在抽象函數(shù)中出現(xiàn),并且在子類中必須重
46、寫;虛方法則有自己的函數(shù)體,已經(jīng)提供了函數(shù)實(shí)現(xiàn),但是允許在子類中重寫或覆蓋。 重寫的子類虛函數(shù)就是被覆蓋了。 5.什么是抽象類?它有什么特點(diǎn)?它和接口有何異同? v 在方法聲明中使用abstract修飾符的方法即為抽象方法。 6.什么是方法重載?重載的方法有何特點(diǎn)? 是多態(tài)性的表達(dá) 方法名相同,但是參數(shù)類型和個(gè)數(shù)不同 五.編程題 1. 編寫一個(gè)控制臺(tái)應(yīng)用程序項(xiàng)目,實(shí)現(xiàn)學(xué)生和教師數(shù)據(jù)輸入和顯示功能。學(xué)生類Student有編號(hào)、姓名、班號(hào)和成績(jī)等字段,教師類有編號(hào)、姓名、職稱和部門等字段。要求將編號(hào)、姓名輸入和顯示設(shè)計(jì)成一個(gè)類Person,并作為Student和Teacher的基類
47、。需用相關(guān)數(shù)據(jù)進(jìn)行測(cè)試。 public class Person //人類 { private int no; //編號(hào) private string name; //姓名 public void input() { Console.Write(" 編號(hào):"); no = int.Parse(Console.ReadLine()); Console.Write(" 姓名:"); name = Conso
48、le.ReadLine(); } public void disp() { Console.WriteLine(" 編號(hào):{0}",no); Console.WriteLine(" 姓名:{0}",name); } } public class Student : Person //學(xué)生類 { private string sclass; //班號(hào) private int degree; /
49、/成績(jī) public void input() { base.input(); Console.Write(" 班號(hào):"); sclass = Console.ReadLine(); Console.Write(" 成績(jī):"); degree = int.Parse(Console.ReadLine()); } new public void disp() { base.disp(); Console.Wri
50、teLine(" 班號(hào):{0}",sclass); Console.WriteLine(" 成績(jī):{0}",degree); } } public class Teacher : Person //教師類 { private string prof; //職稱 private string depart; //部門 public void input() { base.input();
51、 Console.Write(" 職稱:"); prof = Console.ReadLine(); Console.Write(" 部門:"); depart = Console.ReadLine(); } new public void disp() { base.disp(); Console.WriteLine(" 職稱:{0}", prof); Console.WriteLine(" 部門:{0}", depart);
52、 } } class Program { static void Main(string[] args) { Student s1 = new Student(); Teacher t1 = new Teacher(); Console.WriteLine("輸入一個(gè)學(xué)生數(shù)據(jù):"); s1.input(); Console.WriteLine("輸入一個(gè)教師數(shù)據(jù):"); t1.input(); Console
53、.WriteLine("顯示一個(gè)學(xué)生數(shù)據(jù):"); s1.disp(); Console.WriteLine("顯示一個(gè)教師數(shù)據(jù):"); t1.disp(); } } 2. 設(shè)計(jì)一個(gè)控制臺(tái)應(yīng)用程序項(xiàng)目b,設(shè)計(jì)一個(gè)普通職工類Employee,其工資為基本工資(1000)加上工齡工資(每年增加30元)。從Employee類派生出一個(gè)本科生類UEmployee,其工資為普通職工算法的1.5倍。并用相關(guān)數(shù)據(jù)進(jìn)行測(cè)試,測(cè)試效果圖如下圖所示。 控制臺(tái)應(yīng)用程序項(xiàng)目b的執(zhí)行結(jié)果 public class Employee //普通職
54、工類 { private double bsalary= 1000; //基本工資 private double psalary; //實(shí)際工資 private int n; //工作年數(shù) public int pn { get { return n; } set { n = value; } } public double compsalary() //計(jì)算普通員工工資
55、 { Console.Write("工作年數(shù):"); pn = int.Parse(Console.ReadLine()); psalary = bsalary+30*pn; return psalary; } } public class UEmployee : Employee //本科生職工類 { new public double compsalary() { return 1.5 * psalary();
56、 } } class Program { static void Main(string[] args) { Console.WriteLine("普通職工:"); Employee emp1 = new Employee(); Console.WriteLine("該普通職工工資:{0}", psalary()); Console.WriteLine("本科生職工:"); UEmployee emp2 = new UEmploy
57、ee(); Console.WriteLine("該本科生職工工資:{0}", psalary()); } } 說明:本題需采用繼承方法,用虛函數(shù)等均可。 3.定義一個(gè)Shape抽象類,在該類中定義兩個(gè)抽象方法GetArea和GetPerim。然后以Shape抽象類作為基類派生出Rectangle和Circle類,在這兩個(gè)類中分別對(duì)GetArea和GetPerim方法進(jìn)行重寫,實(shí)現(xiàn)求特定形狀的面積和周長(zhǎng)。 抽象類方法實(shí)現(xiàn) public abstract class Shape { public abstract do
58、uble GetArea(); public abstract double GetPerim(); } class Rectangle : Shape //派生出來的Rectangle類 { private double Width; //矩形的寬度 private double Length; //矩形的長(zhǎng)度 public Rectangle(double a, double b) //構(gòu)造函數(shù) { Width = a;
59、 Length = b; } public override double GetArea() //重載的求面積方法 { return (Width * Length); } public override double GetPerim() //重載的求周長(zhǎng)方法 { return (2 * (Length + Width)); } } class Circle : Shape //派生出的Circle類
60、{ private double Radius; public Circle(double r) //構(gòu)造函數(shù) { Radius = r; } public override double GetArea() //重載的求面積方法 { return (Math.PI * Radius * Radius); } public override double GetPerim() //重載的求周長(zhǎng)方法 { return (2
61、* Math.PI * Radius); } } 接口方法實(shí)現(xiàn) public interface Shape { double GetArea(); double GetPerim(); } class Rectangle : Shape //派生出來的Rectangle類 { public double Width; //矩形的寬度 public double Length; //矩形的長(zhǎng)度 public Rectang
62、le(double a, double b) //構(gòu)造函數(shù) { Width = a; Length = b; } public double GetArea() //重載的求面積方法 { return (Width * Length); } public double GetPerim() //重載的求周長(zhǎng)方法 { return (2 * (Length + Width)); } } cl
63、ass Circle : Shape //派生出的Circle類 { public double Radius; public Circle(double r) //構(gòu)造函數(shù) { Radius = r; } public double GetArea() //重載的求面積方法 { return (Math.PI * Radius * Radius); } public double GetPerim(
64、) //重載的求周長(zhǎng)方法 { return (2 * Math.PI * Radius); } } 4.設(shè)計(jì)一個(gè)抽象類Calculate(計(jì)算),該類包含OptA、OptB、OptC三個(gè)double類型的字段,包含一個(gè)帶有兩個(gè)double類型參數(shù)的構(gòu)造函數(shù)(用于給字段OptA、OptB賦值)和一個(gè)名為SqrtForSum的抽象方法,該方法帶有三個(gè)double類型參數(shù)、返回值類型為double型。再設(shè)計(jì)一個(gè)繼承于Calculate的派生類Cal,該類包含一個(gè)帶有三個(gè)double類型參數(shù)的構(gòu)造函數(shù),并重寫SqrtForSum方法用于計(jì)算三數(shù)和
65、的平方根。 public abstract class Calculate { protected double OptA, OptB, OptC; public Calculate(double a, double b) { OptA = a; OptB = b; } public abstract double SqrtForSum(double a,double b,double c); } class Cal:Calculate { public Ca
66、l(double a, double b, double c): base(a, b) { OptC = c; } public override double SqrtForSum(double a, double b, double c) { double sum; sum = a + b + c; return Math .Sqrt (sum ); } } class Program { static void Main(string[] args) { double a, b, c,sum; a = Convert.ToDouble(Console.ReadLine()); b = Convert.ToDouble(Console.ReadLine()); c = Conv
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 火力發(fā)電廠各設(shè)備的主要作用大全
- 3.高壓電工考試判斷練習(xí)題含答案
- 企業(yè)電氣防爆知識(shí)
- 13 低壓電工電工作業(yè)模擬考試題庫試卷含答案
- 電氣設(shè)備維修的十項(xiàng)原則
- 2.電氣電纜與直流模擬考試復(fù)習(xí)題含答案
- 電氣節(jié)能措施總結(jié)
- 2.電氣電機(jī)(一)模擬考試復(fù)習(xí)題含答案
- 接地電阻測(cè)量原理與測(cè)量方法
- 3.高壓電工作業(yè)模擬考試題庫試卷含答案
- 礦山維修電工安全技術(shù)操作規(guī)程
- 電工基礎(chǔ)口訣總結(jié)
- 3.某電廠值長(zhǎng)面試題含答案解析
- 電工基礎(chǔ)知識(shí)順口溜
- 配電系統(tǒng)詳解