c++派生类与基类的关系
- 格式:doc
- 大小:15.50 KB
- 文档页数:3
一选择题(共 45题)1.对类的构造函数和析构函数描述正确的是()。
A.构造函数可以重载,析构函数不能重载√B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载2.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A)规律性 B.传递性√ C.重复性 D.多样性3.假设OneClass为一个类,则该类的复制初始化构造函数的声明语句为()。
(OneClass p); B. OneClass& (OneClass p );C. OneClass(OneClass & p);√D. OneClass (OneClass * p);4.对于结构中定义的成员,其默认的访问权限为()。
B. protected D. static5.下面对静态数据成员的描述中,不正确的是()。
A.静态数据成员可以在类体内进行初始化√B.静态数据成员不可以在类体内进行初始化C.静态数据成员能受private控制符的作用D.静态数据成员调用前必须初始6. C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B.继承√C.封装D.引用7. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a 的格式为()。
A. x(a)B. x[a]C. x->aD. √9. 对于一个类的构造函数,其函数名与类名( )。
A. 完全相同√B. 基本相同C. 不相同D. 无关系10. 一个类的构造函数通常被定义为该类的( )成员。
A. 公有√B. 保护C. 私有D. 友元11. 一个类的析构函数通常被定义为该类的( )成员。
A. 私有B. 保护C. 公有√D. 友元12. 一个类的静态数据成员所表示属性 ( )。
A. 是类的或对象的属性B. 只是对象的属性C. 只是类的属性√D. 类和友元的属性13.类的析构函数的作用是()。
定义基类point和派生类circle,求圆的周长定义基类point和派生类circle,用于计算圆的周长。
在面向对象编程中,圆可以看作是一种特殊的点,在计算圆的周长时,需要用到基类point的一些属性和方法。
因此,我们首先定义基类point,包含圆心坐标的x和y值。
接着,我们创建派生类circle,该类继承了基类point,并添加了半径radius属性和计算周长的方法get_circumference()。
该方法利用圆的周长公式C=2πr计算圆的周长,并返回结果。
代码如下:
```python
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
class Circle(Point):
def __init__(self, x, y, r):
super().__init__(x, y)
self.radius = r
def get_circumference(self):
return 2 * 3.14 * self.radius
```
其中,super()函数用于调用基类的构造方法,以初始化基类中
定义的属性。
现在,我们可以创建一个圆的实例,并调用get_circumference()方法来获取圆的周长。
```python
c = Circle(0, 0, 5)
print(c.get_circumference()) # 输出31.4
```
在上面的代码中,我们创建了一个圆心坐标为(0,0),半径为5的圆,并计算其周长。
结果为31.4,即圆的周长。
C++程序设计模拟试卷(一)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内.错选、多选或未选均无分。
1。
编写C++程序一般需经过的几个步骤依次是()A. 编辑、调试、编译、连接B。
编辑、编译、连接、运行C。
编译、调试、编辑、连接D. 编译、编辑、连接、运行答案:B解析:经过编辑、编译、连接和运行四个步骤。
编辑是将C++源程序输入计算机的过程,保存文件名为cpp。
编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的绝对地址,还不能直接运行.连接是将目标文件obj转换为可执行程序的过程,结果为exe。
运行是执行exe,在屏幕上显示结果的过程。
2. 决定C++语言中函数的返回值类型的是()A. return语句中的表达式类型B。
调用该函数时系统随机产生的类型C。
调用该函数时的主调用函数类型D。
在定义该函数时所指定的数据类型答案:D解析:函数的返回值类型由定义函数时的指定的数据类型决定的。
A项的表达式的值要转换成函数的定义时的返回类型。
3。
下面叙述不正确的是()A。
派生类一般都用公有派生B. 对基类成员的访问必须是无二义性的C。
赋值兼容规则也适用于多重继承的组合D. 基类的公有成员在派生类中仍然是公有的答案:D解析:继承方式有三种:公有、私有和保护。
多继承中,多个基类具有同名成员,在它们的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性.赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。
基类中的公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。
4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A。
类B。
对象C. 函数体D。
数据块答案:A解析:类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作.5. 在公有派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的()A。
每小题2分,共70分第1题:以下关于虚函数的叙述中不正确的是()。
A.虚函数属于成员函数B.虚函数不允许说明成静态的C.凡是虚函数必须用virtual说明D.虚函数可以被继承【正确答案】:C【参考解析】:虚函数的引入是为了解决动态绑定问题.使类的实例表现出多态性,虚函数在继承后依然保持虚函数特性,此时不需要用virtual关键词修饰。
第2题:A【参考解析】:本题主要考察setfill的用法。
只用在设置了宽度的情况下,字符填充操作setfill才有意义。
另外要注意的是设置宽度setw是所有格式中惟一一个一次有效的设置。
第3题:下述说法错误的是()。
A.对象之间不可以相互赋值B.对象可以用作函数参数C.对象可以用作数组的元素D.对象可以用作另一对象的成员【正确答案】:A【参考解析】:如果重载了赋值运算符后,对象之间是可以赋值的,对象如C++中其他内置的数据类型一样,可以作为函数参数、数组元素,其他对象的成员存在。
第4题:假定AB为一个类,则执行AB x;语句时将自动调用该类的()。
A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数【正确答案】:B【参考解析】:当没有显式调用指定形式的构造函数。
系统自动调用无参构造函数,如果没有为类指定此构造函数,则系统自动为其生成一个最简单的无参构造函数。
)。
A)654321B)432156C)456123D)123456【正确答案】:A【参考解析】:本题采用递归函数的方式将数组中的元素进行倒置,只要能够看出函数fun的功能,即可以得出正确答案为A。
第6题:数据库概念设计中,由分散到集中的设计方法是()。
A.视图设计B.视图集成设计C.集中式模式设计D.分数式模式设计【参考解析】:数据库概念设计中,由分散到集中的设计方法是视图集成设计。
第7题:类的构造函数的作用是()。
A.一般成员函数B.类的初始化C.对象的初始化D.删除对象创建的所有对象【正确答案】:C【参考解析】:本题考查类的构造函数的作用,构造函数一般负责完成对象建立时的初始化工作,如资源的分配。
C++程序设计模拟试卷(一)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1. 编写C++程序一般需经过的几个步骤依次是()A. 编辑、调试、编译、连接B. 编辑、编译、连接、运行C. 编译、调试、编辑、连接D. 编译、编辑、连接、运行答案:B解析:(P21)经过编辑、编译、连接和运行四个步骤。
编辑是将C++源程序输入计算机的过程,保存文件名为cpp。
编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的绝对地址,还不能直接运行。
连接是将目标文件obj转换为可执行程序的过程,结果为exe。
运行是执行exe,在屏幕上显示结果的过程。
2. 决定C++语言中函数的返回值类型的是()A. return语句中的表达式类型B. 调用该函数时系统随机产生的类型C. 调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型答案:D解析:(P51)函数的返回值类型由定义函数时的指定的数据类型决定的。
A项的表达式的值要转换成函数的定义时的返回类型。
3. 下面叙述不正确的是()A. 派生类一般都用公有派生B. 对基类成员的访问必须是无二义性的C. 赋值兼容规则也适用于多重继承的组合D. 基类的公有成员在派生类中仍然是公有的答案:D解析:(P136)继承方式有三种:公有、私有和保护。
多继承中,多个基类具有同名成员,在它们的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性。
赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。
基类中的公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。
4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A. 类B. 对象C. 函数体D. 数据块答案:A解析:(P39)类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
第九章继承与派生类9.2 典型例题分析与解答例题1:下列对派生类的描述中,(?????)是错误的。
A.??一个派生类可以作为另一个派生类的基类B.??派生类至少有一个基类C.??派生类的成员除了它自己的成员外,还包含了它的基类成员D.?派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。
无论是单继承还是多继承,派生类至少有一个基类。
派生类的成员除了它自己的成员外,还包含了它的基类成员。
派生类中继承的基类成员的访问权限到派生类受继承方式影响的,对于私有继承,基类的public,protected成员在派生类中作为private成员;对于公有继承,基类的public,protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。
例题2:派生类的对象对它的哪一类基类成员是可以访问的(?????)???A.公有继承的基类的公有成员???????????????B. 公有继承的基类的保护成员???C. 公有继承的基类的私有成员???????????????D. 保护继承的基类的公有成员答案:A分析:公有继承的基类的公有成员在派生类中保持公有访问权限,所以派生类对象可以访问它;公有继承的基类的保护成员在派生类中保持保护访问权限,所以派生类对象不可以访问它;基类的私有成员不能被派生到派生类中,所以派生类对象不可以访问它;保护继承的基类的公有成员在派生类中变成保护的访问权限,所以派生类对象不可以访问它。
例题3:关于多继承二义性的描述,(?????)是错误的。
A.?派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B.??一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C.??解决二义性最常用的方法是作用域运算符对成员进行限定D.??派生类和它的基类中出现同名函数时,将可能出现二义性答案:D分析:出现二义性有两种情况:调用不同基类的相同成员时可能出现二义性;访问共同基类的成员时可能出现二义性。
C++程序设计模拟试卷(一)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1. 编写C++程序一般需经过的几个步骤依次是()A. 编辑、调试、编译、连接B. 编辑、编译、连接、运行C. 编译、调试、编辑、连接D. 编译、编辑、连接、运行答案:B解析:经过编辑、编译、连接和运行四个步骤。
编辑是将C++源程序输入计算机的过程,保存文件名为cpp。
编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的绝对地址,还不能直接运行。
连接是将目标文件obj转换为可执行程序的过程,结果为exe。
运行是执行exe,在屏幕上显示结果的过程。
2. 决定C++语言中函数的返回值类型的是()A. return语句中的表达式类型B. 调用该函数时系统随机产生的类型C. 调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型答案:D解析:函数的返回值类型由定义函数时的指定的数据类型决定的。
A项的表达式的值要转换成函数的定义时的返回类型。
3. 下面叙述不正确的是()A. 派生类一般都用公有派生B. 对基类成员的访问必须是无二义性的C. 赋值兼容规则也适用于多重继承的组合D. 基类的公有成员在派生类中仍然是公有的答案:D解析:继承方式有三种:公有、私有和保护。
多继承中,多个基类具有同名成员,在它们的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性。
赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。
基类中的公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。
4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A. 类B. 对象C. 函数体D. 数据块答案:A解析:类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
C++程序设计模拟试卷(一)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1. 编写C++程序一般需经过的几个步骤依次是()A. 编辑、调试、编译、连接B. 编辑、编译、连接、运行C. 编译、调试、编辑、连接D. 编译、编辑、连接、运行答案:B解析:(P21)经过编辑、编译、连接和运行四个步骤。
编辑是将C++源程序输入计算机的过程,保存文件名为cpp。
编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的绝对地址,还不能直接运行。
连接是将目标文件obj转换为可执行程序的过程,结果为exe。
运行是执行exe,在屏幕上显示结果的过程。
2. 决定C++语言中函数的返回值类型的是()A. return语句中的表达式类型B. 调用该函数时系统随机产生的类型C. 调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型答案:D解析:(P51)函数的返回值类型由定义函数时的指定的数据类型决定的。
A项的表达式的值要转换成函数的定义时的返回类型。
3. 下面叙述不正确的是()A. 派生类一般都用公有派生B. 对基类成员的访问必须是无二义性的C. 赋值兼容规则也适用于多重继承的组合D. 基类的公有成员在派生类中仍然是公有的答案:D解析:(P136)继承方式有三种:公有、私有和保护。
多继承中,多个基类具有同名成员,在它们的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性。
赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。
基类中的公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。
4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A. 类B. 对象C. 函数体D. 数据块答案:A解析:(P39)类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
C++程序设计模拟试卷(一)一、单项选择题1. 编写C++程序一般需经过的几个步骤依次是()A. 编辑、调试、编译、连接B. 编辑、编译、连接、运行C. 编译、调试、编辑、连接D. 编译、编辑、连接、运行答案:B解析:(P21)经过编辑、编译、连接和运行四个步骤。
编辑是将C++源程序输入计算机的过程,保存文件名为cpp。
编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的绝对地址,还不能直接运行。
连接是将目标文件obj转换为可执行程序的过程,结果为exe。
运行是执行exe,在屏幕上显示结果的过程。
2. 决定C++语言中函数的返回值类型的是()A. return语句中的表达式类型B. 调用该函数时系统随机产生的类型C. 调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型答案:D解析:(P51)函数的返回值类型由定义函数时的指定的数据类型决定的。
A项的表达式的值要转换成函数的定义时的返回类型。
3. 下面叙述不正确的是()A. 派生类一般都用公有派生B. 对基类成员的访问必须是无二义性的C. 赋值兼容规则也适用于多重继承的组合D. 基类的公有成员在派生类中仍然是公有的答案:D解析:(P136)继承方式有三种:公有、私有和保护。
多继承中,多个基类具有同名成员,在它们的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性。
赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。
基类中的公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。
4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A. 类B. 对象C. 函数体D. 数据块答案:A解析:(P39)类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
5. 在公有派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的()A. 私有成员B. 公有成员C. 保护成员D. 保护成员或私有成员答案:A解析:(P133)在派生类中基类的保护或者基类公有都可以直接访问,基类的私有成员只能是基类的成员函数来访问。
一、单选题(每小题2分,共30分)1. C++源程序文件的缺省扩展名为( A )。
A. cppB. exeC. objD. lik2. 设”int a=12;”,则执行完语句”a+=a*a;”后,a的值是( )。
A. 12B. 144C. 156D. 2883. 设”int a=15,b=26;”,则”cout<<(a,b);”的输出结果是( )。
A. 15B. 26,15C. 15,26D. 264. 字符串”a+b=12\n”的长度为()。
A. 6B. 7C. 8D. 95. 假定下列x和y均为int型变量,则不正确的赋值为()。
A. x+=y++B. x++=y++C. x=++yD. ++x=++y6. 下列的符号常量定义中,错误的定义是()。
A.const M=10;B.const int M=20;C.const char ch;D.const bool mark=true;7. 下列()的调用方式是引用调用。
A. 形参和实参都是变量B.形参是指针,实参是地址值C. 形参是引用,实参是变量D.形参是变量,实参是地址值8. 采用重载函数的目的是()。
A. 实现共享B. 减少空间C. 提高速度D. 使用方便,提高可读性9. 在一个类的定义中,包含有()成员的定义。
A. 数据B. 函数C. 数据和函数D. 数据或函数10. 在类作用域中能够通过直接使用该类的()成员名进行访问。
A. 私有B. 公用C. 保护D. 任何11. 在关键字public后面定义的成员为类的()成员。
A. 私有B. 公用C. 保护D. 任何12. 在关键字private后面定义的成员为类的()成员。
A. 私有B. 公用C. 保护D. 任何13. 类的构造函数是在定义该类的一个( )时被自动调用执行的。
A. 成员函数B. 数据成员C. 对象D. 友元函数14. 类的析构函数是一个对象被( )时自动调用的。
A. 建立B. 撤消C. 赋值D. 引用15. 对类对象成员的初始化是通过构造函数中给出的( )实现的。
C++程序设计模拟试卷(一)一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分.1。
编写C++程序一般需经过的几个步骤依次是()A。
编辑、调试、编译、连接B. 编辑、编译、连接、运行C。
编译、调试、编辑、连接D。
编译、编辑、连接、运行答案:B解析:经过编辑、编译、连接和运行四个步骤.编辑是将C++源程序输入计算机的过程,保存文件名为cpp。
编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的绝对地址,还不能直接运行。
连接是将目标文件obj转换为可执行程序的过程,结果为exe。
运行是执行exe,在屏幕上显示结果的过程.2。
决定C++语言中函数的返回值类型的是()A. return语句中的表达式类型B。
调用该函数时系统随机产生的类型C。
调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型答案:D解析:函数的返回值类型由定义函数时的指定的数据类型决定的.A项的表达式的值要转换成函数的定义时的返回类型。
3. 下面叙述不正确的是()A。
派生类一般都用公有派生B。
对基类成员的访问必须是无二义性的C. 赋值兼容规则也适用于多重继承的组合D。
基类的公有成员在派生类中仍然是公有的答案:D解析:继承方式有三种:公有、私有和保护.多继承中,多个基类具有同名成员,在它们的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性。
赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。
基类中的公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。
4。
所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A。
类B. 对象C. 函数体D. 数据块答案:A解析:类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
第八章习题一、选择填空1.下列对派生类的描述中,( )是错的。
A.一个派生类可以作为另一个派生类的基类;B.派生类至少有一个基类;C.派生类的成员除了它自己的成员以外,还包含了它的基类的成员;D.派生类中继承的基类成员的访问权限到派生类保持不变。
2.派生类的对象对它的基类成员中( )是可以访问的。
A.公有继承的公有成员;B.公有继承的私有成员;C.公有继承的保护成员;D.私有继承的公有成员。
3.对基类和派生类的关系的描述中,( )是错的。
A.派生类是即类的具体化;B.派生类是基类的子集;C.派生类是基类定义的延续;D.派生类是基类的组合。
4.派生类的构造函数的成员初始化列中,不能包含( )。
A.基类的构造函数;B.派生类中子对象的初始化;C.基类的子对象的初始化;D.派生类中一般数据成员的初始化。
5.关于子类型的描述中,( )是错误的。
A.子类型就是指派生类是基类的子类型;B.一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型;C.在公有继承下,派生类是基类的子类型;D.子类型关系是不可逆的。
6.关于多继承二义性的描述中,( )是错误的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对该成员的访问可能出现二义性;B.解决二义性的最常用的方法是对成员名的限定法;C.基类和派生类中同时出现的同名函数,也存在二义性问题;D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类的成员进行访问时也可能出现二义性。
7.设置虚基类的目的是( )。
A.简化程序;B.消除二义性;C.提高运行效率;D.减少目标代码8.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。
A.与虚基类下面的派生类个数有关;B.多次;C.二次;D.一次9.若类A和类B的定义如下:class A{int i,j;public:void get();//……};class B:A{int k;public:void make();//…….};void B::make(){k=i*j;}则上述定义中,()是非法的表达式。
第九章继承与派生类9.2 典型例题解析与解答例题 1:以下对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类最少有一个基类C.派生类的成员除了它自己的成员外,还包括了它的基类成员D.派生类中继承的基类成员的接见权限到派生类保持不变答案: D解析:一个派生类可以作为另一个派生类的基类。
无论是单继承还是多继承,派生类最少有一个基类。
派生类的成员除了它自己的成员外,还包括了它的基类成员。
派生类中继承的基类成员的接见权限到派生类受继承方式影响的,关于私有继承,基类的 public , protected 成员在派生类中作为 private 成员;关于公有继承,基类的public , protected 成员在派生类中接见属性不变;关于保护继承,基类的public 、 protected成员在派生类中作为protected成员。
例题 2:派生类的对象对它的哪一类基类成员是可以接见的?()A.公有继承的基类的公有成员 B. 公有继承的基类的保护成员C. 公有继承的基类的私有成员D. 保护继承的基类的公有成员答案: A解析:公有继承的基类的公有成员在派生类中保持公有接见权限,因此派生类对象可以接见它;公有继承的基类的保护成员在派生类中保持保护接见权限,因此派生类对象不行以接见它;基类的私有成员不可以被派生到派生类中,因此派生类对象不可以接见它;保护继承的基类的公有成员在派生类中变为保护的接见权限,因此派生类对象不行以接见它。
例题 3:关于多继承二义性的描述,()是错误的。
A.派生类的多个基类中存在同名成员时,派生类对这个成员接见可能出现二义性B.一个派生类是从拥有共同的间接基类的两个基类派生来的,派生类对该公共基类的接见可能出现二义性C.解决二义性最常用的方法是作用域运算符对成员进行限制D.派生类和它的基类中出现同名函数时,将可能出现二义性答案: D解析:出现二义性有两种状况:调用不一样基类的同样成员时可能出现二义性;接见共同基类的成员时可能出现二义性。
一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1. 编写C++程序一般需经过的几个步骤依次是()A. 编辑、调试、编译、连接B. 编辑、编译、连接、运行C. 编译、调试、编辑、连接D. 编译、编辑、连接、运行答案:B解析:经过编辑、编译、连接和运行四个步骤。
编辑是将C++源程序输入计算机的过程,保存文件名为cpp。
编译是使用系统提供的编译器将源程序cpp生成机器语言的过程,目标文件为obj,由于没有得到系统分配的绝对地址,还不能直接运行。
连接是将目标文件obj转换为可执行程序的过程,结果为exe。
运行是执行exe,在屏幕上显示结果的过程。
2. 决定C++语言中函数的返回值类型的是()A. return语句中的表达式类型B. 调用该函数时系统随机产生的类型C. 调用该函数时的主调用函数类型D. 在定义该函数时所指定的数据类型答案:D解析:函数的返回值类型由定义函数时的指定的数据类型决定的。
A项的表达式的值要转换成函数的定义时的返回类型。
3. 下面叙述不正确的是()A. 派生类一般都用公有派生B. 对基类成员的访问必须是无二义性的C. 赋值兼容规则也适用于多重继承的组合D. 基类的公有成员在派生类中仍然是公有的答案:D解析:继承方式有三种:公有、私有和保护。
多继承中,多个基类具有同名成员,在它们的子类中访问这些成员,就产生了二义性,但进行访问时,不能存在二义性。
赋值兼容规则是指派生类对象可以当作基类对象使用,只要存在继承关系,所以单继承或多继承都适用。
基类中的公有成员采用私有继承时,在派生类中变成了私有成员,所以D项错误。
4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()A. 类B. 对象C. 函数体D. 数据块答案:A解析:类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
基类对象与派生类对象的使用关系
1. 派生类对象作为基类对象处理
由于派生类具有所有基类的成员,所以把派生类的对赋给基类对象是
合理的,不过要求这种继承方式必须是public方式。但是,反过来
赋值会使基类中一具有派生类的成员(因为派生类的成员通常是比基
类的成员多),所以这是不允许的。
2. 基类指针指向派生类对象
因为派生类对象也是基类对象,所以指向派生类对象的指针可以转换
为指向基类对象的指针,这种引用方式是安全的,但是用这种方式只
能引用基类成员。如果试图通过基类指针引用那些只有在派生类中才
有的成员,编译系统会报告错误。
#include<>
#include<>
class Stud
{
char name[10];
int score;
public:
Stud(char na[],int s)
{
strcpy(name,na);
score=s;
}
void disp()
{
cout<
cout<<"优"<
cout<<"良"<
cout<<"中"<
cout<<"及格"<
cout<<"不及格"<
};
class Unstud:public Stud
{
char cname[10];
public:
Unstud(char na[],char cn[],int s):Stud(na,s)
{
strcpy(cname,cn);
}
};
class Grstud:public Stud
{
char research[10];
public:
Grstud(char na[],char rs[],int s):Stud(na,s)
{
strcpy(research,rs);
}
};
int main()
{
Stud *p;
Unstud st1("李明","计科02",85);
Grstud st2("王华","数据挖掘",92);
p=dynamic_cast
p->disp();
p=dynamic_cast
p->disp();
}
3. 派生类指针强制指向基类对象
直接用派生类指针指向基类的对象,这种方式会导致语法错误。但可
以将派生类强制转换为基类指针,然后就可以调用基类的成员了。这
种强制转换使用的静态转型运算符,其使用格式如下:
派生类对象指针=static_static<派生类*>(&基类对象);