还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
构造函数试题及答案
一、单项选择题(共30题,每题1分)(以下题目均为单选题,每题只有一个正确答案)在C++中,关于构造函数的描述,正确的是()A.构造函数必须有返回值B.构造函数的名称与类名不同C.构造函数在对象创建时自动调用D.构造函数不能被重载若一个类中未显式定义任何构造函数,则编译器会自动生成()A.带参数的构造函数B.无参的默认构造函数C.拷贝构造函数D.析构函数以下关于构造函数的说法,错误的是()A.构造函数可以有参数B.构造函数可以是虚函数C.构造函数不能被显式调用D.构造函数可以是内联函数当创建对象时,若类中定义了带参数的构造函数,但未定义无参构造函数,则()A.无法创建对象B.可以通过无参方式创建对象(编译器自动生成无参构造函数)C.必须通过带参数方式创建对象D.会导致编译错误以下代码中,类A的构造函数调用顺序正确的是()第1页共15页class A{public:Aint x{cout Aintendl;}A{cout Aendl;}A.定义对象A a;时,调用AB.定义对象A a10;时,调用AintC.定义对象数组A arr
[2];时,只调用一次AD.以上都不正确拷贝构造函数的参数类型通常是()A.本类对象的值传递B.本类对象的引用C.其他类对象的指针D.任意类型当对象作为函数参数传递时,会自动调用()A.默认构造函数B.带参数构造函数C.拷贝构造函数D.析构函数以下关于构造函数的特性,错误的是()A.构造函数与类名同名B.构造函数不能被声明为explicitC.构造函数可以是静态成员函数D.构造函数可以访问类的私有成员类B继承自类A,若类A有带参数的构造函数,类B的构造函数中需通过初始化列表调用类A的构造函数,正确的写法是()第2页共15页A.Bint x:Ax{}B.Bint x{Ax;}C.Bint x{A::Ax;}D.Bint x{A;}关于初始化列表,以下说法正确的是()A.初始化列表只能在构造函数中使用B.初始化列表中的成员初始化顺序与列表顺序无关C.初始化列表可以为常量成员赋值D.初始化列表比构造函数体内赋值效率低当类中定义了拷贝构造函数后,编译器会()A.不再生成默认构造函数B.不再生成默认析构函数C.生成默认构造函数和默认析构函数D.以上都有可能以下代码中,对象b的拷贝构造函数被调用的次数是()class A{public:A{cout默认构造endl;}Aconst Aother{cout拷贝构造endl;}A a;//
①A ba;//
②A c=a;//
③A d;d=a;//
④A.1次B.2次第3页共15页C.3次D.4次关于默认构造函数,以下说法错误的是()A.无参构造函数是默认构造函数B.当类中没有定义任何构造函数时,编译器生成默认构造函数C.当类中定义了带参数的构造函数,编译器仍会生成默认构造函数D.若类中包含其他类的对象成员,且该成员没有默认构造函数,则类必须定义默认构造函数构造函数不能被()A.显式调用B.隐式调用C.作为友元函数调用D.以上都可以在C++中,以下关于构造函数的描述,正确的是()A.构造函数可以有返回值voidB.构造函数可以被声明为constC.构造函数可以是内联函数D.构造函数不能被继承类C的构造函数中,若使用初始化列表初始化成员变量,以下说法正确的是()A.初始化列表中的成员必须按声明顺序初始化B.初始化列表中的成员可以使用this指针C.初始化列表比构造函数体内赋值更高效D.初始化列表只能初始化基本数据类型成员当类中包含指针成员时,为避免浅拷贝问题,应显式定义()第4页共15页A.默认构造函数B.带参数构造函数C.拷贝构造函数D.析构函数以下关于构造函数与析构函数的对比,错误的是()A.构造函数在对象创建时调用,析构函数在对象销毁时调用B.构造函数可以有参数,析构函数不能有参数C.构造函数可以被继承,析构函数不能被继承D.构造函数不能是虚函数,析构函数可以是虚函数类D有成员int x;,若类D的构造函数为Dint a{x=a;},则以下代码中会调用构造函数的是()A.D d;B.D d=10;C.D*p=new D20;D.d=D30;关于构造函数的重载,以下说法正确的是()A.构造函数不能重载B.重载的构造函数参数列表必须不同C.重载的构造函数返回类型必须不同D.重载的构造函数只能在类内定义当类E继承自类F,且类F没有无参构造函数时,类E的构造函数必须()A.只定义带参数的构造函数B.通过初始化列表调用类F的带参构造函数C.定义默认构造函数和带参构造函数第5页共15页D.无需处理,编译器自动生成以下代码中,对象obj的构造函数被调用的次数是()class A{public:A{cout Aendl;}A obj;//
①A*p=new A;//
②delete p;//
③A.1次B.2次C.3次D.0次拷贝构造函数的参数必须是()A.本类对象的引用B.本类对象的指针C.其他类对象的引用D.任意类型的引用关于构造函数的调用时机,以下说法错误的是()A.用new创建对象时调用构造函数B.用new[]创建对象数组时,每个元素调用一次构造函数C.对象作为函数返回值时,一定调用拷贝构造函数D.声明对象时,若定义了带参构造函数,必须显式传参类G的构造函数中,若成员变量a是const int类型,则必须通过()初始化A.默认构造函数第6页共15页B.带参数构造函数C.初始化列表D.构造函数体内赋值以下关于“构造函数不能被继承”的原因,正确的是()A.构造函数与类名同名,子类无法重名B.构造函数是私有的C.构造函数的调用需要对象实例,而继承时子类构造函数需先调用父类构造函数D.构造函数返回类型不是void当类H包含一个没有默认构造函数的成员对象m时,类H的构造函数必须()A.定义默认构造函数B.通过初始化列表初始化mC.先调用m的默认构造函数,再初始化H的成员D.无需处理,编译器自动生成以下代码中,会调用拷贝构造函数的是()A.int a=5;int b=a;B.string s1=hello;string s2=s1;C.A a;A b;b=a;D.int*p=new int10;int*q=p;关于构造函数的参数,以下说法正确的是()A.构造函数的参数可以有默认值B.构造函数的参数必须有默认值C.构造函数的参数不能有默认值D.构造函数的参数默认值只能在类内定义第7页共15页当类I的构造函数被声明为explicit时,以下说法正确的是()A.不能通过带参数的方式创建对象B.不能通过无参方式创建对象C.不能通过初始化列表初始化D.不能隐式转换创建对象
二、多项选择题(共20题,每题2分)(以下题目均为多选题,每题至少有两个正确答案)构造函数的特点包括()A.函数名与类名相同B.无返回值C.对象创建时自动调用D.可以显式调用构造函数的分类包括()A.默认构造函数B.带参数构造函数C.拷贝构造函数D.移动构造函数关于默认构造函数,以下描述正确的有()A.无参构造函数是默认构造函数B.编译器生成的默认构造函数会初始化基本数据类型成员为不确定值C.若类中定义了带参数的构造函数,编译器仍会生成默认构造函数D.若类中包含其他类的对象成员,且该成员有默认构造函数,则类的默认构造函数会调用该成员的默认构造函数拷贝构造函数的作用包括()A.复制对象的值第8页共15页B.实现对象的深拷贝C.作为函数参数传递时的初始化D.作为函数返回值时的初始化初始化列表的优点包括()A.提高初始化效率B.初始化const成员变量C.初始化引用成员变量D.可以直接调用父类构造函数构造函数与普通成员函数的区别包括()A.构造函数无返回值,普通函数可以有返回值B.构造函数与类名同名,普通函数可以与类名不同C.构造函数不能被显式调用,普通函数可以D.构造函数在对象创建时自动调用,普通函数需显式调用继承体系中,构造函数的调用顺序正确的有()A.先调用父类的构造函数,再调用子类的构造函数B.若父类有多个构造函数,子类构造函数通过初始化列表选择父类的带参构造函数C.虚继承时,虚基类的构造函数最先调用D.若子类构造函数未显式调用父类构造函数,默认调用父类的无参构造函数以下关于this指针的说法,正确的有()A.构造函数中可以使用this指针B.this指针指向当前对象C.this指针的类型是类类型的指针D.this指针是构造函数的隐含参数第9页共15页关于构造函数的访问权限,以下说法正确的有()A.构造函数可以是publicB.构造函数可以是privateC.若构造函数是private,则只能通过友元函数或静态成员函数创建对象D.构造函数的访问权限不影响其调用当类中定义了以下哪些函数时,编译器不会再生成默认构造函数()A.带参数的构造函数B.拷贝构造函数C.析构函数D.赋值运算符重载关于构造函数的重载,以下说法正确的有()A.重载的构造函数参数列表必须不同(参数个数或类型)B.重载的构造函数可以有不同的访问权限C.重载的构造函数可以在类内或类外定义D.重载的构造函数必须在类内定义以下关于“浅拷贝”和“深拷贝”的说法正确的有()A.浅拷贝会导致指针成员指向同一块内存B.当类中包含指针成员时,必须定义深拷贝构造函数C.浅拷贝是编译器自动生成的,深拷贝需要显式定义D.深拷贝会为指针成员分配新的内存空间构造函数不能被()A.声明为staticB.声明为constC.声明为virtual第10页共15页D.声明为explicit当类J包含一个string类型的成员变量时,以下构造函数中正确的有()A.J{}(编译器生成,调用string的默认构造函数)B.Jstring s{str=s;}(调用string的拷贝构造函数)C.Jstring s:strs{}(通过初始化列表,调用string的拷贝构造函数)D.Jconst Jother{str=other.str;}(深拷贝)关于“构造函数初始化列表”与“构造函数体内赋值”的区别,以下说法正确的有()A.初始化列表在构造函数体执行前完成初始化B.初始化列表只能初始化成员变量,不能执行其他逻辑C.对于const成员变量,只能在初始化列表中初始化D.初始化列表的效率通常高于构造函数体内赋值以下代码中,会调用构造函数的有()A.A a;B.A*p=new A;C.A b=A;D.A cA;(注意此处为函数声明,非对象创建)类K的构造函数中,若成员变量x是int类型,y是int*类型,以下构造函数正确的有()A.Kint a,int b{x=a;y=new intb;}B.Kint a,int b:xa,ynew intb{}C.Kint a,int b{x=a;y=b;}(错误,int*不能直接赋值int)第11页共15页D.Kconst Kother{x=other.x;y=new int*other.y;}关于“默认构造函数”和“无参构造函数”的关系,以下说法正确的有()A.无参构造函数是默认构造函数B.默认构造函数不一定是无参构造函数C.若没有定义任何构造函数,编译器生成的默认构造函数是无参的D.若定义了带参构造函数,无参构造函数不会被编译器生成构造函数的调用可能发生在以下哪些场景()A.声明对象时B.用new创建对象时C.对象作为函数参数传递时(按值传递)D.对象作为函数返回值时(按值返回)以下关于“构造函数与继承”的说法,正确的有()A.子类构造函数必须调用父类的构造函数(直接或间接)B.子类构造函数通过初始化列表调用父类构造函数时,父类构造函数必须有对应的参数C.若父类只有带参构造函数,子类构造函数必须通过初始化列表调用父类构造函数D.子类析构函数不会调用父类析构函数,需显式调用
三、判断题(共20题,每题1分)(对的打“√”,错的打“×”)构造函数的返回类型可以是void()若类中没有定义任何构造函数,编译器会自动生成默认构造函数()构造函数可以被继承()第12页共15页拷贝构造函数的参数可以是本类对象的引用()初始化列表中的成员初始化顺序必须与类中成员声明顺序一致()当用new[]创建对象数组时,每个数组元素都会调用一次构造函数()构造函数不能是explicit类型()类的静态成员变量可以在构造函数中初始化()构造函数在对象销毁时被调用()若类中包含其他类的对象成员,且该成员没有默认构造函数,则类必须定义带参构造函数()构造函数可以是友元函数()拷贝构造函数是在对象赋值时自动调用的()初始化列表比构造函数体内赋值更高效()构造函数可以被声明为const()当用=定义对象时(如A a=10;),会调用带参数的构造函数()虚基类的构造函数在继承体系中会被最先调用()构造函数不能作为函数参数传递()若类的构造函数是私有的,则无法通过该类创建对象()重载的构造函数参数列表必须不同()当类中定义了拷贝构造函数后,编译器不会再生成默认构造函数()参考答案
一、单项选择题(共30题,每题1分)C
2.B
3.BC
5.B
6.B
7.C
8.C
9.A
10.C第13页共15页A
12.B
13.C
14.A
15.C
16.C
17.C
18.C
19.C
20.BB
22.B
23.A
24.D
25.C
26.C
27.B
28.B
29.A
30.D
二、多项选择题(共20题,每题2分)ABCD
2.ABCD
3.ABD
4.ABCD
5.ABCDABD
7.ABCD
8.ABCD
9.ABC
10.ABAB
12.ABD
13.ABC
14.ABCD
15.ACDABC
17.ABD
18.AC
19.ABCD
20.ABC
三、判断题(共20题,每题1分)×
2.√
3.×
4.√
5.×
6.√
7.×
8.√
9.×
10.√√
12.×
13.√
14.×
15.√
16.√
17.×
18.√
19.√
20.√
四、简答题(共2题,每题5分)简述构造函数的分类及各自特点答构造函数主要分为
(1)默认构造函数(无参)创建对象时自动调用,初始化成员变量为默认值;
(2)带参数构造函数可通过参数初始化对象成员,实现对象的定制化创建;
(3)拷贝构造函数用已有对象初始化新对象,实现对象的复制,通常参数为对象引用;
(4)移动构造函数用于资源转移(如动态内存),参数为对象右值引用,避免深拷贝开销第14页共15页说明继承体系中构造函数的调用顺序规则答继承体系中构造函数调用顺序为
(1)先调用虚基类构造函数(若有多个虚基类,按声明顺序);
(2)再调用直接父类构造函数(若有多个父类,按继承声明顺序);
(3)调用子类构造函数,且子类构造函数通过初始化列表调用父类构造函数时,父类构造函数先于子类构造函数体执行(注简答题答案符合“简短不超过150字”要求,实际答题时可根据具体语言(如C++/Java)调整细节,此处以通用规则为例)第15页共15页。
个人认证
优秀文档
获得点赞 0