文档详情

第3课 实验八 多态性.doc

发布:2017-06-14约8.1千字共13页下载文档
文本预览下载声明
实验八 多态性 1.填空 (1)关键字 operator 引入了重载运算符函数定义。 (2)不能重载的C++运算符是 类属关系运算符. 、 成员指针运算符.* 、 作用域分辨符:: 、 sizeof运算符 和 三目运算符?: 。 (3)通过重载运算符不能修改运算符的 操作对象个数 、优先级 、和 结合性 。 2、选择题,先选择,然后解释选择的理由: (1) 运算符重载时不需要保持的性质是:( A ) A)操作数类型 B)操作数个数 C)优先级 D)结合性 解释:通过重载运算符不能修改运算符的 操作对象个数 、优先级 、和 结合性 。但其他的可以改变。 (2) 有如下类定义和变量定义: #includeiostream.h class X { int a; void setX (int x) {a=x;} public: void showX() {couta=aendl;} }; class Y: private X{/*类定义省略*/}; class Z: public X{/*类定义省略*/}; Y objY; Z objZ; 下列语句中正确的是:( D ) A) objY.setX(3); B) objY.showX(); C) objZ.setX(4); D) objZ.showX(); 解释:对于A,C,无论何种继承方式,派生类均不可直接访问基类的私有成员。对于B,由于Y继承X时是私有继承,派生类Y不可直接访问X中的成员。 (3) 有如下类定义: #includeiostream.h class A { int xx; public: A():xx(0) {coutA;} A(int n):xx(n) {coutB;} }; class B:public A { int yy; public: B():yy(0){coutyy;} B(int n):A(n+1),yy(n) {coutyy;} B(int m,int n):A(m),yy(n) {coutyy;} }; 下列选项中,输出结果为A0的语句是:( D ) A)B y1(0,0); B)B y2(1); C)B y3(0); D)B y4; 解释:输出结果分别为 B0 B1 B0 A0 (4)有如下程序: class A { public: A() { f();} ~A() { ...... } virtual void f(); void g(){f()}; }; class B: public A { public: ~B() { ...... } void f(); void g(); }; B b; A *p; p = b; 没有调用到A::f的语句是:( A ) A) p-f(); B) p-A::f(); C) p = new A; D) p = new B; 解释:分别调用,A)调用B::f;B)调用A::f();C)调用A::f();D)调用B::B(),A::A(),A::f (5)己知表达式a++中的“++”是作为友元函数重载的运算符,则与a++等效的运算符函数调用形式为:( C) A)a .orerator++(1); B)operator++(a); C)operator++(a, 0); D)a.operator++(a, 0 ); 解释:由于是作为友元函数重载,根据由友元函数重载的规则,可排除ABD。 (6)有如下程序: #include iostream.h class Base{ public: virtual void fn(int x){ coutBase::fn()endl; } }; class Sub : public Base{ public: virtual void fn(double x){ coutSub::fn(); } }; void test(Base b){ b.fn(2); } int main() { Base a; test(a); Sub b; test(b); } 执行的结果是:( A ) A) Base::fn() Base::fn() B) Base::fn() Sub::fn() C) Sub::fn() Base::fn() D) Sub::fn() Sub::fn() 解释:由于派生类的fn函数参数类型为doub
显示全部
相似文档