构造函数练习题
- 格式: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.类的静态数据成员必须进行初始化