第8章习题答案
更新时间:2023-11-24 10:51:01 阅读量: 教育文库 文档下载
- 绝世小仙医 第8章推荐度:
- 相关推荐
第八章 多态
1.单选题 (1).下列关于运算符重载的描述中,( D )是正确的。
(A) 可以改变参与运算的操作数个数 (B) 可以改变运算符原来的优先级 (C) 可以改变运算符原来的结合性 (D)不能改变原运算符的语义 (2).下列函数中,不能重载运算符的函数是( b )。
(A) 成员函数 (B) 构造函数 (C)普通函数 (D) 友员函数 (3).要求用成员函数重载的运算符是( A )。
(A) = (B) == (C) <= (D) ++ (4).要求用友员函数重载的运算符是( C )。
(A) = (B) [] (C) << (D)() (5).在C++中,要实现动态联编,必须使用(D)调用虚函数。
(A)类名
(B) 派生类指针
(C) 对象名
(D) 基类指针
(6).下列函数中,不能说明为虚函数的是( C )。
(A) 私有成员函数
(B) 公有成员函数
(C) 构造函数
(D) 析构函数
(7).在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( A )。
(A)相同
(B) 不同
(C) 相容
(D)部分相同
(8).C++中,根据(D)识别类层次中不同类定义的虚函数版本。
(A) 参数个数
(B) 参数类型
(C) 函数名
(D) this指针类型
(9).虚析构函数的作用是(C)。
(A) 虚基类必须定义虚析构函数 (C)
(B) 类对象作用域结束时释放资源 (D) 无意义
delete动态对象时释放资源
(10).下面函数原型中,( B )声明了fun为纯虚函数。
(A)void fun()=0;(B) virtual void fun()=0; (C)virtual void fun(); (D) virtual void fun(){ }; (11).若一个类中含有纯虚函数,则该类称为(C)。
(A) 基类
(B) 纯基类
(C) 抽象类
(D) 派生类
(12).假设Aclass为抽象类,下列正确的说明语句是(B)。
(A)Aclassfun(int ) ; (B) Aclass* p ; (C)int fun( Aclass ) ;(D) AclassObj ;
2.在C++中,使用类体系依靠什么机制实现程序运行时的多态?
【解答】
在C++中,基类指针可以指向派生类对象,以及基类中拥有虚函数,是支持多态性的前提。程序通过用同一个基类指针访问不同派生类的虚函数重载版本实现程序运行时的多态。C++的虚特性负责自动地在程序运行时把基类指针的关联类型转换成当前指向对象的派生类类型。
另外,抽象类机制提供了软件抽象和可扩展性的手段,实现运行时的多态性。
3.如果一个类的虚函数被声明为私有成员函数,会有语法错误吗?当它作为基类时,可以在应用类体系时实现动态联编吗?请你验证一下。 【解答】
没有语法错误。但在应用类体系时无法实现动态编联和多态。因为私有成员函数只在类内可见,在类外无法调用,无法在类外通过基类指针实现多态。
程序略。 4.虚函数和纯虚函数的区别是什么? 【解答】
虚函数定义时冠以关键字virtual,本身有实现代码,作用是引导基类指针根据指向对象调用类体系中不同重载版本函数。
纯虚函数是指在说明时代码“为0”的虚函数,即纯虚函数本身并没有实现代码,必须通过它的派生类定义实现版本。 5.阅读下列程序,写出运行结果。
#include
T() { a = 0; b = 0; c = 0; } T( int i, int j, int k ) { a = i; b =j; c = k; }
void get( int &i, int &j, int &k ) { i = a; j = b; k = c; } T operator* ( T obj ); private:
int a , b , c; };
T T::operator* ( T obj ) { T tempobj;
tempobj.a = a * obj.a; tempobj.b = b * obj.b; tempobj.c = c * obj.c; return tempobj; }
int main()
{ T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3; int a , b , c;
obj3 = obj1 * obj2; obj3.get( a, b, c );
cout<<\
<<\ (obj2*obj3).get( a, b, c ); cout<<\
<<\} 【解答】
( obj1 * obj2 ): a = 5 b = 10 c = 15 ( obj2 * obj3 ): a = 25 b = 50 c = 75 6.阅读下列程序,写出运行结果。
#include
Vector(){ }
Vector(int i,int j) { x = i ; y = j ;
}
friend Vector operator+ ( Vector v1, Vector v2 ) { Vector tempVector ;
tempVector.x = v1.x + v2.x ; tempVector.y = v1.y + v2.y ; return tempVector ; }
void display()
{ cout << \ private:
int x , y ; };
int main()
{ Vector v1( 1, 2 ), v2( 3, 4 ), v3 ; cout << \ v1.display() ; cout << \ v2.display() ; v3 = v1 + v2 ;
cout << \ v3.display() ; } 【解答】
v1 = ( 1, 2 ) v2 = ( 3, 4 )
v3 = v1 + v2 = ( 4, 6 )
7.阅读下列程序,写出运行结果。
#include
Bclass( int i, int j ) { x = i; y = j; } virtual int fun() { return 0 ; } protected: int x, y ; };
class Iclass:public Bclass { public :
Iclass(int i, int j, int k):Bclass(i, j) { z = k; } int fun() { return ( x + y + z ) / 3; } private : int z ; };
int main()
{ Iclass obj( 2, 4, 10 ); Bclass p1 = obj;
cout << p1.fun() << endl; Bclass &p2 = obj ;
cout << p2.fun() << endl;
cout << p2.Bclass :: fun() << endl; Bclass *p3 = &obj;
cout << p3 -> fun() << endl; } 【解答】
0 5 0 5
8.阅读下列程序,写出运行结果。
#include
virtual void getxy( int i,int j = 0 ) { x = i; y = j; } virtual void fun() = 0 ; protected: int x , y; } ;
class A : public Base { public:
void fun()
{ cout<<\};
class B : public Base { public: void fun()
{ cout << \ cout << \ } } ;
int main() { Base * pb; A obj1; B obj2; pb = &obj1;
pb -> getxy( 10 ); pb -> fun(); pb = &obj2;
pb -> getxy( 100, 20 ); pb -> fun(); } 【解答】
x = 10 y = x*x = 100 x=100 y=20 y=x/y=5
9.分别使用成员函数和友员函数编写程序重载运算符“+”,使该运算符能实现两个字符串的连接。
【解答】
(1) 使用成员函数 #include
s(){ *str = '\\0'; } s( char *pstr )
{ strcpy( str,pstr );
}
char *gets() { return str;
}
s operator+( s obj ); private:
char str[10];
正在阅读:
第8章习题答案11-24
石油烃裂解生产低分子烯烃原理11-23
福建省永春一中、培元、季延、石光中学四校2018届高三文综(地理部分)上学期第二次联考试题 - 图文01-01
深夜一个人心情日记11-21
红旗团委答辩最终定稿10-01
严阵以待造句02-11
c++教学大纲11-18
袁方《社会学研究方法教程》09最新版04-11
喝酒红脸01-04
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 习题
- 答案
- CNKI检索作业
- 2017-2018学年北师大版英语(一起)六年级上册期末试卷
- 基于投资组合的对冲策略
- 《庄子与惠子游于濠梁之上》教学设计
- 人教(PEP)六年级英语下册 小升初代词、数词复习 - 图文
- 河北省邢台市2017-2018学年高二第二学期第三次月考地理试卷 - 图文
- 计算机毕业设计论文 - 基于ASP - 婴幼早期教育网站系统开发论文
- 思科交换机安全配置(包括AAA、端口安全、ARP安全、DHCP侦听、日志审计流量限制) - 图文
- 射线检测复习题(第2章含答案)
- 生理学习期末复习题(答案另附)
- 2013大气环境复习思考题
- 线阵CCD特性测试实验 - 图文
- 单片机原理复习提纲1含有自己书写的答案
- 刍议证券市场中的投资者保护理论
- 音乐学院2019年硕士学位研究生招生目录
- 有机化学题库选择题4001-4100
- 10-11高数B(1)期末试卷Ad
- 20级综合地质学试题A
- 学生人事档案管理系统(毕业设计)
- 2016-2022年中国马铃薯淀粉产业竞争现状及十三五未来前景分析报告