1、二级 C+笔试-275 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有如下程序:#includeiostreamusing namespace std;class Partpublic:Part(int x=0):val(x) coutval;Part()coutval;private:int val;class Wholepublic:Whole(int x ,int y, int z=0):p2(x),p1(y),val(z)coutval;Whole()coutval;private:Part p1,p2;int val;int
2、main()Whole obj(1,2,3);return 0;程序的输出结果是( )。(分数:2.00)A.123321B.213312C.213D.1231232.类 MyClass的定义如下:class MyClasspublic:MyClass( )value=0;SetVariable(int i)value=i;private:int value;则对下列语句序列正确的描述是( )。MyClass*P, my; p=(分数:2.00)A.语句 p= 是把对象 my赋值给指针变量 PB.语句 MyClass*p, my; 会调用两次类 MyClass的构造函数C.对语句*P. Set
3、Variable(5)的调用是正确的D.语句 p-SetVariable(5)与语句 my.SetVariable(5)等价3.使用白盒测试法时,确定测试数据应该根据( )和指定的覆盖标准。(分数:2.00)A.程序的内部逻辑B.程序的复杂结构C.使用说明书D.程序的功能4.下列程序的输出结果为( )。#includeiostream.hclass TestClasspublic:TestClass ()val+;static int val;int TestClass:val=0;void main()TestClass cs1;coutcs1.val“;TestClass cs2;Test
4、Class cs3,cs4;coutcs2.valendl;(分数:2.00)A.03B.13C.14D.245.有如下程序:#includeiostreamusing namespace std;int main()cout.fill(*);cout.width(5);coutscientific314.15926535endl;return 0;程序运行后,输出的结果是( )。(分数:2.00)A.3.141593e+002B.3.1416e+002C.*3.14e+002D.314.166.有如下程序:#includeiostreamusing namespace std;class M
5、yClasspublic:MyClass(int x):val(x) void Print() const cout“const:val=“val/t;void Print() cout“val=“valt;private:int val;int main()const MyClass obj1(10);MyClass obi2(20);obj1.Print();obj2.Print();return 0;程序的输出结果是( )。(分数:2.00)A.val=10 const:val=20B.const:val=10 const:val=20C.const:val=10 val=20D.val
6、=10 val=207.已知类 Myst有一个只需要一个 double型参数的构造函数,且将运算符“-”重载为友元函数。要使语句序列( )。Myst x(3.2),y(5.5),z(0.0);z=8.9-y;y=x-6.3;能够正常运行,运算符函数 operator-应该在类中声明为( )。(分数:2.00)A.friend Myst operator-(MystB.friend Myst operator-(Myst,Myst);C.friend Myst operator-(Myst,MystD.friend Myst operator-(Myst8.算法的时间复杂度是指( )。(分数:2
7、.00)A.执行算法程序所需要的时间B.算法程序的长度C.算法执行过程中所需要的基本运算次数D.算法程序中的指令条数9.使用 ifstream流类定义流对象并打开磁盘文件时,文件的隐含打开方式为( )。(分数:2.00)A.ios:inB.ios:outC.ios:inlios:outD.没有默认10.下列是关于派生类声明的开始部分,其中正确的是( )。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual publicA11.有如下程序:#
8、includeiostreamusing namespace std;class TestClass1public:TestClass1 ()cout“ TestClass1“;TestClass1 ()cout“ TestClass1“;class TestClass2:public TestClass1TestClass1 *p;public:TestClass2()cout“ TestClass2“;p=new TestClass1();TestClass2()cout“TestClass2“;delete p;int main()TestClass2 obj;return 0;(分数:
9、2.00)A.TestClass2TestClass1TestClass1TestClass1TestClass2TestClass1B.TestClass1TestClass2TestClass1TestClass2TestClass1TestClass1C.TestClass2TestClass1TestClass1TestClass2TestClass1TestClass1D.TestClass1TestClass2TestClas1TestClass1TestClass2TestClass112.有如下程序;#includeiostreamusing namespace std;cla
10、ss DA int k;public:DA(int x=1):k(x)DA( )coutk;int main( )DA d=DA(3),DA(3),DA(3);DA *p=new DA2;delete p;return ();这个程序的输出结果是( )。(分数:2.00)A.111B.333C.11333D.1113313.在下列程序的横线处填上适当的内容,使程序执行后的输出结果为 ABCD。#includeiostreamusing namespace std;class Apublic:A()coutA;class B: _public:B()coutB;class C:virtual p
11、ublic Apublic:C()coutC;class D:public B,public Cpublic:D()coutD;void main()D obj;(分数:2.00)A.public AB.private AC.protected AD.virtual public A14.如果派生类以 protected方式继承基类,则原基类的 protected成员和 public成员在派生类中的访问属性分别是( )。(分数:2.00)A.public和 publicB.public和 protectedC.protected和 publicD.protected和 protected15.
12、对关系 S和 R进行集合运算,结果中既包含 S中的所有元组也包含 R中的所有元组,这样的集合运算称为( )。(分数:2.00)A.并运算B.交运算C.差运算D.积运算16.下列描述中,不是线性表顺序存储结构特征的是( )。(分数:2.00)A.不便于插入和删除B.需要连续的存储空间C.可随机访问D.需另外开辟空间来保存元素之间的关系17.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是( )。(分数:2.00)A.DB包括 DBS和 DBMSB.DBMS包括 DB和 DBSC.DBS包括 DB和 DBMSD.没有任何关系18.下列关于构造函数和析构函数的描述,错误的是(
13、)。(分数:2.00)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数19.下列有关继承和派生的叙述中,正确的是( )。(分数:2.00)A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类20.下列关于 C+函数的说明中,正确的是( )。(分数:2.00)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后一条语句
14、必须是 return语句C.标准 C+要求在调用一个函数之前,必须先声明其原型D.编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式21.下列有关类成员的叙述中,正确的是( )。(分数:2.00)A.友元函数是类的成员函数B.类成员的默认访问权限是私有的C.类成员函数必须声明为公有的D.类的静态数据成员不能是常成员22.运算符重载是对已有的运算符赋予多重含义,因此( )。(分数:2.00)A.可以对基本类型(如 int类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载 C+中已经有的运算符,不能定义新运算符D.C+中已经有的所有运算符都
15、可以重载23.下列选项中不属于软件生命周期开发阶段任务的是( )。(分数:2.00)A.软件测试B.概要设计C.软件维护D.详细设计24.下列符号中,正确的 C+标识符是( )。(分数:2.00)A.enumB.2bC.foo-9D._3225.按照“先进后出”原则组织数据的数据结构是( )。(分数:2.00)A.队列B.栈C.双向链表D.二叉树26.对建立良好的程序设计风格,下列描述中正确的是( )。(分数:2.00)A.程序应该简单、清晰、可读性好B.符号名的命名只需要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无27.有下列二叉树,对此二叉树前序遍历的结果为( )。(分数:2.
16、00)A.ACBEDGFHB.ABDGCEHFC.HGFEDCBAD.ABCDEFGH28.静态数据成员是为( )的数据。(分数:2.00)A.私有B.保护C.所有对象共享D.类成员29.必须用一对大括号括起来的程序段是( )。(分数:2.00)A.switch语句中的 case标号语句B.if语句的分支C.循环语句的循环体D.函数的函数体30.下列选项中不属于软件工程 3个要素的是( )。(分数:2.00)A.工具B.过程C.方法D.环境31.有如下函数模板声明:templatetypename TT Max(T a,T b)return(a=b)?a:b;下列对函数模板 Max()的调用中
17、错误的是( )。(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4)C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)32.若类 A和类 B的定义如下:#includemalloc.hclass Aint i,j;public:int geti()return i;class B:public Aint k;public:void make()k=i*j;则上述定义中非法的表达式是( )。(分数:2.00)A.k=i*j;B.int k;C.return i;D.void make();33.用来派生新类的类称为( )。(分数:2.00)A.新生类B
18、.派生类C.基类D.子类34.若有如下程序:#includeiostreamusing namespace std;class TestClass1private:int a;public:TestClass1(int i)a=i;void disp()couta“,“;class TestClass2private:int b;public:TestClass2(int j)b=j;void disp()coutb“,“;class TestClass3:public TestClass2,public TestClass1private:int c;public:TestClass3(in
19、t k):TestClass1(k-2),TestClass2(k+2)c=k;void disp()TestClass1:disp();TestClass2:disp();coutcendl;int main()TestClass3 obi(10);obj.disp();return 0;程序执行后的输出结果是( )。(分数:2.00)A.10,10,10B.10,12,14C.8,10,12D.8,12,1035.若有如下程序:#includeiostreamusing namespace std;class TestClasspublic:void who() cout“TestClas
20、s“endl;class TestClass1:public TestClasspublic:void who()cout“TestClass1“endl;int main()TestClass *p;TcstClass1 obj1;p=p-who();return 0;则该程序运行后的输出结果是( )。(分数:2.00)A.TestClass1B.TestClassC.0D.无输出二、填空题(总题数:15,分数:30.00)36.在算法的 4个特性中,算法必须能在执行有限个步骤之后终止指的是算法的 1 特性。(分数:2.00)填空项 1:_37.按照逻辑结构分类,结构可以分为线性结构和非线性
21、结构,栈属于 1。(分数:2.00)填空项 1:_38.栈中允许进行插入和删除的一端叫做 1。(分数:2.00)填空项 1:_39.在面向对象程序设计中,从外面看只能看到对象的外部特征,而不知道也无须知道数据的具体结构以及实现操作的算法,这称为对象的 1。(分数:2.00)填空项 1:_40.软件工程研究的内容主要包括 1 技术和软件工程管理。(分数:2.00)填空项 1:_41.有如下类声明:class MyClassint i;private:int j;protected:int k;public:int m,n;其中,私有成员的数量为_。(分数:2.00)填空项 1:_42.对基类数据
22、成员的初始化必须派生类的构造函数中的 1 处执行。(分数:2.00)填空项 1:_43.下列程序输出结果为:#includeiostreamusing namespace std;class TestClass1public:TestClass1()TestClass1(int i)x1=i;void dispa()cout“x1=“x1“,“;private:int x1;class TestClass2:public TestClass1public:TestClass2()TestClass2(int i):TestClass1(i+10)x2=i;void dispb()dispa()
23、;cout“x2=“x2endl;private:int x2;int main()TestClass2 b(2);b.dispb();return 0;(分数:2.00)填空项 1:_44.下列程序的输出结果为:Objectid=OObiectid=1请将程序补充完整。#includeiostreamusing namespace std;class Pointpublic:Point(int xx=0,int yy=0)X=xx;Y=yy;countP+;Point()countP-;int GetX()return X;int GetY()return Y;static void Get
24、C()cout“Object id=“countPendl;private:int X,Y;static int countP;_/静态数据成员的初始化int main()Point:GetC();Point A(4,5);A.GetC();return 0;(分数:2.00)填空项 1:_45.假定用户没有给一个名为 MyClass的类定义析构函数,则系统为其定义的默认析构函数首部形式为 1。(分数:2.00)填空项 1:_46.创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数。下列程序涉及对象数组的创建和单个对象的创建,其输出结果是
25、_。#includeiostreamusing namespace std;class Foopublic:Foo(int x)coutA;Foo();int main()Foo f3,g(3);return 0;(分数:2.00)填空项 1:_47.多数运算符既能作为类的成员函数重载,也能作为类的非成员函数重载,但运算符只能作为类的 1函数重载。(分数:2.00)填空项 1:_48.下面是复数类 complex的定义,其中重载的运算符“+”的功能是返回一个新的复数对象,其实部等于两个操作对象实部之和,虚部等于两个操作对象虚部之和;请补充完整。class complexdouble real;
26、 /实double imag; /虚部public:complex( double r, double i):real(r),imag(i)complex operator + (complex a)return complex(_);(分数:2.00)填空项 1:_49.已知一个函数模板定义为:templatetypename T1, typename T2T1 FUN(T2 n)return n*5.0;若要求以 int型数据 7为函数实参调用该模板函数,并返回一个 double型数据,则该调用应表示为_。(分数:2.00)填空项 1:_50.执行下列语句后,变量 sum的值是_。int
27、sum=0;for(int i=1;i=3;i+)for(int j=1;j=i;j+)sum+;(分数:2.00)填空项 1:_二级 C+笔试-275 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有如下程序:#includeiostreamusing namespace std;class Partpublic:Part(int x=0):val(x) coutval;Part()coutval;private:int val;class Wholepublic:Whole(int x ,int y, int z=0):p2(x),p1
28、(y),val(z)coutval;Whole()coutval;private:Part p1,p2;int val;int main()Whole obj(1,2,3);return 0;程序的输出结果是( )。(分数:2.00)A.123321B.213312 C.213D.123123解析:解析 此题考查的是类的构造与析构。在建立类的对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右),接着执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序,最后执行自身的构造函数。析构顺序与之相反。本题中,Whole类中有两个 Part类
29、的成员 p1和 p2,根据它们定义的顺序,先构造 p1再构造 p2。所以,首先被构造的是 p1(y),输出 2;第二个被构造的是 p2(x),输出 1;最后调用析构函数,输出 val的值 3;析构函数调用顺序与构造函数相反。故最后输出 213312。2.类 MyClass的定义如下:class MyClasspublic:MyClass( )value=0;SetVariable(int i)value=i;private:int value;则对下列语句序列正确的描述是( )。MyClass*P, my; p=(分数:2.00)A.语句 p= 是把对象 my赋值给指针变量 PB.语句 MyC
30、lass*p, my; 会调用两次类 MyClass的构造函数C.对语句*P. SetVariable(5)的调用是正确的D.语句 p-SetVariable(5)与语句 my.SetVariable(5)等价 解析:解析 选项 A),语句 p=,由于 p只是一个指向对象的指针,因此定义指针 p不调用构造函数,所以此语句只调用一次构造函数;对成员函数的引用可以通过两种形式:指针-成员函数(形参表)或者对象名成语函数名(形参表),故选项 C)错误,选项 D)正确。3.使用白盒测试法时,确定测试数据应该根据( )和指定的覆盖标准。(分数:2.00)A.程序的内部逻辑 B.程序的复杂结构C.使用说明
31、书D.程序的功能解析:解析 白盒测试是把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构及相关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试。所以,白盒测试的对象基本上是源程序,以程序的内部逻辑和指定的覆盖标准测试数据。4.下列程序的输出结果为( )。#includeiostream.hclass TestClasspublic:TestClass ()val+;static int val;int TestClass:val=0;void main()TestClass cs1;coutcs1.val“;TestClass cs2;TestClass cs3,cs4;
32、coutcs2.valendl;(分数:2.00)A.03B.13C.14 D.24解析:解析 由主函数 main入手,定义 TestClass类的对象 cs1,执行 cs1.val,其中 val为静态变量,根据“int TestClass:val=0;”初始化,TestClass 中的 TestClass()val+;)构造函数执行后,val 值为 1。主函数中接着定义对象 cs2,cs3,cs4。执行“coutcs2.valendl;”中的 val值为 4,所以输出为 14。5.有如下程序:#includeiostreamusing namespace std;int main()cout
33、.fill(*);cout.width(5);coutscientific314.15926535endl;return 0;程序运行后,输出的结果是( )。(分数:2.00)A.3.141593e+002 B.3.1416e+002C.*3.14e+002D.314.16解析:解析 cout.fill()用于设置或返回输出的填充字符,默认是空格,fill()函数的设置一直有效,直到下一个 fill()函数改变该值为止。cout.width()用于设置或返回(不带参数)输出数据的字段宽度,此函数的设置只对下一个输出有效。6.有如下程序:#includeiostreamusing namespa
34、ce std;class MyClasspublic:MyClass(int x):val(x) void Print() const cout“const:val=“val/t;void Print() cout“val=“valt;private:int val;int main()const MyClass obj1(10);MyClass obi2(20);obj1.Print();obj2.Print();return 0;程序的输出结果是( )。(分数:2.00)A.val=10 const:val=20B.const:val=10 const:val=20C.const:val=
35、10 val=20 D.val=10 val=20解析:解析 此题考查的是常成员函数的重载。常成员函数是使用 const关键字说明的函数。COHM 关键字可用于区分重载函数。此时,常对象调用常成员函数,一般对象调用一般成员函数;题目中的 Print()就是通过 const重载的两个成员函数,主函数中声明的。obj1 是常对象,obj2 是一般对象。故输出结果是 const:val=10 val=20。7.已知类 Myst有一个只需要一个 double型参数的构造函数,且将运算符“-”重载为友元函数。要使语句序列( )。Myst x(3.2),y(5.5),z(0.0);z=8.9-y;y=x-
36、6.3;能够正常运行,运算符函数 operator-应该在类中声明为( )。(分数:2.00)A.friend Myst operator-(MystB.friend Myst operator-(Myst,Myst); C.friend Myst operator-(Myst,MystD.friend Myst operator-(Myst解析:解析 此题需要注意的是,运算符重载函数的两个参数,应该是类 Myst的对象,而不是引用,所以正确的声明语句是 friend Myst operator-(Myst,Myst);。8.算法的时间复杂度是指( )。(分数:2.00)A.执行算法程序所需要
37、的时间B.算法程序的长度C.算法执行过程中所需要的基本运算次数 D.算法程序中的指令条数解析:解析 所谓的算法时间复杂度是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。9.使用 ifstream流类定义流对象并打开磁盘文件时,文件的隐含打开方式为( )。(分数:2.00)A.ios:inB.ios:outC.ios:inlios:outD.没有默认 解析:解析 使用 ifstxeam流类定义流对象并打开磁盘文件时,文件没有默认的打开方式。其中ios:in是为输入而打开;iso:out 是为输出而打开。10.下列是关于派生类声明的开始部分,其中正确的是
38、( )。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual publicA 解析:解析 声明派生类的一般形式:class 派生类名:继承方式基类名。其中继承方式包括public,private,protected。所以选项 A),选项 B)错误。而 virtual为 C+中的关键字,所以选项 C)错。虚函数的使用方法是在基类用 virtual声明成员函数为虚函数。11.有如下程序:#includeiostreamusing namespa
39、ce std;class TestClass1public:TestClass1 ()cout“ TestClass1“;TestClass1 ()cout“ TestClass1“;class TestClass2:public TestClass1TestClass1 *p;public:TestClass2()cout“ TestClass2“;p=new TestClass1();TestClass2()cout“TestClass2“;delete p;int main()TestClass2 obj;return 0;(分数:2.00)A.TestClass2TestClass1T
40、estClass1TestClass1TestClass2TestClass1B.TestClass1TestClass2TestClass1TestClass2TestClass1TestClass1 C.TestClass2TestClass1TestClass1TestClass2TestClass1TestClass1D.TestClass1TestClass2TestClas1TestClass1TestClass2TestClass1解析:解析 派生类中构造函数的执行顺序是:先调用基类构造函数,对基类数据成员初始化,然后调用子对象构造函数,对子对象数据成员初始化;最后执行派生类构造
41、函数本身,对派生类数据成员初始化。由主函数 mian入手,首先定义了一个 TestClass2对象 obj。其中 TestClass2公共继承 TestClass1,对象 obi可以访问 TestClass1中的公有成员函数。TestClass2 中定义了一个 TestClass1的指针 p,给 p分配新空间,即指向类 TastClass1,输出“TestClass1”。在 TestClass2 的构造函数中首先输出“TestClass2”,并在 TestClass1构造函数中输出“TestClass1”。TestClass2 析构函数中输出“TestClass2”,删除指针 p,输出“Tes
42、tClass1”。析构 TestClass1输出“TestClass1”。12.有如下程序;#includeiostreamusing namespace std;class DA int k;public:DA(int x=1):k(x)DA( )coutk;int main( )DA d=DA(3),DA(3),DA(3);DA *p=new DA2;delete p;return ();这个程序的输出结果是( )。(分数:2.00)A.111B.333C.11333 D.11133解析:解析 此题考查的是析构函数和对象的生存期。在主函数中,首先定义了一个 DA类对象数组 d,从初始化列表
43、中可以看出,它包含 3个对象;然后通过 new运算符动态创建了一个 DA类的对象数组,并将首地址赋给 DA类指针 p;接着通过 delete运算符销毁指针 p所指向的数组,故此时会输出“11”。最后函数结束,销毁前面定义的对象数组 d,会输出“333”。故最后的输出结果是 11333。13.在下列程序的横线处填上适当的内容,使程序执行后的输出结果为 ABCD。#includeiostreamusing namespace std;class Apublic:A()coutA;class B: _public:B()coutB;class C:virtual public Apublic:C()
44、coutC;class D:public B,public Cpublic:D()coutD;void main()D obj;(分数:2.00)A.public AB.private AC.protected AD.virtual public A 解析:解析 由主函数 mian入手,定义了类 D对象 obj。其中 D为类 B和 C的公有继承,A 是 C的虚基类。题目中要求的输出结果为“ABCD”,依次为类 A,类 B,类 C,类 D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保证 A只被继承一次,输出一个 A,所以不但需要声明 A为 C的虚基类,同样也要声明 A为 B的
45、虚基类。14.如果派生类以 protected方式继承基类,则原基类的 protected成员和 public成员在派生类中的访问属性分别是( )。(分数:2.00)A.public和 publicB.public和 protectedC.protected和 publicD.protected和 protected 解析:解析 此题考查的是基类成员在派生类中的访问属性。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私
46、有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。15.对关系 S和 R进行集合运算,结果中既包含 S中的所有元组也包含 R中的所有元组,这样的集合运算称为( )。(分数:2.00)A.并运算 B.交运算C.差运算D.积运算解析:解析 关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。16.下列描述中,不是线性表顺序存储结构特征的是( )。(分数:2.00)A.不便于插入和删除B.需要连续的存储空间C.可随机访问D.需另外开辟空间来保存元素之间的关系 解析:解析 线性表的顺序存储是用一片连续的空
47、间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。17.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是( )。(分数:2.00)A.DB包括 DBS和 DBMSB.DBMS包括 DB和 DBSC.DBS包括 DB和 DBMS D.没有任何关系解析:解析 数据库系统(DBS)由数据库(DB)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台 5个部分组成,可见 DB和 DBMS都是 DBS的组成部分。18.下列关于构造函数和析构函数的描述,错误的是( )。(分数:2.00)A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数 解析:解析 构造函数的主要作用是对数据成员初始化。构造函数不能声明为虚函数,这是因为在执行构造函数时类对象还未完成建立过程,当然谈不上函数与类对象的关联。19