第五章 课后习题(P139-140)
二、选择题(至少选一个,可以多选)
(1)用关键字( A )标记的函数被称为虚函数。
A. virtual B. private C. public D. protected
(2)在C++中,要实现动态联编,必须使用( D )调用虚函数。
A. 类名 B. 派生类指针 C. 对象名 D. 基类指针
(3)下列函数中,可以作为虚函数的是( BD )。
A. 普通函数 B. 非静态成员函数 C. 构造函数 D. 析构函数
(4)在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( B )。
A. 不同 B. 相同 C. 相容 D. 部分相同
(5)使用虚函数保证了在通过一个基类类型的指针(含引用)调用一个虚函数时,C++系统对该调用进行( A ),但是,在通过一个对象访问一个虚函数时,使用( B )。
A. 动态联编 B. 静态联编 C. 动态编译 D. 静态编译
(6)下面函数原型声明中,( B )声明的func()为纯虚函数。
A. void func()=0; B. virtual void func()=0;
C. vitual void func(); D. virtual void func(){};
(7)若一个类中含有纯虚函数,则该类称为( C )。
A. 基类 B. 虚基类 C. 抽象类 D. 派生类
(9)下面描述中,( BD )是正确的。
A. 虚函数是没有实现的函数 B. 纯虚函数的实现是在派生类中定义
三、判断题
(1)抽象类中只能有一个纯虚数。 ( 错 )
(2)构造函数和析构函数都不能说明为虚基数。 ( 错 )
(3)程序中可以说明抽象类的指针或引用。 ( 对 )
(4)一个类中的虚基数说明不仅对基类中的同名函数有影响,而且对它的派生类中的重定义的函数也有影响 ( 错 )
(5)在构造函数和析构函数中调用虚函数时,采用动态联编,即它们所调用的虚函数时是在派生类中重定义的虚函数 ( 错 )
(6)因为没有为纯虚函数定义代码,所以在构造函数和析构函数内均不可调用纯虚函数。 ( 对 )
四、简答题
(1)什么叫做多态性?在C++中是如何实现多态的?
(2)虚函数与一般重载函数有哪些区别?
(1)使用虚函数编写程序求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看作由圆继承而来,所以可以定义圆类Circle作为基类。在Circle类中定义一个数据成员radius和两个虚函数area()和volume()。由Circle 类派生Sphere类和Column类。在派生类中对虚函数area()和volume()重新定义,分别求球体和圆柱体的体积及表面积。
- <span style="font-family:SimSun;font-size:16px;">#include <iostream>
- #include <iomanip>
- using std::fixed;
- using std::setprecision;
- using namespace std;
- const double PI=3.14159265;
- class Circle
- { public:
- Circle(double r) {radius=r;}
- virtual double area() {return 0.0;}
- virtual double volume() {return 0.0;}
- protected:
- double radius;
- };
- class Sphere:public Circle
- { public:
- Sphere(double r):Circle(r){ }
- double area() {return 4.0*PI*radius*radius;}
- double volume()
- { return 4.0/3.0*PI*radius*radius*radius;}
- };
- class Column:public Circle
- { public:
- Column(double r,double h):Circle(r){height=h;}
- double area()
- { return 2.0*PI*radius*(height+radius );}
- double volume()
- { return PI*radius*radius*height;}
- private:
- double height;
- };
- int main()
- {
- Sphere s(3.0);
- Column c(4.0,5.0);
- cout <<fixed<<setprecision(2)<< "球的体积 = " << s.volume() << endl;
- cout << fixed<<setprecision(2)<<"球的表面积 = " << s.area() << endl;
- cout << fixed<<setprecision(2)<<"圆柱体的体积 = " << c.volume() << endl;
- cout <<fixed<<setprecision(2)<< "圆柱体的表面积 = " << c.area() << endl;
- return 0;
- }</span>
- <span style="font-family:SimSun;font-size:16px;">#include<iostream>
- #include<iomanip>
- using std::fixed;
- using std::setprecision;
- const double PI=3.1415;
- using namespace std;
- class square
- {
- public:
- square(float l){length=l;}
- virtual float area(){return length*length;}
- private:
- float length;
- };
- class triangle
- {
- public:
- triangle(float b,float h){base=b;height=h;}
- virtual float area(){return base*height/2.0;}
- private:
- float base,height;
- };
- class Circle
- {
- public:
- Circle(double r){radius=r;}
- virtual double area(){return PI*radius*radius;}
- private:
- double radius;
- };
- int main()
- {
- square s(6.0);
- triangle t(3.0,4.0);
- Circle c(5.0);
- cout<<fixed<<setprecision(2)<<"正方形的面积="<<s.area()<<endl;
- cout<<fixed<<setprecision(2)<<"三角形的面积="<<t.area()<<endl;
- cout<<fixed<<setprecision(2)<<"圆的表面积="<<c.area()<<endl;
- cout<<fixed<<setprecision(2)<<"各类形状的总面积="<<s.area()+c.area()+t.area()<<endl;
- return 0;
- }</span>
程序输出结果如下:
第五章 课后习题(P139-140)相关推荐
- c语言定义int 输出4386,大学C语言第五章课后习题参考程序
考试,二级C语言备考 第五章课后习题参考程序 5.1 编写程序,求100-2000之间所有3的倍数之和,当和大于1000时结束. (参考答案:900) #include int main() { in ...
- 疯狂java讲义第五章课后习题答案
1.编写一个学生类,提供name.age.gender.phone.address.cmail成员变量,且为每个成员变量提供 seter.geter方法.为学生类提供默认的构造器和带所有成员变量的构造 ...
- HTML+CSS+JavaScript网页制作案例教程-黑马程序员-第五章课后习题(课程介绍专栏效果)
黑马程序员编著的教材 HTML+CSS+JavaScript网页制作案例教程 第五章:"课程介绍"专栏-课后习题参考代码 题目原型: 请结合给出的素材,运用列表标记,超链接标记以 ...
- 《Python语言程序设计》王恺 机械工业出版社 第五章课后习题答案
第五章 序列.集合和字典 5.8 课后习题 (1)Python 中,通过列表中的 index 方法可以根据指定值查找第一个匹配的列表元素 的位置. (2)Python 中,通过列表中的 insert ...
- 《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第五章课后习题参考答案
第5章 总详细设计 课后习题参考答案 一.填空题 (1)结构化程序设计方法的要点是使用 顺序.选择和循环 结构,自顶向下.逐步求精地构造算法或程序 (2)为了产生结构化的流程图,应由三种基本控制 ...
- python第五章课后题答案_python程序设计基础(嵩天)第五章课后习题部分答案
原博文 2019-10-13 13:50 − 第五章p1515.2:实现isodd()函数,参数为整数,如果参数为奇数,返回true,否则返回false.def isodd(s): x=eval(s) ...
- 材料力学Ⅰ(第六版)第五章课后习题答案
第一章 绪论 第二章 拉伸.压缩与剪切 第三章 扭转 第四章 弯曲内力 第五章 弯曲应力 第六章 弯曲变形 第七章 应力和应变分析强度理论 第八章 组合变形 第九章 压杆稳定
- C++语言程序设计第五版 - 郑莉(第五章课后习题)
第5章 数据的共享与保护 5-7定义一个Cat类,拥有静态数据成员 numOfCats,记录Cat的个体数目:静态成员函数getNumOfCats(),读取numOfCats.设计程序测试这个类,体 ...
- 操作系统第五章课后习题答案
第一题 1 ,旋转型设备上信息的优化分布能减少为若干个拍服务的总时间.设磁鼓上分为20 V 个区,每区存放一个记录,磁鼓旋转一周需20 毫秒,读出每个记录平均需用1 毫秒,读出后经2 毫秒处理,再继续 ...
最新文章
- php HASHTABLE 实现
- 数组不能将数值传给int_java数组查找常见情况
- JS检查是否支持Storage
- 【Python】Python办公自动化 | 一键给PDF文件加密,超方便
- LiveVideoStack Meet | 苏州站全记录
- 如何关闭Windows10任务栏里的应用图标
- 项目中的富文本编辑器该如何选择?
- leetcode - 226. 翻转二叉树
- pytorch torch.nn.Embedding
- [Hive]Hive合并小文件
- 多功能pdf编辑器PDF Office Max for mac
- ngx_lua中的协程调度(六)之ngx_http_lua_run_posted_thread
- unity打开htc vive 的前置摄像头 和 实现增强现实效果
- Oracle分析函数之Rank函数
- eeprom和编程器固件 k2_斐讯K1K2新版固件v22.4.xx.xx简单刷机教程
- 数学建模国奖论文2019-C-C308分析
- 【Java】菜鸟教程个人Java学习笔记
- 微信小程序的选择收货地址、新增地址、地址管理等模块的总结(1)
- MD5校验文件完整性
- 计算某天是某年的第多少天