首页 > 试题广场 >

阅读该程序,给出程序的输出结果。

[问答题]

阅读该程序,给出程序的输出结果。

#include <iostream.h>

class C

{

    friend void print(C c);

public:

    C(int i) : x(i)

    {

    }

    C() : x(0)

    {    

        cout<<"Default constructor called."<<x<<endl;

    }

    C(const C& c)

    {

        x = c.x;

        cout << "Copy constructor called." << x << endl;

    }

    ~C()

    {

        cout<<"Destructor called."<<x<<endl;

    }

private:

    int x;

};

void print(C c)

{

    cout << c.x << endl;

}

void main()

{

    C p[4];

    int n=1;

    for(int i=0;i<4;i++)

        p[i]=C(n++);

    for(i=0;i<4;i++)

        print(p[i]);

}
C p[4];
//调用默认构造函数,输出:
Default constructor called.0
Default constructor called.0
Default constructor called.0
Default constructor called.0

for(int i=0;i<4;i++)
        p[i]=C(n++);
//p[0]=C(1),p[1]=C(2)...赋值运算符重载?右边创建一个临时C对象,语句结束后调用析构函数;输出:
Destructor called.1
Destructor called.2
Destructor called.3
Destructor called.4

for(i=0;i<4;i++)
        print(p[i]);
//注意:print()函数形参为C类型对象,实参为p[i],这会调用复制构造函数,print()产生一个局部C类对象,之后输出x值,print()运行结束,局部对象释放,调用析构函数,输出:
Copy constructor called.1
1
Destructor called.1
Copy constructor called.2
2
Destructor called.2
Copy constructor called.3
3
Destructor called.3
Copy constructor called.4
4
Destructor called.4

最后main()函数运行接收,p[i]数组释放掉,数组元素按照从后向前释放,调用析构函数,输出:
Destructor called.4
Destructor called.3
Destructor called.2
Destructor called.1

ps: 第2个for里面的i前面要加上int
编辑于 2020-12-21 22:13:34 回复(0)