面向对象程序设计第五章作业题
更新时间:2023-11-23 17:57:01 阅读量: 教育文库 文档下载
第五章作业题
一.填空题
1. 面向对象程序设计有4个主要特点: ____、 ____ 、____和____。 2. 用来派生新类的类称为_______,而派生出的新类称为它的子类或派生类。
3. “图形”类Shape中定义了纯虚函数CalArea(),“三角形”类Triangle继承了类Shape,
请将Triangle类中的CalArea函数补充完整。 class Shape{ public:
virtual int CalArea()=0; }
class Triangle: public Shape{ public:
Triangle{int s, int h}: side(s),height(h) {} ________________ { return side*height/2 ; } private: int side; int height; };
4. 继承方式包括:____、____、____;如果省略,系统默认为____。
5. 派生类中的成员包括从____和____两大部分。 二.单项选择题
1.下列关于继承方式的描述中,错误的是( )。
A.如果不显式地指定继承方式,缺省的继承方式是私有(private) B.采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C.采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员
D.采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 2. 下列代码声明了3个类 class Person{};
class Student:public Person{}; class Undergraduate:Student{};
下列关于这些类之间关系的描述中,错误的是( )。
A.类Person是类Undergraduate的基类 B.类Undergraduate从类Student公有继承 C.类Student是类Person的派生类 D.类Undergraduate是类Person的派生类 3. 以下关于C++类的说法中,正确的是( )。
A.C++语言的默认访问权限是private
B.C++语言中的类定义,用户一定要自己定义一个构造函数用于实例化类 C.C++语言中的成员函数的实现部分一定要写在类定义外 D.C++语言中的类不能够嵌套定义
4. 下面选项中不属于面向对象程序设计特征的是( )。
A.继承性
B.多态性
C.类比性
D.封装性
5. 派生类对象对其基类中的什么成员是可访问的( )。
A.公有继承的私有成员 C.公有继承的保护成员
B.私有继承的公有成员 D.公有继承的公有成员
6.如果派生类以public方式继承基类,则原基类的protected成员和public成员在派生类中的访问类型分别是( )。
A. public和public
B.public和protected D. protected 和protected
C.protected 和public
7.派生类的成员函数不能访问基类的( )。
A.共有成员和保护成员
B. 共有成员
C. 私有成员
D. 保护成员
8. 下列关于派生类构造函数和析构函数的说法中,错误的是( )。
A.派生类的构造函数会隐含调用基类的构造函数
B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数
C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 9.定义派生类时,若不使用关键字显式地规定采用何种继承方式,则默认方式为( )。
A.私有继承
B.非私有继承
C.保护继承
D.公有继承
10.建立一个有成员对象的派生类对象时,各构造函数体的执行次序为( )。
A.派生类、成员对象类、基类 C.基类、成员对象类、派生类
B.成员对象类、基类、派生类 D.基类、派生类、成员对象类
11.下列关于虚基类的描述中,错误的是( )。
A.使用虚基类可以消除由多继承产生的二义性 B.构造派生类对象时,虚基类的构造函数只被调用一次 C.声明“class B : virtual public A”说明类B为虚基类 D.建立派生类对象时,首先调用虚基类的构造函数
12.一个类可以同时继承多个类,称为多继承。下列关于多继承和虚基类的表述中,错误的是( )。
A.每个派生类的构造函数都要为虚基类构造函数提供实参 B.多继承时有可能出现对基类成员访问的二义性问题 C.使用虚基类可以解决二义性问题并实现运行时的多态性 D.建立最派生类对象时,虚基类的构造函数会首先被调用
13.在公有派生的情况下,派生类中定义的成员函数只能访问原基类的( )。 A.公有成员和私有成员
C.公有成员和保护成员
B.私有成员和保护成员
D.私有成员、保护成员和公有成
14.下列关于继承方式的描述中,错误的是( )。
A.如果不显式地指定继承方式,缺省的继承方式是私有(private) B.采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员 C.采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员 D.采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员 15.下列关于派生类构造函数和析构函数的说法中,错误的是( )。
A.派生类的构造函数会隐含调用基类的构造函数
B.如果基类中没有缺省构造函数,那么派生类必须定义构造函数
C.在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 D.在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 16.下列有关继承和派生的叙述中,正确的是( )。
A.派生类不能访问基类的保护成员
B.作为虚基类的类不能被实例化
C.派生类应当向基类的构造函数传递参数 D.虚函数必须在派生类中重新实现 17.派生类的成员函数不能访问基类的( )。
A.公有成员和保护成员
B.共有成员
C.私有成员 D.保护成员
18.在一个派生类的成员函数中,试图调用其基类的成员函数“void f(); ”,但无法通过编译,
这说明( )。
A.f()是基类的私有成员
C.派生类的继承方式为私有
B.f()是基类的保护成员 D.派生类的继承方式为保护
19.对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该
基类成员的访问权限是( )。 A.公有或私有
三.改错题
B.私有 C.保护或私有 D.公有或保护
1、请改正这些错误,使程序的输出结果为:The value is:10 #include
// ERROR ********found******** private:
Member(int val) : value(val) {} int value; };
class MyClass { Member _m; public:
// ERROR ********found******** MyClass(int val) {}
int GetValue() const { return _m.value; } };
int main() {
MyClass *obj = new MyClass(10);
// ERROR ********found******** 下列语句输出obj指向类中的value值 cout << \ delete obj; return 0; }
2、更正后程序的输出应为: value = 63 number = 1
#include
class MyClass { int* p;
const int N; public:
// ERROR **********found**********
MyClass(int val) : N=1 {
p = new int; *p = val; }
// ERROR **********found********** ~MyClass() { delete *p; }
friend void print(MyClass& obj); };
// ERROR **********found********** void MyClass::print(MyClass& obj) {
cout << \ cout << \}
int main() {
MyClass obj(63); print(obj); return 0; }
四.程序填空题
1. 此工程中声明的Array是一个表示数组的类。一个Array对象可以包含多个整型元素。Array的成员说明如下:
成员函数add用于向数组的末尾添加一个元素; 成员函数get用于获取数组中指定位置的元素; 数据成员a表示实际用于存储数据的整型数组;
数据成员size表示数组的容量,数组中的元素个数最多不能超过size; 数据成员num表示当前数组中的元素个数。
SortedArray是Array的派生类,表示有序数组。SortedArray重新定义了Array中的add函数,以确保有序数组中的元素始终按照升序排列。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为: 10,9,8,7,6,5,4,3,2,1, 1,2,3,4,5,6,7,8,9,10,
#include
using namespace std;
class Array { public:
Array(unsigned int s) {
size = s; num = 0;
a = new int[s]; }
virtual ~Array() { delete[] a; }
virtual void add(int e) {
if (num < size) {
//**********found********** ___________ num++; } }
int get(unsigned int i) const {
if (i < size) return a[i]; return 0; }
protected: int *a;
unsigned int size, num; };
class SortedArray : public Array { public:
//**********found**********
SortedArray(unsigned int s) : _______________ { }
virtual void add(int e) {
if (num >= size) return;
int i=0, j;
while (i < num) {
if (e < a[i]) {
for (j = num; j > i; j--) {
//**********found********** _______________; }
//**********found********** _______________; break; } i++; }
if (i == num) a[i] = e; num++; } };
void fun(Array& a) {
int i;
for (i = 10; i >= 1; i--) { a.add(i); }
for (i = 0; i < 10; i++) { cout << a.get(i) << \ }
cout << endl; }
int main() {
Array a(10); fun(a);
SortedArray sa(10); fun(sa);
return 0; }
2. 程序定义了CharShape类、Triangle类和Rectangle类。
CharShape是一个抽象基类,它表示由字符组成的图形(简称字符图形),纯虚函数Show用于显示不同字符图形的相同操作接口。Triangle和Rectangle是CharShape的派生类,它们分别用于表示字符三角形和字符矩形,并且都定义了成员函数Show,用于实现各自的显示操作。程序的正确输出结果应为:
* *** ***** ******* ######## ######## ########
请阅读程序,分析输出结果,然后根据以下要求在横线处填写适当的代码。 (1)将Triangle类的成员函数Show补充完整,使字符三角形的显示符合输出结果。 (2)将Rectangle类的成员函数Show补充完整,使字符矩形的显示符合输出结果。 (3)为类外函数fun添加合适的形参。
#include
CharShape(char ch) : _ch(ch) {}; virtual void Show() = 0; protected:
char _ch; // 组成图形的字符 };
class Triangle : public CharShape { public:
Triangle(char ch, int r) : CharShape(ch), _rows(r) {} void Show(); private:
int _rows; // 行数 };
class Rectangle: public CharShape { public:
Rectangle(char ch, int r, int c):CharShape(ch),_rows(r), _cols(c) {} void Show(); private:
int _rows, _cols; // 行数和列数 };
void Triangle::Show() // 输出字符组成的三角形 {
for (int i = 1; i <= _rows; i++) { //********found********
for (int j = 1; j <= __________; j++) cout << _ch; cout << endl; } }
void Rectangle::Show() // 输出字符组成的矩形 {
//********found********
for (int i = 1; i <= __________; i++) { //********found********
for (int j = 1; j <= __________; j++) cout << _ch; cout << endl; } }
//********found******** 为fun函数添加形参 void fun(__________) { cs.Show(); } int main() {
Triangle tri('*', 4);
Rectangle rect('#', 3, 8); fun(tri); fun(rect); return 0; }
五.程序设计题
(注意: 1.部分源程序已给出。请勿改动主函数main和其它函数中的任何内容,仅在*program*和*end*所标记的区域内完成题干要求的函数功能。 2.//标记开始与//标记结束内的程序可以忽略阅读。
1、题目:补充函数aver的代码,该函数计算n个学生成绩(通过参数cj传入)的平均分数。 #include
float aver(int cj[],int n) {
/**********Program**********/
/********** End **********/ }
int main() { grading(); return 0; } void grading() { fstream infile,myfile; int b[50]; int i;
infile.open(\
myfile.open(\ for(i=0;i<50;i++) infile>>b[i]; myfile<<(int)aver(b,50)< 2. 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 #include /**********Program**********/ /********** End **********/ return n; } int main() { int m,n; cout<<\请输入两个数:\\n\ cin>>m>>n; if(m //以下忽略阅读 int grading() { int m, n; ifstream infile(\ ofstream outfile(\ if(!infile.is_open() || !outfile.is_open()) { cout<<\ return -1; } for (int i=0; i<8; i++) { infile >> m >> n; outfile< infile.close(); outfile.close(); return 0; } \
正在阅读:
面向对象程序设计第五章作业题11-23
比率差动计算07-04
山东省政府定价药品价格备案申请表10-04
2020年某局党务公开实施方案09-06
外国文学重点整理09-17
高中数学复数知识点及练习08-14
中医习题05-24
青岛版六三制四年级下册数学测试题07-10
混凝土结构设计原理(第五版)答案211-12
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 作业题
- 程序设计
- 面向
- 对象
- 各种服饰风格的近代发展简述
- 译林版牛津英语7A Unit 3 Welcome to our school 单元知识点总结+测试卷(附答案)
- UV固化树脂的发展
- 学习新教育心得体会
- 化学式强化练习111
- 2011高考文科状元的老师揭秘状元特质
- 《汽车理论》清华大学余志生版 - 期末考试复习题
- 攀枝花学院学生教学信息反馈汇总
- 医院信息安全产品的选型原则
- UWB天线的简介
- 高一化学暑期专题复习 §1.氧化还原反应
- 心理辅导个案记录模板
- 贵港东津现代物流园区可行性研究
- 中西医助理医师考试复习中谨记十一
- 民主生活会心得体会
- 浙江省人民政府关于全面推进预算绩效管理的意见(浙政发〔2012〕44号)
- 建筑行业商务员培训学习领导讲话材料
- 营销同业对标管理办法细则
- 汽车基础知识
- 中国近代史2