2007年4月全国计算机二级题填空14道为什么结果为11333

来源:百度知道 编辑:UC知道 时间:2024/05/16 16:19:16
#include<iostream>
using namespace std;
class DA{
int k;
public:
DA(int x=1):k(x){}
~DA(){cout <<k;} };
int main() {
DA d[]={DA(3),DA(3),DA(3)};
DA *P=new DA[2];
delete []p;
return 0;}
但是为什么先输出11呢,不是DA d[]={DA(3),DA(3),DA(3)};它是前面吗先调它

DA d[]={DA(3),DA(3),DA(3)};这句创建了DA类的三个对象,并使用x=3初始化成员变量k。
DA *P=new DA[2];这句创建了两个对象,并使用默认参数x=1初始化k。
delete []p;将p指向的两个对象析构,输出其中的k,值为11;
函数返回时,将数组d的三个对象析构,输出其中的k,值为333。最后结果是11333。

补充:
你看DA类的定义,其构造函数DA(int x=1)的函数体是空的{},而输出k的语句cout<<k;这一句位于析构函数~DA()中,因此只有在析构的时候才输出值。