一、选择题。
1.运算符重载时不需要保持的性质是:( a )
a.操作数类型。
b.操作数个数。
c.优先级。
d.结合性
理由:操作数实际上对应的是重载函数的参数,按照重载函数的定义,其构成的条件是参数不同,对于运算符来说,要求其操作数个数必须相同,就是参数个数相同,因此就需要要求参数类型不同,即操作数类型不同。
2.在c++中,要实现动态联编,必须使用(d)调用虚函数。
a.类名 b.派生类指针 c.对象名 d.基类指针。
理由:3. 有如下类定义和变量定义:
#include<>
class x
int a;
void setx (int x)
public:
void showx()
class y: private x;
class z: public x;
y objy;
z objz;
下列语句中正确的是:( d )a.b.
c.d.
理由:因为类y,z对x的继承方式不同,y对x 是私有继承,z对x 是公有继承,导致了x类的成员都是y类的私有成员,而 x类的成员在z类中的访问方式都和在x类中一样不变。因此,setx、showx都是y类的私有成员,所以y类的对象objy不能直接访问setx、showx;setx是z类的私有成员,showx是z类的公有成员,所以z类的对象objz可以直接访问showx,而不能访问 setx函数;
4. 有如下类定义:
#include<>
class a
int xx;
public:
a():xx(0)
a(int n):xx(n)
class b: public a
int yy;
public:
b():yy(0);
下列选项中,输出结果为a0的语句是:( d )
a.b y1(0,0);
b.b y2(1);
c.b y3(0);
d.b y4;
理由:要使输出结果为a0,主要看定义的派生类对象b调用的是哪一个构造函数(基类和派生类),分析构造函数:
基类构造函数中,默认构造函数输出“a”,即调用无惨构造函数。
派生类构造函数中,没有给基类传递参数的是默认构造函数,且输出“0”
所以,定义对象的语句一定没有参数,即b y4;
5. 己知表达式a++中的“++是作为友元函数重载的运算符,则与a++等效的运算符函数调用形式为:( c )
a.a .orerator++(1);
b.operator++(a);
c.operator++(a, 0);
d. 0 );
理由:既然是友元函数,a++又是后置++运算符,所以其运算符重载函数有两个参数,一个是当前对象,一个是后置标志,多一个int类型参数。调用的形式是:
a++;或operator++(a,0);
所以,选择(c).其他选项:
6.下列函数中,不能说明为虚函数的是(c)。
a.私有成员函数 b.公有成员函数 c.构造函数 d.析构函数。
理由:7.以下基类中的成员函数,哪个表示纯虚函数(c)。
a.virtual void vf(intb.void vf(int)=0;
c.virtual void vf( )0; d.virtual void vf(int)
理由:8.类定义如下。
class a
virtual void func2( )
class b:public a;
则下面正确的叙述是(a)
a.a::func2( )和b::func1( )都是虚函数。
b.a::func2( )和b::func1( )都不是虚函数。
c.b::func1( )是虚函数,而a::func2( )不是虚函数。
d.b::func1( )不是虚函数,而a::func2( )是虚函数。
理由:9.c++中多态性包括两种多态性:编译时的和运行时的,前者是通过___来实现的(a)
a.函数和运算符的重载b.类继承关系c.虚函数d.抽象类。
理由:10.下列关于虚函数的说明中,正确的是( b)。
a.从虚基类继承的函数都是虚函数。
b.虚函数不能是静态成员函数。
c.只能通过指针或引用调用虚函数。
d.抽象类中的成员函数都是虚函数。
理由:11.下列运算符中,__运算符不能重载为成员函数。c
a.赋值运算符= b.函数调用运算符( )c.输出运算符<< d.后置++
理由:输出运算符《的第一个操作数不是当前类的对象,按照c++语言规定,这种情况只能定义为友元运算符重载函数。
12.类b是类a的公有派生类,类a和类b中都定义了虚函数func( )p是一个指向类a对象的指针,则p->a::func( )将(a)。
a.调用类a中的函数func( )
b.调用类b中的函数func( )
c.根据p所指的对象类型而确定调用类a中或类b中的函数func( )
d.既调用类a中函数,也调用类b中的函数。
理由:二、问答题:
1. 是否使用了虚函数就能实现运行时的多态性?怎样才能实现运行时的多态性?
答:不是。首先要在基类中定义虚函数,并在其派生类中定义重名的虚函数。
派生类一定以公有方式继承了基类。实现运行时的多态性时,必须使用基类类型的指针变量或引用,使该指针指向该基类的不同派生类的对象,并通过该指针指向虚函数,才能实现动态的多态性。
2. 为什么析构函数总是要求说明为虚函数?
答:在基类中及其派生类中都动态分配内存空间时,必须把析构函数定义为虚函数,实现撤消对象时的多态性。根据赋值兼容规则可以用基类的指针指向派生类对象,如果由该指针撤销派生类对象,未将析构函数说明为虚函数,则会调用基类的析构函数,使对象释放不完全。
因此必须将析构函数说明为虚函数,实现多态性,自动调用派生类析构函数,使得所定义的派生类对象得到完全的释放。
3. 存在这样的抽象类吗?该类定义中并没有定义纯虚函数。
答:存在这样的抽象类,该类继承的基类中定义了纯虚函数,而该类定义中没有重新定义纯虚函数,但该类继承了纯虚函数,所以该类也存在纯虚函数,所以也是抽象类。
4. 定义虚函数的目的是什么?定义纯虚函数有什么作用?
答:定义虚函数的目的是实现动态多态性;作用是定义纯虚函数的目的在于基类给派生类提供一个标准的函数原型,统一接口,为实现动态多态性打下基础,派生类将根据需要给出纯虚函数的具体实现**。
三、读程序按要求做题。
1.以下程序如果将point类的析构函数定义为虚函数,输出结果是什么?试分析原因。
#include
using namespace std;
class point
public:
point(float a,float b):x(a),y(b){}
~point()
circle ()
void coord::print()
第六章作业答案
结构化学第六章习题解答。1 为什么大多数配合物都有鲜艳的颜色,而四面体zn2 的配合物却例外?答 配合物中心金属原子或离子的d轨道 后,在光照下d电子可从能级低的d轨道跃迁到能级高的d轨道,产生d d跃迁和吸收光谱。由于d d跃迁对应的光子频率在近紫外和可见光区,故过渡金属配合物通常都有颜色。zn2...
第六章作业答案
第六章外币交易会计。1.借 银行存款 人民币1000000 7.01 7010000 汇兑损益10000 贷 银行存款 美元1000000 7.02 7020000 2 10000元港币换 民币为10000 0.89 8900元。8900元人民币换成美元为8900 7.01 1269.61美元。美元...
自控第六章作业答案
第六章线性定常系统的综合。6 1 解 由可得 1 加入状态反馈阵,闭环系统特征多项式为 2 根据给定的极点值,得期望特征多项式 3 比较与各对应项系数,简单起见,可令 则可以得到。即 从上述计算可知,反馈矩阵k是不唯一的。6 2 解 1 模拟结构图如下 2 判断系统的能控性 满秩,系统完全能控,可以...