继承和多态习题(选择简答)
- 格式:doc
- 大小:1011.00 KB
- 文档页数:4
第七章继承多态一、选择题:1、分析:class A {A() { }}class B extends A { //系统自动生成的构造方法和类的访问权限一样}哪两种说法是正确的? ( )A:类B的构造方法是public的. B:类B的构造方法包含对this()的调用. C:类B的构造方法没有参数. D:类B的构造方法包含对super()的调用.2、运行结果是:()class Base {Base() { System.out.print("Base"); }}public class Alpha extends Base {public static void main( String[] args ) {new Alpha();new Base();}}A: Base B: BaseBase C: 编译失败. D: 没有输出. E: 运行时异常. 3. 程序的运行结果是?()A: 编译失败. B: hello from a C: hello from bD: hello from b E: hello from ahello from a hello from b4. 运行结果是:()class TestSuper {TestSuper(int i) { }}class TestSub extends TestSuper{ }class TestAll {public static void main (String [] args) {new TestSub();}}A: 编译失败. B: 程序运行没有异常.C: 第7行抛出异常. D: 第2行抛出异常.5. 程序的运行结果是?()A: 0 B: 1 C: 2 D: 编译失败.6. 对于语句"B is a D" 和"B has a C",一下哪两种说法是正确的? ( ) A:D是B. B:B是D. C:D是C. D:B是C. E:D继承B.F:B 继承D.7. 运行结果是?()A: 1 B: 2 C: 第8行编译失败. D: 第14行编译失败.8. 分析:public class ConstOver {public ConstOver(int x, int y, int z) {}}哪两个是对ConstOver 的构造方法的重载? ( )A:ConstOver() { } B:protected int ConstOver() { }C:private ConstOver(int z, int y, byte x) { }D:public Object ConstOver(int x, int y, int z) { }E:public void ConstOver(byte x, byte y, byte z) { }9. 运行结果是?()A: 4,4 B: 4,5 C: 5,4 D: 5,5 E: 编译失败.10. 分析:public class X {public X aMethod() { return this;}}1) public class Y extends X {2)3) }在第2行可以插入哪两项? ( )A:public void aMethod() { } B:private void aMethod() { }C:public void aMethod(String s) { } D:private Y aMethod() { return null; } E:public X aMethod() { return new Y(); }11. 运行结果是?()A: 4,4 B: 4,5 C: 5,4 D: 5,5 E: 编译失败.12. 以下哪两个重载了方法setVar()? ( )public class MethodOver {public void setVar(int a, int b, float c) {}}A:private void setVar(int a, float c, int b) { } B:public int setVar(int a, float c, int b) {return a;}C:protected void setVar(int a, int b, float c) { } D:public int setVar(int a, int b, float c) {return a;}E:protected float setVar(int a, int b, float c) {return c;}13. 分析:1) class BaseClass {2) private float x = 1.0f;3) protected void setVar(float f) { x = f; }4) }5) class SubClass extends BaseClass {6) private float x = 2.0f;7) // insert code here8) }在第7行插入哪两个覆盖了方法setVar()? ( )A:void setVar(float f) { x = f; } B:public void setVar(int f) { x = f; } C:public void setVar(float f) { x = f; } D:public double setVar(float f){ return f; }E:public final void setVar(float f) { x = f; } F:protected float setVar() { x = 3.0f; return 3.0f; }14. 运行结果是?( )A: 1 B: 2 C: 运行时异常. D: 第8行编译错误. E: 第14行编译错误.15. 分析:class A {protected int method1(int a, int b) { return 0; }}在A的子类中,以下哪两个方法是合法的? ( )A:public int method1(int a, int b) { return 0; } B:private int method1(int a, long b) { return 0; }C:private int method1(int a, int b) { return 0; } D:public short method1(int a, int b) { return 0; }E:static protected int method1(int a, int b) { return 0; }16. 分析:1) public abstract class Test {2) public abstract void methodA();3)4) public abstract void methodB()5) {6) System.out.println("Hello");7) }8) }哪两种改法,可以使程序通过编译? ( )A:给方法methodA()加方法体C:在Test的声明中去掉abstractB:用";"替换第5-7行D:在方法methodA()的声明中去掉abstract E: 在方法methodB()的声明中去掉abstract17. 运行结果是:()1) abstract class AbstractIt {2) abstract float getFloat();3) }4) public class AbstractTest extends AbstractIt {5) private float f1 = 1.0f;6) private float getFloat() { return f1; }7) }A: 编译成功. B: 运行时异常. C: 第2行编译失败. D: 第6行编译失败.18. 在接口中哪两个方法的声明是合法的? ( )A:void method1(); B:public void method2(); C:static public void method5();D:protected void method3(); E:final public void method4();19. 分析:1) public interface Foo {2) int k = 4;3) }哪三项与第2行等价? ( )A:final int k = 4; B:public int k = 4; C:static int k = 4;D:abstract int k = 4; E:volatile int k = 4; F:protected int k = 4;20. 分析:interface Inter { }class A implements Inter { }class B extends A {B() {A[] arr = new A[10];boolean b1 = this instanceof Inter;boolean b2 = arr instanceof Object;System.out.println("b1 = " + b1 + ", b2 = " + b2);}}创建B的对象时会输出?( )A: 编译失败. B: b1 = true, b2 = true C: b1 = true, b2 = falseD: b1 = false, b2 = true E: b1 = false, b2 = false21. 哪一个能通过编译?()A: new Animal().soundOff(); B: Lion l = Alpha1.get("meat eater");C: Elephant e = new Alpha1(); D: new Alpha1().get("veggie").soundOff();22. 分析:class Passenger { }class Engine { }interface TransportVehicle {void loadPassengers();}interface Helicopter extends TransportVehicle {int flyIt( String direction );}abstract class JetStream implements Helicopter { }哪种说法是正确的?()A: TransportVehicle has a Passenger. B: 类Engine在类JetStream中.C: 接口TransportVehicle可以形成多态的基础.D: 继承JetStream的非抽象类可以随意声明方法loadPassengers().23. 哪三个是"is a" 关系? ( )A:public class X { } B:public interface Shape { }public class Y extends X { } public interface Rectangle extends Shape{ }C:public interface Color { } D:public class Species { }public class Shape { private Color color; } public class Animal { private Species species; }E:public class Person { } F:interface Component { }public class Employee { class Container implementsComponent {public Employee(Person person) { } private Component[] children;} }24. 运行结果是:()public interface Test {int frood = 42;}class TestImpl implements Test {private static int frood;public static void main(String[] args) {System.out.println(++frood);}}A: 0 B: 1 C: 42 D: 43 E: 编译失败. F: 运行时异常.25. 运行结果是?()A: 5 B: 10 C: 编译失败. D: 运行时异常.26. 运行结果是:()1) public class Test {2) public static void main(String args[]) {3) class Foo {4) public int i = 3;5) }6) Object o = (Object)new Foo();7) Foo foo = (Foo)o;8) System.out.println("i = " + foo.i);9) }10) }A: i = 3 C: 第6行抛出ClassCastException异常.B: 编译失败. D: 第7行抛出ClassCastException异常.27. 分析:String s = "abcde";Object ob = (Object)s;if (ob.equals(s)) {System.out.println("AAAA");} else {System.out.println("BBBB");}if (s.equals(ob)) {System.out.println("CCCC");} else {System.out.println("DDDD");}输出哪两行? ( )A:AAAA B:BBBB C:CCCC D:DDDD二、简答题1. 简述类与类之间的关系2. 简述继承的基本概念及继承的过程3. 简述方法重写以及方法重载与方法重写的区别4. 简述super关键字的用法5. 简述重写equals方法的步骤6. 简述instanceof关键字的用法7. 简述接口和抽象类的区别8. 简述什么是多态三、编程题1. 设计一个学生类Student,包括的属性有姓名name,年龄age,学位degree。
java二级试题及答案一、选择题1.下列哪个选项用于创建一个类的实例?A. newB. thisC. finalD. void2.以下哪个关键字用于定义一个类的方法可以被子类重写?A. publicB. finalC. staticD. abstract3.以下哪个关键字用于定义一个类的成员变量可以被子类直接访问?A. privateB. protectedC. staticD. transient4.下列哪个选项是Java的基本数据类型?A. StringB. IntegerC. BooleanD. Double5.以下哪个选项是Java中的循环结构?A. forB. ifC. switchD. try二、填空题1. 声明一个整型变量并将其初始化为10:int num = _________ ;2. 定义一个常量并赋值为3.14:final double PI = _________ ;3. 定义一个字符串变量,并将其初始化为空串:String str =_________ ;4. 声明一个布尔变量并将其初始化为真:boolean flag = _________ ;5. 将两个整数相加并将结果赋值给一个整型变量:int sum =_________ + _________ ;三、编程题1. 编写一个Java程序,实现输入一个整数n,并输出1到n之间所有偶数的和。
示例输入:10示例输出:302. 编写一个Java程序,实现输入一个字符串,判断该字符串是否是回文串(正序和反序读都一样)。
示例输入:radar示例输出:是回文串3. 编写一个Java程序,实现输入一个整数n,并输出斐波那契数列的前n项。
示例输入:5示例输出:0 1 1 2 3四、简答题1. 什么是Java的面向对象特性?举例说明面向对象编程的好处。
2. Java中的继承和多态的概念分别是什么?它们如何实现面向对象的特性?3. Java中的异常处理机制是什么?说明try-catch-finally语句的作用和使用方法。
C++习题3(继承和多态)C++习题3(继承和多态)一、选择题1、在C++中,类与类之间的继承关系具有( C )A)自反性 B)对称性 C)传递性 D)反对称性2、在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( B )A)受限制 B)保持不变 C)受保护 D)不受保护3、按解释中的要求在下列程序划线处填入的正确语句是:( C )#include class Base{public:void fun(){cout<<"Base::fun"<<=""> fun()cout<<"Derived::fun"<fun();4、在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( C )A)受限制 B)保持不变 C)受保护 D)不受保护5、在哪种派生方式中,派生类可以访问基类中的protected 成员(B )A)public和private B)public、protected和private C)protected和private D)仅protected6、当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)A)public成员 B)private成员 C)protected成员 D)友元7、不论派生类以何种方法继承基类,都不能使用基类的(B )A)public成员 B)private成员 C)protected成员 D)public成员和protected成员8下面叙述错误的是(S )。
A )基类的protected成员在派生类中仍然是protected的 B)基类的protected成员在public派生类中仍然是protected的C)基类的protected成员在private派生类中是private的 D)基类的protected 成员不能被派生类的对象访问9、下列说法中错误的是(S )。
继承练习题一、选择题1. 关于Java中的继承说法正确的是:A. 子类可以继承父类的私有成员B. 子类可以继承父类的protected成员C. 子类可以继承父类的静态成员D. 子类不能继承父类的构造方法2. 在Java中,下列哪个关键字用于声明继承?A. extendsB. implementsC. interfaceD. class3. 如果一个类声明为final,那么它:A. 可以被继承B. 不能被继承C. 可以被实例化D. 不能被实例化4. 关于Java中的方法重写,下列说法正确的是:A. 重写的方法必须具有相同的返回类型B. 重写的方法可以有不同的访问权限C. 重写的方法可以抛出新的异常D. 重写的方法必须抛出与父类方法相同的异常5. 在Java中,下列哪个操作是不合法的?A. 子类覆盖父类的静态方法B. 子类覆盖父类的非静态方法C. 子类覆盖父类的私有方法D. 子类覆盖父类的protected方法二、填空题6. 在Java中,如果一个类没有明确指定继承哪个类,那么它默认继承______类。
7. 在Java中,使用______关键字可以实现对父类方法的重写。
8. 如果子类要调用父类的构造方法,可以使用______关键字。
9. 在Java中,子类可以______父类的成员变量和方法。
10. 在Java中,如果子类和父类都有相同的成员变量,那么在子类中访问这个变量时,默认访问的是______。
三、判断题11. 在Java中,一个类只能继承一个类,但可以实现多个接口。
()12. 子类可以继承父类的私有成员变量,但不能继承私有方法。
()13. 在Java中,子类必须显式调用父类的构造方法。
()14. 如果父类的构造方法有参数,那么子类的构造方法也必须有相同参数的构造方法。
()15. 在Java中,子类可以覆盖父类的静态方法。
()四、编程题16. 定义一个父类`Animal`,包含一个方法`makeSound()`。
1、下列对基类和派生类关系的描述中,错误的是_________。
A)派生类是基类的具体化B)派生类是基类的子集C)派生类是基类定义的延续D)派生类是基类的组合2、继承具有_________ ,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
A)规律性B)传递性C)重复性D)多样性3、下面_________的叙述不符合赋值兼容规则。
A)派生类的对象可以赋值给基类的对象B)基类的对象可以赋值给派生类的对象C)派生类的对象可以初始化基类的引用D)派生类的对象的地址可以赋值给指向基类的指针5、下面叙述错误的是_________。
A)派生类可以使用private派生B)对基类成员的访问必须是无二义性的C)基类成员的访问能力在派生类中维持不变D)赋值兼容规则也适用于多继承的组合6、下列说法中错误的是_________。
A)公有继承时基类中的public成员在派生类中仍是public的B)公有继承时基类中的private成员在派生类中仍是private的C)私有继承时基类中的public成员在派生类中是private的D)保护继承时基类中的public成员在派生类中是protected的7、C++的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过_________派生出新的类。
A)复用B)继承C)封装D)引用8、下列关于虚基类的描述中,错误的是_________。
A)虚基类子对象的初始化由最派生类完成B)虚基类子对象的初始化次数与虚基类下面的派生类个数有关C)设置虚基类的目的是消除二义性D)带有虚基类的多层派生类构造函数的成员初始化列表中都要列出对虚基类构造函数的调用9、派生类的构造函数的成员初始化列表中,不能包含_________。
A)基类的构造函数B)派生类中子对象的初始化C)基类中子对象的初始化D)派生类中一般数据成员的初始化10、C++类体系中,不能被派生类继承的有_________。
Java题库——Chapter11继承和多态1)Analyze the following code:public class Test {public static void main(String[ ] args) {B b = new B();b.m(5);System.out.println("i is " + b.i);}}class A {int i;public void m(int i) {this.i = i;}}class B extends A {public void m(String s) {}}A)The program has a compilation error, because m is overridden with a different signature in B.B)The method m is not overridden in B. B inherits the method m from A and defines an overloaded method m in B.C)The program has a runtime error on b.i, because i is not accessible from b.D)The program has a compilation error, because b.m(5) cannot be invoked since the method m(int) is hidden in B. B中没有重写⽅法m。
B继承了A中的⽅法m,并在B中定义了⼀个重载的⽅法m。
2)Analyze the following code.// Program 1public class Test {public static void main(String[ ] args) {Object a1 = new A();Object a2 = new A();System.out.println(((A)a1).equals((A)a2));}}class A {int x;public boolean equals(A a) {return this.x == a.x;}}// Program 2public class Test {public static void main(String[ ] args) {A a1 = new A();A a2 = new A();System.out.println(a1.equals(a2));}}class A {int x;public boolean equals(A a) {return this.x == a.x;}}A)Program 1 displays true and Program 2 displays trueB)Program 1 displays false and Program 2 displays trueC)Program 1 displays false and Program 2 displays falseD)Program 1 displays true and Program 2 displays false3)Invoking ________ removes all elements in an ArrayList x. 3) _______A)x.clear() B)x.delete() C)x.remove() D)x.empty() E)x.clean()4)Analyze the following code:Cylinder cy = new Cylinder(1, 1);Circle c = cy; 4) _______A)The code has a runtime error. B)The code has a compile error. C)The code is fine.5)Which of the following statements are true? (Choose all that apply.) 5) _______A)Overloading a method is to provide more than one method with the same name but with different signatures to distinguish them.B)A private method cannot be overridden. If a method defined in a subclass is private in its superclass, the two methods are completely unrelated.C)It is a compilation error if two methods differ only in return type in the same class.D)A static method cannot be overridden. If a static method defined in the superclass is redefined in a subclass, the method defined in the superclass is hidden.E)To override a method, the method must be defined in the subclass using the same signature and compatible return type as in its superclass.1、重载⼀个⽅法是提供多个具有相同名称但具有不同签名的⽅法来区分它们。
一.extends和super的使用和方法的重写1.定义一个人的类(属性有名字,年龄。
写一个能输出各个属性值的方法showInfo()),定义一个学生类(属性有性别),学生继承人类要求:(1)父类的属性赋值用构造方法来实现(分别用有参数构造方法和无参数构造方法实现)(2)子类的属性也用构造方法来赋值。
(3)在子类中重写父类的showInfo()方法(4)声明学生类的对象,调用学生的显示信息的方法。
2定义Animal父类,含有属性name,sex,age,方法sleep,run,编写一个子类Person,继承Animal类,然后调用父类的属性和方法二.1、试编写三个具有继承关系的类,A、B、C(B继承A,C继承B)。
要求A中包含方法a1()、a2(),B类中的方法b1()访问了a1()和a2(),C类中的方法c1()访问了a1()、a2()、b1()。
提示:(a1(),a2(),b1(),c1()这些方法体除了实现题目要求之外,其余内容可以任意编写。
)2、请编码实现动物世界的继承关系:动物(Animal)具有行为:吃(eat)、睡觉(sleep)动物包括:兔子(Rabbit),老虎(Tiger)这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。
请通过继承实现以上需求,并编写测试类AnimalTest进行测试。
3、父类 Person 包含like()方法子类 Son 重写父类方法并打印输出4、(选做)父类Employee 属性:name、sex ,带一个构造方法Employee(String n, char s)子类 Worker继承自Employee 属性:char category;法()可以调用父类的所有非私有方法B) super()可以调用父类的所有非私有构造函数C) super.属性可以调用父类的所有非私有属性D) this和super关键字可以出现在同一个构造函数中8.以下关于final关键字说法错误的是(A,C)(两项)A) final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性B) final修饰的类肯定不能被继承C) final修饰的方法不能被重载D) final修饰的变量不允许被再次赋值9.访问修饰符作用范围由大到小是(D)A) private-default-protected-publicB) public-default-protected-privateC) private-protected-default-publicD) public-protected-default-private10.以下(D)不是Object类的方法A) clone()B) finalize()C) toString()D) hasNext()11.多态的表现形式有(A)A) 重写B) 抽象C) 继承D) 封装12.以下对重载描述错误的是(B)A) 方法重载只能发生在一个类的内部B) 构造方法不能重载C) 重载要求方法名相同,参数列表不同D) 方法的返回值类型不是区分方法重载的条件13.以下(D)添加到ComputerBook中不会出错class Book{protected int getPrice(){return 30;}}public class ComputerBook extends Book{}A) protected float getPrice(){}B) protected int getPrice(int page){}C) int getPrice(){}D) public int getPrice(){return 10;}14.以下对抽象类的描述正确的是(C)A) 抽象类没有构造方法B) 抽象类必须提供抽象方法C) 有抽象方法的类一定是抽象类D) 抽象类可以通过new关键字直接实例化15.以下对接口描述错误的有(D)A) 接口没有提供构造方法B) 接口中的方法默认使用public、abstract修饰C) 接口中的属性默认使用public、static、final修饰D) 接口不允许多继承16.以下代码,描述正确的有(A)interface IDemo{public static final String name;1void print();2public void getInfo();3}abstract class Person implements IDemo{4public void print(){}}A) 第1行错误,没有给变量赋值B) 第2行错误,方法没有修饰符C) 第4行错误,没有实现接口的全部方法D) 第3行错误,没有方法的实现17.接口和抽象类描述正确的有(B,C)(两项)A) 抽象类没有构造函数B) 接口没有构造函数C) 抽象类不允许多继承D) 接口中的方法可以有方法体18.以下描述错误的有(C)A) abstract 可以修饰类、接口、方法B) abstract修饰的类主要用于被继承C) abstract 可以修饰变量D) abstract修饰的类,其子类也可以是abstract修饰的19.以下描述正确的有(B)A) 方法的重写应用在一个类的内部B) 方法的重载与返回值类型无关C) 构造方法不能重载D) 构造方法可以重写20.以下程序运行结果是(A)public class Test extends Father{private String name=”test”;public static void main(String[] args){Test test = new Test();}}class Father{private String name=”father”;public String getName() {return name;}}A) fatherB) testC) 编译出错D) 运行出错,无输出21.以下对异常的描述不正确的有(C)A) 异常分为Error和ExceptionB) Throwable是所有异常类的父类C) Exception是所有异常类父类D) Exception包括RuntimeException和RuntimeException之外的异常22.在try-catch-finally语句块中,以下可以单独与finally一起使用的是(B)A) catchB) tryC) throwsD) throw23.下面代码运行结果是(B)public class Demo{public int add(int a,int b){try{return a+b;}catch(Exception e){语句块”);}finally{语句块”);}return 0;}public static void main(String[] args){Demo demo = new Demo();和是:”+(9,34));}}A) 编译异常B) finally语句块和是:43C) 和是:43 finally语句块D) catch语句块和是:4324.以下描述不正确的有(D)A) try块不可以省略B) 可以使用多重catch块C) finally块可以省略D) catch块和finally块可以同时省略25.以下对自定义异常描述正确的是(C)A) 自定义异常必须继承ExceptionB) 自定义异常可以继承自ErrorC) 自定义异常可以更加明确定位异常出错的位置和给出详细出错信息D) 程序中已经提供了丰富的异常类,使用自定义异常没有意义26.以下程序运行结果是(D)public class Test {public int div(int a, int b) {try {return a / b;}catch(Exception e){}catch(NullPointerException e){}catch (ArithmeticException e) {} finally {}return 0;}public static void main(String[] args) {Test demo = new Test();商是:” + (9, 0));}}A) Exception finally 商是:0B) ArithmeticException finally 商是:0C) finally商是:0D) 编译报错27. 以下对TCP和UDP描述正确的是(D)A) TCP不能提供数据的可靠性B) UDP能够保证数据库的可靠性C) TCP数据传输效率高于UDPD) UDP数据传输效率高于TCP28. 在Java中,下面对于构造函数的描述正确的是(D)。
C++程序设计语言习题及实验指导第8章继承与多态性习题参考答案8.3 习题8.3.1 选择题8.3.2 填空题1.(1) a、b、c、x、y、z (2) b、y (3) c、z (4) a、x (5) b、c、x、y、z(6) b、y (7) y (8) b、c、z (9) a、x (10) b、c、x、y、z (11) y(12) y (13) z (14) a、b、c、x (15) b、c、x、y、z (16) y 2.私有3.抽象4.虚基5.(1) 基类(2) 对象6.(1) 静态(2) 编译(3) 虚函数7.(1) 2 1 (2) 0 58.(1) 100 200 300 30 (2) 10 100 (3) 20 200 9.(1) 5 10 (2) end. (3) 20 1010.(1) classA classB (2) end. (3) ~classB ~classA 11.(1) 10 (2) build B (3) build C (4) release A12.(1) class B (2) class C (3) class D (4) 513.(1) 5 5 (2) 20 2014.(1) 10 (2) 10 2015.(1) 1 (2) 3 (3) 5 (4) 100 1016.(1) B::f() (2) B::fun() (3) A::f() (4) B::fun()17.(1) 姓名陈涛年薪6.8万元。
(2) 姓名李原(3) 姓名李原月工资4000元18.(1) 110 (2) 222019.(1) protected 或public (2) Base1(s1),Base2(s2) 或Base2(s2),Base1(s1)(3) Base1::str (4) test.print()20.(1) virtual void show()=0 (2) C(int,int,int) (注:参数可有任一名称)(3) b1(y) (4) &t8.3.3 编程题1.求长方形的面积和长方体的表面积、体积#include<iostream.h>class Rectangle{protected:float L; // 长方形的长float W; // 长方形的宽float area; // 长方形的面积public:Rectangle(float L1,float W1){L=L1;W=W1;}void function() { area=L*W; }void show(){cout<<"长为"<<L<<",宽为"<<W<<"的长方形面积为"<<area<<endl;}};class Cuboid:public Rectangle{float H; // 长方体的高float volume; // 长方体的体积public:Cuboid(float a,float b,float c):Rectangle(a,b){ H=c; }void function() { area=(L*W+L*H+W*H)*2; }void fun() { volume=L*W*H; }void show(){cout<<"长为"<<L<<",宽为"<<W<<",高为"<<H<<"的长方体表面积为"<<area<<",体积为"<<volume<<endl;}};void main(){Rectangle r(2,3); r.function(); r.show();Cuboid c(2,3,4); c.function(); c.fun(); c.show();}2.产生并输出圆桌信息#include<iostream.h>#include<string.h>class Circle{protected:double radius;double area;public:Circle(double r) { radius=r; }};class Table{protected:double height;public:Table(double h) { height=h; }};class Roundtable:public Table,public Circle{char *color;public:Roundtable(double h,double r,char c[]):Circle(r),Table(h) {color=new char[strlen(c)+1];strcpy (color, c);}void fun() { area=3.14*radius*radius; }void show(){cout<<"高度:"<<height<<"米"<<endl;cout<<"面积:"<<area<<"平方米"<<endl;cout<<"颜色:"<<color<<endl;}~Roundtable() { delete []color; }};void main(){Roundtable rt(0.75,1.1,"黑色");rt.fun(); rt.show();}3.计算企业的经营税#include<iostream.h>#include<string.h>class Tax{protected:char name[50]; // 企业名称double income; // 经营收入double taxes; // 税金public:Tax(char *n,double in){strcpy(name,n);income=in;}virtual void fun()=0;void show(){cout<<name<<"的经营收入为"<<income<<"万元,税金为"<<taxes<<"万元\n";}};class Service:public Tax{public:Service(char *n,double in):Tax(n,in){ }void fun(){taxes=income*5/100;}};class Fabrication:public Tax{public:Fabrication(char *n,double in):Tax(n,in){ }void fun(){taxes=income*17/100;}};void print(Tax &t) { t.fun(); t.show(); }void main(){char name[50];int income;cout<<"请输入服务性企业名称:"; cin>>name;cout<<"请输入经营收入(万元):"; cin>>income;Service s(name,income); print(s);cout<<"请输入生产性企业名称:"; cin>>name;cout<<"请输入经营收入(万元):"; cin>>income;Fabrication f(name,income); print(f);}4.把原始体育成绩转换为等第#include<iostream.h>class Sports{protected:int item; // 项目char name[20]; // 姓名double score; // 原始成绩char grade[10]; // 评定等第public:Sports(int i,char *n){item=i;strcpy(name,n);cout<<"请输入原始成绩:";cin>>score;}void show(){cout<<name<<"的"<<item<<"米成绩为"<<score<<"秒,等第为"<<grade<<endl;}virtual void change()=0;};class Run50:public Sports{public:Run50(int i,char *n):Sports(i,n){ }void change(){if(score<=6.50)strcpy(grade,"优秀");else if(score<=6.70)strcpy(grade,"良好");else if(score<=7.10)strcpy(grade,"及格");else strcpy(grade,"不及格");}};class Run100:public Sports{public:Run100(int i,char *n):Sports(i,n){ }void change(){if(score<=13.10)strcpy(grade,"优秀");else if(score<=13.70)strcpy(grade,"良好");else if(score<=14.90)strcpy(grade,"及格");else strcpy(grade,"不及格");}};class Run1000:public Sports{public:Run1000(int i,char *n):Sports(i,n){ }void change(){if(score<=203.00)strcpy(grade,"优秀");else if(score<=213.00)strcpy(grade,"良好");else if(score<=233.00)strcpy(grade,"及格");else strcpy(grade,"不及格");}};class Run1500:public Sports{public:Run1500(int i,char *n):Sports(i,n){ }void change(){if(score<=323.00)strcpy(grade,"优秀");else if(score<=337.00)strcpy(grade,"良好");else if(score<=365.00)strcpy(grade,"及格");else strcpy(grade,"不及格");}};void main(){Sports *s;int it;cout<<"请输入项目(50/100/1000/1500):"; c in>>it;char na[20];cout<<"请输入姓名:"; c in>>na;if(it==50) { Run50 r50(it,na); s=&r50; s->change(); s->show(); }else if(it==100) { Run100 r100(it,na); s=&r100; s->change(); s->show(); }else if(it==1000) { Run1000 r1000(it,na); s=&r1000; s->change(); s->show(); } else if(it==1500) { Run1500 r1500(it,na); s=&r1500; s->change(); s->show(); } else { cout<<"输入项目错误\n"; exit(0); }}8.4 实验指导8.4.1 派生类的定义与使用:设计一个程序求三角函数的值。
第八章 继承与多态习题一. 基本概念与基础知识自测题 8.1 填空题8.1.1 如果类α继承了类β,则类α称为称为 (1) 类,而类β称为称为 (2) 类。
类。
(3) 类的对象可作为的对象可作为 (4) 类的对象处理,反过来不行,因为类的对象处理,反过来不行,因为(5) 。
如果强制转换则要注意要注意(6) 。
答案:(1)基类)基类(2)派生类)派生类(3)派生类)派生类(4)基类)基类(5)派生类有一些新成员)派生类有一些新成员(6)只能派生类强制转换为基类)只能派生类强制转换为基类8.1.2 当用public 继承从基类派生一个类时,基类的public 成员成为派生类的成员成为派生类的(1) 成员,protected 成员成为派生类的成员成为派生类的 (2) 成员,对private 成员是成员是(3) 。
公有派生可以使其类的以使其类的 (4) ,所以公有派生是主流。
,所以公有派生是主流。
答案:(1)public 成员成员(2)protected 成员成员(3)不可访问)不可访问(4)接口不变)接口不变8.1.3 利用继承能够实现利用继承能够实现 (1) 。
这种实现缩短了程序开发的时间,VC++中的中的(2) 很好地体现了这一点。
好地体现了这一点。
答案:(1)代码的复用)代码的复用(2)MFC 编程编程8.1.4 一个派生类只有一个直接基类的情况称为一个派生类只有一个直接基类的情况称为(1) ,而有多个直接基类的情况称为(2) 。
继承体现了类的。
继承体现了类的(3) 概念,这在MFC 中得到了很好表现,MFC 中只采用了用了(4) 。
答案:(1)单继承)单继承(2)多重继承)多重继承(3)层次)层次(4)单继承)单继承8.1.5 C++中多态性包括两种多态性:中多态性包括两种多态性: (1) 和 (2) 。
前者是通过。
前者是通过(3) 实现的,而后者是通过而后者是通过 (4) 和 (5) 来实现的。
一:选择题1. 下面有关析构函数的说法中,不正确的是( )A.析构函数中不可包含Return语句B.一个类中只能有一个析构函数C.用户可定义有参析构函数D.析构函数在对象被撤销时,被自动调用2.派生类不可以访问基类的( )A.Public成员B.Private成员C.Protected成员D.Protected internel成员3.有关sealed修饰符,描述正确的是( )A.密封类可以被继承B.abstract修饰符可以和sealed修饰符一起使用C.密封类不能实例化D.使用sealed修饰符可保证此类不能被派生4.若想从派生类中访问基类的成员,可以使用( )A.this关键字B.me关键字C.base关键字D.override关键字5.下面有关派生类的描述中,不正确的是( )A.派生类可以继承基类的构造函数B.派生类可以隐藏和重载基类的成员C.派生类不能访问基类的私有成员D.派生类只能有一个直接基类6.C#中,继承具有( ),即A类派生B类,B类又派生C类,则C类会继承B类中的成员和A类中的成员。
A.传递性B.多态性C.单继承D.多继承7.下面有关静态方法的描述中,错误的是( )A.静态方法属于类,不属于实例B.静态方法可以直接用类名调用C.静态方法中,可以定义非静态的局部变量D.静态方法中,可以访问实例方法8.下面关于运算符重载的描述中,错误的是( )A.重载的运算符仍然保持其原来的操作数个数、优先级和结合性不变B.可以重载双目运算符,不可以重载单目运算符C.运算符重载函数必须是public的D.运算符重载函数必须是static的9.下面对派生类和基类的关系的描述中,不正确的是( )A.派生类的方法可以和基类的方法同名B.派生类是对基类的进一步扩充C.派生类也可作另一个派生类的基类D.派生类继承基类的公有、保护和私有成员10.下面关于虚方法的描述中,正确的是()A.虚方法可以实现静态联编B.在一个程序中,不能有同名的虚方法C.虚方法必须是类的静态成员D.在派生类中重写虚方法,必须加上override修饰符二、判断:class A{private int x;public A(int i){x = i;}}class B : A{private int y;public B(){y = 0;}public B(int i):base(i){y = i;}public B(int i, int j) : base(i){y = j;}}三:程序填充:1. 以下程序的输出结果是:Base class…..Derived class…请在空白处填入适当内客,把程序补充完整。