C++小程序的析构函数
时间:2011-12-01
来源:互联网
下面的程序在
p[0]= B("ma", 4.8);
这一步时,我知道它会调用B里面的构
造函数,但显示的结果是它还调用了析
构函数使count自减,这是为什么呢??
初学者求指教啊???
#include <iostream.h>
#include <string.h>
class B {
char name[80];
double b;
public :
static int count;
B(char * s, double n)
{ strcpy(name, s); b = n;
cout << "调用一般构造函数, count : "
<< ++count << endl; }
B( )
{ cout << "调用无参数构造函数,count: "
<< ++count << endl;
}
~B( )
{ cout << "调用析构函数撤消对象 " << name
<< "后, count : " << --count << endl;
}
void Getb(char * s, double & n)
{ strcpy(s, name); n = b; }
};
int B::count = 0;
void main( )
{ B * p; double d; char str[80];
p = new B[3];
cout << "初始化对象数组p[ ] !\n";
p[0] = B("ma", 4.8); //调用一般构造函数
p[1] = B("wang", 3.6); //初始化每个元素
p[2] = B("li", 3.1);
for(int i = 0; i < 3; i++) {
p[i].Getb(str, d);
//两个参数均为地址传递方式,在getb()函数体内,对n的
操作就是对d的操作,即将b赋给了d。
cout << str << " , " << d << endl;
}
cout << "\n";
delete [ ]p;
}
该程序的输出结果:
调用无参数构造函数, count : 1
调用无参数构造函数, count : 2
调用无参数构造函数, count : 3
初始化对象数组p[ ] !
调用一般构造函数, count : 4
调用析构函数撤消对象 ma后, count : 3
调用一般构造函数, count : 4
调用析构函数撤消对象 wang后, count : 3
调用一般构造函数, count : 4
调用析构函数撤消对象 li后, count : 3
ma , 4.8
wang , 3.6
li , 3.1
调用析构函数撤消对象 li后, count : 2
调用析构函数撤消对象 wang后, count : 1
调用析构函数撤消对象 ma后, count : 0
p[0]= B("ma", 4.8);
这一步时,我知道它会调用B里面的构
造函数,但显示的结果是它还调用了析
构函数使count自减,这是为什么呢??
初学者求指教啊???
#include <iostream.h>
#include <string.h>
class B {
char name[80];
double b;
public :
static int count;
B(char * s, double n)
{ strcpy(name, s); b = n;
cout << "调用一般构造函数, count : "
<< ++count << endl; }
B( )
{ cout << "调用无参数构造函数,count: "
<< ++count << endl;
}
~B( )
{ cout << "调用析构函数撤消对象 " << name
<< "后, count : " << --count << endl;
}
void Getb(char * s, double & n)
{ strcpy(s, name); n = b; }
};
int B::count = 0;
void main( )
{ B * p; double d; char str[80];
p = new B[3];
cout << "初始化对象数组p[ ] !\n";
p[0] = B("ma", 4.8); //调用一般构造函数
p[1] = B("wang", 3.6); //初始化每个元素
p[2] = B("li", 3.1);
for(int i = 0; i < 3; i++) {
p[i].Getb(str, d);
//两个参数均为地址传递方式,在getb()函数体内,对n的
操作就是对d的操作,即将b赋给了d。
cout << str << " , " << d << endl;
}
cout << "\n";
delete [ ]p;
}
该程序的输出结果:
调用无参数构造函数, count : 1
调用无参数构造函数, count : 2
调用无参数构造函数, count : 3
初始化对象数组p[ ] !
调用一般构造函数, count : 4
调用析构函数撤消对象 ma后, count : 3
调用一般构造函数, count : 4
调用析构函数撤消对象 wang后, count : 3
调用一般构造函数, count : 4
调用析构函数撤消对象 li后, count : 3
ma , 4.8
wang , 3.6
li , 3.1
调用析构函数撤消对象 li后, count : 2
调用析构函数撤消对象 wang后, count : 1
调用析构函数撤消对象 ma后, count : 0
作者: CP5949527 发布时间: 2011-12-01
在线等指教!!!!
作者: CP5949527 发布时间: 2011-12-01
你是构造了一个对象B(叫甲),然后赋值给p[0]。赋值时,p位置又构造了一个对象B(叫乙),执行了拷贝构造把甲赋给乙,然后析构甲。
作者: lofeo 发布时间: 2011-12-01
临时对象,在执行完表达式之后会自动析构
作者: qscool1987 发布时间: 2011-12-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28