作为类的对象成员,在什么时候执行构造函数实例化对象和析构函数

2012年6月 挨踢职涯大版内专家分月排行榜第二2012年4月 挨踢职涯大版内专家分月排行榜第二2012年2月 挨踢职涯大版内专家分月排行榜第二
2013年5月 挨踢职涯大版内专家分月排行榜第三2012年5月 挨踢职涯大版内专家分月排行榜第三2012年3月 挨踢职涯大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。C语言程序设计A练习题
一、填空题
1.一个类的__________函数实现对该类对象的初始化功能。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案构造
2.一个类的__________函数通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案析构
3.当用户为一个类定义有____________时,则系统不会为该类再自动生成一个默认构造函数。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案构造函数
4.假定用户没有给一个名为AB的类定义构造函数,则系统为其定义的构造函数为__________。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案AB() {}
5.假定用户没有给一个名为AB的类定义析构函数,则系统为其定义的析构函数为__________。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案~AB() {}
6.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案无参构造函数
7.为了释放类对象中指针成员所指向的动态存储空间,则需要为该类定义____________。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案析构函数
8.假定 AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类构造函数的次数为________。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案10
9.假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类析构函数的次数为________。
知识点提示暂无知识点
要点提示暂无要点提示
10.对类中对象成员的初始化是通过在构造函数中给出的______________来实现的。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案初始化表
11.对类中常量成员的初始化是通过在构造函数中给出的______________来实现的。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案初始化表
12.对类中引用成员的初始化只能通过在构造函数中给出的______________来实现。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案初始化表
13.对类中一般数据成员的初始化既可以通过在构造函数中给出的初始化表来实现,也可以通过构造函数中的____________来实现。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案函数体
14.假定AB类中只包含一个整型数据成员a,并且它是一个常量成员,若利用参数aa对其进行初始化,则该类的构造函数的定义为____________________。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案AB(int aa):a(aa){};
15.假定AB类中只包含一个整型数据成员a,并且它是一个引用成员,若利用引用参数aa对其进行初始化,则该类的构造函数的定义为____________________。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案AB(int& aa):a(aa){};
16.假定指针p指向一个动态分配的类对象,则当执行“”语句时,在释放p所指向的动态存储空间之前将自动调用该类的____________。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案析构函数
17.假定用户为类AB定义了一个构造函数“AB(int aa) {a=}”,则系统(会/不会)_________为该类自动定义一个无参构造函数"AB() {}"。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案不会
18.假定用户为类AB定义了一个构造函数“AB(int aa, char *bb=NULL):a(aa),b(bb){}”,则该类中至少包含有__________个数据成员。
知识点提示暂无知识点
要点提示暂无要点提示
19.假定用户为类AB定义了一个构造函数“AB(int aa) {a=}”,该构造函数实现对数据成员_________的初始化。
知识点提示暂无知识点
要点提示暂无要点提示
20.假定AB为一个类,该类中含有一个指向动态数组空间的指针成员pa,则在该类的析构函数中应该包含有一条______________语句。
知识点提示暂无知识点
要点提示暂无要点提示
参考答案delete []
二、选择题
1.对于一个类的构造函数,其函数名与类名( )。
A. 完全相同
B. 基本相同
知识点提示暂无知识点
要点提示暂无要点提示
2.对于一个类的析构函数,其函数名与类名( )。
A. 完全相同
B. 完全不同
C. 只相差一个字符
知识点提示暂无知识点
要点提示暂无要点提示
3.类的构造函数是在定义该类的一个( )时被自动调用执行的。
A. 成员函数
B. 数据成员
D. 友元函数
知识点提示暂无知识点
要点提示暂无要点提示
4.类的析构函数是一个对象被( )时自动调用的。
知识点提示暂无知识点
要点提示暂无要点提示
5.一个类的构造函数通常被定义为该类的( )成员。
知识点提示暂无知识点
要点提示暂无要点提示
6.一个类的析构函数通常被定义为该类的( )成员。
知识点提示暂无知识点
要点提示暂无要点提示
7.假定AB为一个类,则执行 “AB”语句时将自动调用该类的( )。
A. 带参构造函数
B. 无参构造函数
C. 拷贝构造函数
D. 赋值重载函数
知识点提示暂无知识点
要点提示暂无要点提示
8.假定AB为一个类,则执行 “AB x(a,5);”语句时将自动调用该类的( )。
A. 带参构造函数
B. 无参构造函数
C. 拷贝构造函数
D. 赋值重载函数
知识点提示暂无知识点
要点提示暂无要点提示
9.假定AB为一个类,则执行 “AB r1=r2;”语句时将自动调用该类的( )。
A. 无参构造函数
B. 带参构造函数
C. 赋值重载函数
D. 拷贝构造函数
知识点提示暂无知识点
要点提示暂无要点提示
10.若需要使类中的一个指针成员指向一块动态存储空间,则通常在( )函数中完成。
C. 任一成员
知识点提示暂无知识点
要点提示暂无要点提示
11.假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为( )。
A. AB() {a=0;}
B. AB(int aa=0): a(aa) {}
C. AB(int aa): a(aa) {}
D. AB() {}
知识点提示暂无知识点
要点提示暂无要点提示
12.假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为( )。
A. AB() {}
B. AB(): a(0){}
C. AB(int aa=0) {a=}
D. AB(int aa) {}
知识点提示暂无知识点
要点提示暂无要点提示
13.对于任一个类,用户所能定义的构造函数的个数至多为( )。
知识点提示暂无知识点
要点提示暂无要点提示
14.对于任一个类,用户所能定义的析构函数的个数至多为( )。
知识点提示暂无知识点
要点提示暂无要点提示
15.设px是指向一个类对象的指针变量,则执行 “”语句时,将自动调用该类的( )。
A. 无参构造函数
B. 带参构造函数
C. 析构函数
D. 拷贝构造函数
知识点提示暂无知识点
要点提示暂无要点提示
16.当一个类对象离开它的作用域时,系统自动调用该类的( )。
A. 无参构造函数
B. 带参构造函数
C. 拷贝构造函数
D. 析构函数
知识点提示暂无知识点
要点提示暂无要点提示
17.假定一个类对象数组为A[n],当离开它定义的作用域时,系统自动调用该类析构函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
18.假定AB为一个类,则执行 “AB a[10];”语句时调用该类无参构造函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
19.假定AB为一个类,则执行 “AB *px=new AB[n];”语句时调用该类无参构造函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
20.假定AB为一个类,则执行 “AB a, b(3), *p;”语句时共调用该类构造函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
21.假定AB为一个类,则执行 “AB a(2), b[3], *p[4];”语句时共调用该类构造函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
22.假定AB为一个类,则执行“AB a, b(2), c[3], *p=&a;”语句时共调用该类无参构造函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
23.假定AB为一个类,则执行“AB *p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
24.假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete []”语句时共调用该类析构函数的次数为( )。
知识点提示暂无知识点
要点提示暂无要点提示
25.对类对象成员的初始化是通过构造函数中给出的( )实现的。
B. 初始化表
D. 初始化表或函数体
知识点提示暂无知识点
要点提示暂无要点提示
26.对类中常量成员的初始化是通过构造函数中给出的( )实现的。
C. 初始化表
D. 初始化表或函数体
知识点提示暂无知识点
要点提示暂无要点提示
27.对类中引用成员的初始化是通过构造函数中给出的( )实现的。
C. 初始化表
D. 初始化表或函数体
知识点提示暂无知识点
要点提示暂无要点提示
28.类的构造函数可以带有( )个参数。
知识点提示暂无知识点
要点提示暂无要点提示
29.类的析构函数可以带有( )个参数。
知识点提示暂无知识点
要点提示暂无要点提示
三、程序设计题
int *a;& //
Array(int aa[], int nn);& //数组长度nn初始化n,
&&&&&&&&& &&&&&&&&&&&&&&&&//数组初始化a所指向的数组空间
Array(Array& aa);& &//
Array& Give(Array& aa);& //赋值给*this的功能并返回*this
Array Uion(Array& aa);& &//和aa中的数组合并的
&&&&&&&&&&&&&&&&&&&& //
int Lenth() {}& //
void Print() {&&&&&& //
for(int i=0; i&n; i++)
cout&&a[i]&&' ';
&& &cout&&
知识点提示暂无知识点
要点提示暂无要点提示
a=new int[n];
for(int i=0; i&n; i++) a[i]=aa[i];
char *s;& //
Strings(char*str);& //字符串长度初始化n,
&&&&&&&&&&&&&&&&&&& //字符串初始化s所指的字符串空间
Strings(Strings& str);&&&&&&& //
Strings& Give(Strings& str);& //赋值给*this的功能
Strings Uion(Strings& str);&& //和str中的字符串合并的
&&&&&&&&&&&&&&&&&&&& //
int Lenth() {}&&&&&& //
void Print() {cout&&s&&} //
知识点提示暂无知识点
要点提示暂无要点提示
n=strlen(str);
s=new char[n+1];
strcpy(s,str);
四、程序填充题
A() {a=0;}
___(1)___{}& //初始化数据成员a
___(2)___;& //的指针对象p
___(3)__;&& //指向动态对象并初始化为整数5
知识点提示暂无知识点
要点提示暂无要点提示
___(1)___& //的值为空
A(char *aa) {
a=___(2)___;&
strcpy(a,aa);& //所指字符串初始化a所指向的动态存储空间
___(3)___& //所指向的动态存储空间
知识点提示暂无知识点
要点提示暂无要点提示
参考答案注:数据0可用NULL代替
___(1)___ //和bb的默认值为0,
//初始化a,用bb初始化b
A *p1, *p2;
___(2)___ ;& //指向的动态对象
___(3)___ ;& //指向的动态对象,
//和b成员分别被初始化为4和5
知识点提示暂无知识点
要点提示暂无要点提示C/C++(53)
转载自:http://blog.csdn.net/timebomb/article/details/6713774
今天看书忽然对这个地方有点模糊,尤其是析构函数在调用默认的析构函数和用户自己覆写的析构函数的时候有点意识模糊呢。写段代码总结下
1、首先直接声明(定义)看下
//很多朋友指出我这里用声明不合适,在11楼作了一定解释,具体不在这里赘述,这里改为“定义”,谢谢大家的指正,但我也保留我自己的意见,所以没有把“声明”去掉
这里看到一点java与c++的不同点,c++在声明的时候就创建了对象,java声明只是创建一个引用,并不会分配内存。言归正传,说明声明以后就调用了构造函数,然后退出的时候调用析构函数。
2、声明指针
可以看到,声明指针并不会调用构造函数,也不会分配内存空间。
3、用new创建
仅仅是调用构造函数创建了对象,分配了内存空间。但是没有调用析构函数,因为box指定的对象的内存是由new来创建分配的,编译器不能够自动调用析构函数将其删除。所以需要调用delete才可以。
4、用new创建对象,并delete掉
这次调用了析构函数。可以看出,此时的析构函数不是编译器自己调用的,是由我们的程序来主动调用的,所以以后需要注意。new了的需要手动释放内存空间
5、什么时候需要重写析构函数?
从例子可以看到,当你的构造函数中调用了new来创建对象的内存分配空间,则需要专门调用delete来释放内存,所以此时需要覆写析构函数,来专门的释放此内存空间
6、对象的形参传值问题:(话外题,仅作记录用)
先看代码及运行结果
如果将上面的display代码改为
可以明显的看到不加引用的时候会出现两个析构函数的调用。为什么呢?
直接传参,是形参传递,所以会另外创建一个对象来复制main函数里的对象box,所以在display调用完成时刻要调用析构函数来释放这个函数创建的形参对象的内存空间。但是如果是传递的引用,就只有一个参数对象了,所以只调用一个。
如果是平时的基本类型,你应该了解,直接把main里的box的值复制给形参box就是了,但是到了对象这里就有点复杂,如果是里面就是单纯的像上面的例子一样double类型等,其自带有复制函数就可以将各个成员值复制到形参对象里,但是如果里面有引用,比如char *pp = new char[100],那么复制的只是地址,两个对象公用一个地址,有可能就会造成错误。所以以后需要注意这一点,调用对象需要用引用哦。。。。。(要不你自己另写一个复制函数。)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34184次
排名:千里之外
原创:37篇
转载:116篇
(2)(5)(2)(22)(7)(12)(31)(35)(7)(3)(10)(6)(12)2008年11月 扩充话题大版内专家分月排行榜第二
2012年1月 扩充话题大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
求大工13秋《C/C++语言程序设计》在线作业2一、单选题(共 10 道试题,共 50 分.)V1.当一个类对象离开它的作用域时,系统将自动调用该类的( ).A.构造函数B.拷贝构造函数C.析构函数D.默认构造函数满分:5 分2.说明类中保护成员的关键字是( ).A.privateB.publicC.protectedD.friend满分:5 分3.类中将关键字( )写在函数体之前函数头之后,说明该函数是一个常成员函数(或const成员函数),可以防止函数改变数据成员的值.A.constB.staticC.friendD.void满分:5 分4.下列哪个函数的作用是字符串比较( ).A.strlen()B.strcmp()C.strcat()D.strcpy()满分:5 分5.下列哪个函数不是类的成员函数.( )A.析构函数B.构造函数C.拷贝构造函数D.友元函数满分:5 分6.下列哪个函数的功能是对对象进行初始化.( )A.析构函数B.数据成员C.构造函数D.静态成员函数满分:5 分7.在定义int a[5];之后,对a的引用正确的是( ).A.a[5]B.a[4.3]C.a(5)D.a[0]满分:5 分8.说明类中私有成员的关键字是( ).A.privateB.publicC.protectedD.friend满分:5 分9.执行下面的程序段后,输出结果是( ).main(){char a[]="english";printf("%c",a[0]);}A.engliB.eC.englishD.sh满分:5 分10.在执行int a[][3]={1,2,3,4,5,6};语句后,a[0][0]的值是( ).A.4B.1C.2D.5满分:5 分——————————————————————————————————————————二、判断题(共 10 道试题,共 50 分.)V1.友元函数的关键字const.( )A.错误B.正确满分:5 分2.说明静态数据成员时,前边要加关键字static.( )A.错误B.正确满分:5 分3.作用域运算符的功能是标识某个成员是属于哪个类.( )A.错误B.正确满分:5 分4.析构函数的功能是对对象进行初始化.( )A.错误B.正确满分:5 分5.关键字中,用以说明类中公有成员的是private.( )A.错误B.正确满分:5 分6.一个类只能有一个对象.( )A.错误B.正确满分:5 分7.拷贝构造函数不是类的成员函数.( )A.错误B.正确满分:5 分8.成员函数可以重载.( )A.错误B.正确满分:5 分9.strcat()函数的作用是求字符串长度.( )A.错误B.正确满分:5 分10.delete的功能是动态分配内存.( )A.错误B.正确满分:5 分
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
好吧,我还是自己做:1.c2.c3.a4.b5.d6.c7.d8.a9.b10.b二1A2B3B4A5A6A7A8B9A10A
为您推荐:
其他类似问题
扫描下载二维码}

我要回帖

更多关于 构造函数实例化对象 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信