第7章繼承和接口設(shè)計(jì) 習(xí)題【教學(xué)試題】

上傳人:8** 文檔編號(hào):117786869 上傳時(shí)間:2022-07-09 格式:DOC 頁數(shù):20 大?。?34.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
第7章繼承和接口設(shè)計(jì) 習(xí)題【教學(xué)試題】_第1頁
第1頁 / 共20頁
第7章繼承和接口設(shè)計(jì) 習(xí)題【教學(xué)試題】_第2頁
第2頁 / 共20頁

本資源只提供2頁預(yù)覽,全部文檔請(qǐng)下載后查看!喜歡就下載吧,查找使用更方便

10 積分

下載資源

資源描述:

《第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 f=new List(); B) List f=new List (); C) List f=new List (); D) List f=new List; 34. 以下關(guān)于泛型的敘述中錯(cuò)誤的是【 】。 A) 泛型是通過參數(shù)化類型來實(shí)現(xiàn)在同一份代碼上操作多種數(shù)據(jù)類型 B) 泛型編程是一種編程范式,其特點(diǎn)是參數(shù)化類型, C) 泛型類型和普通類型的區(qū)別在于泛型類型與一組類型參數(shù)或類型變量關(guān)聯(lián)

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 //聲明棧泛型類 { int maxsize; //棧中元素最多個(gè)數(shù) T[] data; //存放棧中T類型的元素

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 s = new Stack(); //定義整數(shù)棧 s.Push(1); s.Push(3); s.Push(2); Console.Write("整

39、數(shù)棧出棧次序:"); while (!s.StackEmpty()) //棧不空時(shí)出棧元素 { s.Pop(ref e); Console.Write("{0} ", e); } Console.WriteLine(); string e1 = ""; Stack s1 = new Stack(); //定義字符串棧 s1.Push("Mary"); s1.

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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲