构造函数练习题

  • 格式:docx
  • 大小:25.82 KB
  • 文档页数:7

1. Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是()。

Sample a[2],*p=new Sample;

A.0

B.1 C.2

D.3

2.

Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是()。

Sample a[2],*p;

A.0

B.1

C.2

D.3

3. Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是()。

Sample a(2),*p;

A.0 B.1 C.2 D.3

4. 若PAT是一个类,则程序运行时,语句“PAT(*ad)[3];”调用PAT的构造函数的次数是()。

A.0 B.1 C.2 D.3

5. 下列关于构造函数的描述中,错误的是()。

A.构造函数名与类名相同

B.构造函数可以重载

C.构造函数可以有返回值

D.每个类都有构造函数

6. 假定MyClass为一个类,则执行MyClass a,b(2),*p;语句时,自动调用该类构造函数()次。

A.2 B.3 C.4 D.5

7. 有以下程序:

class Date

{public:

Date(int y,int m,int d);

{year=y:

month=m;

day=d;

}

Date(int y=2000)

{year=y;

month=10; day=1;

}

Date(Date &d)

{year=d.year;

month=d.month;

day=d.day;

}

void print( )

{cout<

int year,month,day;

};

Date fun(Date d)

{Date temp;

temp=d; return temp; }

int main(

)

{Date datel(2000,1,1),date2(0,0,0);

Date date3(datel);

date2=fun(date3);

return0;

}

程序执行时,Date类的拷贝构造函数被调用的次数是( )。

A.2

B.3

C.4

D.5

答案:B。【解析】本题考核拷贝构造函数。上述程序中,拷贝构造函数一共被调用了3次:第1次是在执行语句Datedate3(date1)时,用已经建立的对象date1对正在建立的对象date3进行初始化;第2次是在调用fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行初始化;第3次是在执行fun函数中的返回语句returntemp;时,系统初始化一个匿名对象时使用了拷贝构造函数。

8. 有如下程序:

#include(iostream>

using namespace std;

class Con

{char ID;

public:

Con():ID(‘A’){cout<<1;}

Con(char ID):ID(ID){cout<<2;}

Con(Con &c):ID(c.getlD(

)){cout<<3;}

char getID( ) const{return ID;} };

void show(Con c)

{cout<

int main()

{Con c1;

show(c1);

Con c2(’B’);

show(c2);

return0;

执行上面程序的输出结果是( )。

A.13A23A

B.23A13B

C.13A23B

D.13823A

答案:C。【解析】Concl定义cl对象,调用Con的无参数构造函数,输出1,ID值变为A,执行show(c1)时会调用拷贝构造函数,将cl对象的值复制给show函数的形参,此时输出3,然后在show()中输出cl的lD值A,Conc2(’B’)定义c2对象,调用Con(charID)构造函数,输出2,c2的ID值为B,show(c2)执行时先调用拷贝构造函数输出3,然后输出B。因此程序输出结果为“13A23B”。

9. 不会调用拷贝构造函数的是( )。

A.用一个对象去初始化同一个类的另一个新对象时

B.将类的一个对象赋值给该类的另外一个对象时

C.当函数的参数为类的对象,进行函数调用时

D.函数的返回值是类的对象,在函数调用完毕将返回值带回函数调用处时。

10. 程序的运行结果是( )。

class Test

{public:

Test(){n=n+1;}

stati int n; }

int Test::n=0;

void main()

{Test t1;

cout<

Test t2,t3,t4;

cout<

}

A.00

B.11

C.12

D.13

E.14

11. 已知数组arr的定义如下:

int arr[5]={1,2,3,4,5};下列语句中输出结果不是2的是()。

A.cout<<*arr+1

B.cout<<*(arr+1)<

C. cout<

D.cout<<*arr

12. Myclass c1,*c2;

Myclass *c3=new Myclass;

Myclass &c4=c1;

上述语句序列所定义的类对象的个数是

A.1

B.2

C.3

D.4

13. 有如下程序

#include(iostream>

using namespace std;

class A{ public:

A(){cout<<’*’;}

A(A a){cout<<’#’;}

~A(){cout<<’@’;}

};

int main(

)

{A a;

A b(a);

return 0;

}

该程序的输出结果是( )。

A.*#

B.*#@

C.*#@@

D.没有任何输出

14. 下列程序段中包含4个函数,其中具有隐含this指针的是()。

int funl( );

class Test{

public:

int fun2( );

friend int fun3( );

static int fun4( );

};

A.funl

B.fun2

C.fun3

D.fun4

15. 设有以下类和对象的定义:

Class A

{public:

int m; };

A k1,k2,*p1,*p2;

则下面针对成员变量m的引用,错误的是()。

A.k1.m=1

B.k2→m=2

C.p1→m=3

D.(*p2).m=4

16. 有如下程序:

#include

using namespace std;

class A

{

public:

A(int i):r1(i){}

void print(){cout<<'E'<

void print() const{cout<<'C'<

private:

int r1;

};

int main(){

A a1(2);const A a2(4);

a1.print();a2.print();

system("pause");

return 0;

}

运行时的输出结果是( )。

A.运行时出错

B.E2一C16一

C.C4一Cl6一

D.E2一E4―

17. 若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为( )。

A.a

B.AA.a

C.a{} D.AA:a{}

18. 下列叙述中正确的是(

)。

A.全局变量的作用域一定比局部变量的作用域范围大

B.静态类别变量的生存期贯穿于整个程序的运行期间

C.函数的形参都属于全局变量

D.未在定义语句中赋初值的aut0变量和static变量的初值都是随机值

19. 下列关于成员函数特征的描述中,错误的是(

)。

A.成员函数一定是内联函数

B.成员函数可以重载

C.成员函数可以设置参数的默认值

D.成员函数可以是静态的

20. 关于静态数据成员的描述中正确的是( )。

A.类的静态数据成员不是类的所有对象共享的数据

B.类的静态数据成员不能被类的成员函数调用

C.类的静态数据成员不能被类的构造函数调用

D.类的静态数据成员必须进行初始化