C++习题第07章 继承和派生

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(6)D(7)C(8)B(9)A(10)B
3
4
第11章
1
(1)字符数组,string类
(2)string
(3)容器,迭代器,算法
(9)下列关于虚类的描述中,不正确的是()
A)使用虚基类的目的是消除多重继承下的二义性
B)虚基类中的子对象的初始化次数与该虚基类的派生类的个数有关
C)虚基类的多层派生类结构函数的成员初始化列表中都要列出对虚基类构造函数
的调用
(10)运行时的多态性上指()
A)用指向对象的基类指针或引用调用一个纯虚函数
}后缺少分号“;”
(3)成员函数void setdata(float x1,float y1,float r);没有实现
(4)构造函数名point()应与类名同名,为Point
没有头文件包含#include <iostream.h>
4
(1)
x=0,y=0
x=100,y=200
(2)
x=100,y=200
第07章继承和派生
(1)面向对象程序设计的____机制实现了代码重用,有效地缩短了程序的开发周期。
(2)在继承关系中,被继承的类称为____,通过继承关系定义出来的新类称为_____。
(3)派生类的继承方式有____ ,____和____3种,其中默认的继承方式为____.。
(4)公有继承时,基类的私有成员为跑生类的____成员,基类的保护成员成为派生类的____成员,基类的公有成员成为派生类的____成员。
2
(1)C(2)C(3)B(4)C(5)B
(6)C(7)D(8)B(9)C(10)D
(11)A(12)C(13)D(14)D(15)B
3
(1)man1.salary=1000.00;不能在类外访问类的私有成员
(2)float r=0;和float c=0;类本身是抽象的,不能在类的定义体中给其数据成员赋值
(3)设计一个抽象类,并由它派生出圆柱体、球体和正方体3个类,实现计算圆柱体、球体和正方体表面积和体积;要求按照运行时多态性的方法设计主函数,进行测试。
习题参考答案
第1章
1
(1)函数说明,函数体
(2)声明区,主程序区,函数定义区
(3)多态性
(4)namespace,using
(5)std
(6)cin,>>
x=1000,y=2000
t=3.14
(3)
Sta::fun2()=10
s.fun2()=11
r.a=20
(4)
Constructor1 called!
x=0
Constructor2 called!
x=100
Destructor called!
Destructor called!
(5)
57
5
6
第7章
第3章
1
(1)B(2)A(3)A(4)C(5)A
2
(1)错(2)对(3)对(4)错(5)错
3
(1)
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
(2)
1
1 2 1
1 2 3 2 1
1 2 3 4 3 2 1
1 2 3 4 5 4 3 2 1
(3)
j的值为0;
i的值为2;
4
第4章
1.
(1)void
(5)成员函数
(6)friend
(7)类名,作用域运算符
(8)对象名.成员名,指针变量名->成员名,(*指针变量名).成员名
(9)构造,析构,构造,析构
(10)常量数据,引用数据
(11)全局,数据类型,所属的类
(12)常成员,只读
(13)成员,友元
(14)类数据成员,类成员函数
(15)this
(16)浅拷贝
B)保护继承时,基类的公有成在派生中是保护成员
C)私有继承时,基类的公有成在派生中是公有成员
D)私有继承时,基类的私有成在派生中是私有成员
(8)下列关于赋值兼容规则的描述中不正确的是()
A)派生类的对象可以赋值给基类对象
B)基类的对象可以赋值给派生的对象
C)派生类的对象可以初始化为基类的引用
D)派生类对象的地址可以赋值个指向基类的指针
1
(1)继承
(2)基类,派生类
(3)private,protected,public,private
(4)不可访问,保护,公有
(5)私有
(6)单(一),多(重)
(7)赋值兼容规则
(8)静态,动态
(9)抽象类
2
(1)B(2)A(3)B(4)C(5)B
(6)A(7)D(8)B(9)B(10)B
(11)D(12)B
(3)什么是虚基类?它的作用是什么?
(4)什么是抽象类?抽象类的主要作用是什么?
6.编程题
(1)分别定义一个日期类和时间类,然后派生出一个新的日期时间类。请以继承方式实现该类。
(2)在例7-16胡基础上,由Student类和Teacher类派生出一个描述在职读书的教师的类,并编写出相对应的测试代码。
C
D
D
(5)
A
B
D
D
(6)
A
A
B
D
D
(7)
A
B
C
D
D
(8)
5
25
5
6
第8章
1
(1)函数重载
(2)重载为类的成员函数,重载为类的友元函数
(3)Operator
(4)1,2
(5)友元
2
(1)B(2)D(3)A(4)D(5)B
(6)C(7)C(8)C
3
4
第9章
1
(1)类模板,函数模板
(2)类,对象
(3)数据类型
(4)应改为
#include <iostream.h>
4
5
第2章
1.
(1)B(2)D(3)B(4)D(5)B
2
(1)(a)、(c)(e)、(f)、(g)、(h)、(i)
(2)(a)、(g)、(i)、(j)
(3)
(a)5.5
(b)0
(c)20
(d)0,0
(e)1
(f)1,2
(g)3
(h)-40
(i)2
Using namespace std;
ClassBase
{ private:
Void funl() con
4.读程序写结果
5.简答题
(1)派出类的继承方式有哪几种?各种继承方式各有什么特点?
(2)在继承方式的派出类构造函数中如何对基类的数据成员初始化?各构造函数被调用的顺序和机理是什么?请举wk.baidu.com说明。
(3)若有如下类声明:
ClassBase
{int k;
Public:
Void set(int n){k=n;}
Int get()const{return k;}
};
ClassDerived:protected Base
{protected:
Int j;
Public:
Void set(int m,int n)
(7)//
(8)对数据的操作
2
(1)对(2)错(3)错(4)错(5)错
3
(1)没有函数体,应改为
void main() {};
(2)语句没有分号,应改为
using namespace myspace;
(3)cout和操作符<<共同完成输出的功能,应改为
cout<<" Input your name:";
(2)静态全局变量,static
(3)函数重载
(4)inline
(5)递归函数
(6)宏定义命令,文件包含命令,条件编译命令
2
(1)错(2)错(3)错(4)错(5)错
(6)对(7)错(8)错(9)对(10)对
3
(1)
x=7,y=4
x=9,y=5
(2)
34.56
101
(3)
16
22
28
(4)
12 15 18 21 24
(5)
2,1,4,1,3,2,1,
4
5
第5章
1
(1)C(2)D(3)A(4)B(5)C
2
(1)错(2)对(3)对(4)错(5)错
3
(1)
153
(2)
42
25 6 8 10
(3)
65535,21
(4)
4
19
(5)
6904
(6)
4
3
2
1
0
4
第6章
1
(1)类,对象,类
(2)数据成员,成员函数
(3)不能
(4)private,protected,public,private
(5)在派生类中不能访问基类的____成员,这符合面向对象程序设计的封装思想。
(6)C++语言不仅支持____继承,也支持____继承。
(7)可以把派生类的对象当做基类对象来处理,这是____的概念。
(8)根据联编实现的不同极端,可将其分为____联编和____联编两种。
(9)声明了纯虚函数的类,称为____。
(4)fun(5)
2
(1)C(2)B(3)C(4)B(5)D
3
4
第10章
1
(1)FILE,stdio.h
(2)stdio.h,fopen,fclose
(3)顺序,随机
(4)cin,>>,cout,<<
(5)ios
(6)fstream,open,close
(7)文件指针的当前位置,文件开头,文件尾
2
(1)B(2)B(3)A(4)D(5)B
3.
(1)
#include<iostream.h>
classA
{public:
Int al;
Protected:
Int a2;
Private:
Int a3;
};
ClassB:publicA
{public:
Int b1;
proteted:
Int b2;
Private:
Int b3;
};
Void B::fb()
C)基类的子对象的初始化D)派生类的子对象的初始化
(5)若如下类声明:
ClassX
{int x;
Public:
X(int n){x=n;}
};
ClassY:publicX
{int y;
Public;
Y(int a,int b);
};
在构造函数Y的下列定义中,正确的是()
A)Y::Y(int a,int b):x(a),y(b){}B)Y::Y(int a,int b):X(a),y(b){}
{Base::set(m);
j=n;
}
Int get()const
{return Base::get()+j;
}
};
则类Derived中保护的数据成员和成员函数的个数是()
A)4 B)3 C)2 D)1
(4)在派生类的结构函数的初始化表中,不能包含()
A)基类的构造函数B)派生类的一般数据成员的初始化
B)用指向对象的基类指针或用调用一个虚函数
C)以任何方式调用一个纯虚函数
D)以任何方式调用一个虚函数
(11)在C++中,用于现实运行时多态性的是()
A)内联函数B)重载函数C)摸板函数D)虚函数
(12)下列关于虚函数的描述中,正确的是()
A)从虚基类继承的函数都是虚函数B)虚函数不得是静态成员函数
B)只能通过指针或引用调用虚函数D)抽象类中的成员函数都虚函数
2.选择题
(1)下列关于派生类的描述中,不正确的是()
A)派生类的成员除了包含它自己的成员的访问权限在派生类中保持不变
B)派生类中继承的基类
C)派生类至少有个一个基类
D)一个派生类可以作为另一个派生的基类
(2)在保护继承中,基类的私有成员变成派生类的()
A)不可访问成员B)稀有成员C)保护成员D)公有成员
3
(1)本题的错误主要是数据成员的访问权限问题:基类的私有成员在派生类中不可访问,如fb()函数中的a3=30;语句;类的私有和保护成员在类外不能访问,如main函数中的x.a2 =20;.a3=30;,y.a2=200;,y.a3=300;,y.b2=2000;和y.b3=3000;语句。
(2)本题的错误主要是成员函数的访问权限问题:由于派生类Derived是基类Base的保护派生类,所以基类中的私有成员变成派生类的不可访问成员,而基类的保护和公有成员则变成派生类的保护成员。对于类的不可访问和保护成员在类外是不能访问的,故main函数中的语句obj.funl();,obj.fun2();和obj.fun3();是错误的。
4
(1)
d=110
b=190
d=110
d=110
(2)
d=110
b=190
d=110
b=90
(3)
基类B1的构造函数被调用
基类B3的构造函数被调用
基类B2的构造函数被调用
派生类D的构造函数被调用
派生类D的析构函数被调用
基类B2的析构函数被调用
基类B3的析构函数被调用
基类B1的析构函数被调用
(4)
A
B
C) Y::Y(int a,int b):x(a),Y(b){}D)Y::y(INT A,INT B):X(a),Y(b){}
(6)在多重继承中,对于基类成员在派生类中的访问权限与单继承的规矩()
A)完全相同B)完全不同C)部分相同D)以上均不正确
(7)下列说法中不正确的是()
A)私有继承时,基类的公有成在派生中是私有成员
{ a1=10;a2=20a3=30:
B1=100;b2=100;b3=100;
}
Void main()
{ A x;
B y;
x.a1=10;x.a2=20,x.a3=30;
y.a1=100;y.a2=200;y.a3=300;
y.b1=1000;y.b2=2000;y.b3=3000;
}
(2)
#include<iostream>
(j)3
(k)s1>='0'&&s1<='9'
(l)N!=0
3
(1)0,15
(2)(1、1、1),(-1、-1、-1)
(3)
(a)a*a+2*a*b+b*b
(b)4.0/3.0*3.1415926*R*R*R
(c)5.0/9.0*(F-32)
(d)b>=a&&b<=c
(4)
36
41
43
(5)
x=1
4
相关文档
最新文档