读书人

请大家帮小弟我分析下面程序吧多谢

发布时间: 2012-02-06 15:52:44 作者: rapoo

请大家帮我分析下面程序吧,谢谢
#include<iostream>
#include<cstdio>
using namespace std;
class A
{
public:
A( );
A(const A &);
~A( );
int me_var;
};

A mymethod(int i)
{
A a;
a.me_var=i;
return (a);
}

A::A()
{
cout<<"she is a girl!"<<endl;
}

A::A(const A &b)
{
printf("error!\n");
}
A::~A( )
{
cout<<"hulihong"<<endl;
}
int main(void)
{
A a;
a=mymethod(5);
return 0;
}

程序结果如下:
she is a girl!
she is a girl!
error!
hulihong
hulihong
hulihong




[解决办法]

C/C++ code
#include <iostream > #include <cstdio > using namespace std; class A { public:     A( );     A(const A &);     ~A( );     int me_var;     int zz;}; A mymethod(int i) {     A a;  //调用构造函数    a.me_var=i;     return (a);    // 返回对象,调用拷贝构造函数初始化临时对象    //函数返回,局部变量释放,调用析构函数} A::A() : zz(-1){     cout <<"she is a girl!" <<endl; } A::A(const A &b) {     printf("error!\n");     zz = 0;} A::~A( ) {     cout  <<"hulihong" << zz << endl; } int main(void) {         A a; //调用构造函数    a = mymethod(5);    // 临时变量生存期结束,调用析构函数    // 函数返回,调用析构函数析构a    return 0; }
[解决办法]
第一个she is a girl是main函数里A a产生的
第二个she is a girl是mymethod()函数里A a产生的
error是mymethod()里返回a这个变量,并用这个变量初始化一个临时变量时产生的,
调用A::A(const A &b)
{
printf("error!\n");
}
第一个hulihong是mymethod()里a这个对象的析构函数
第二个hulihong是由mymethod返回的这个对象初始化的临时对象调用的析构函数
第三个hulihong是main函数的a这个对象的析构函数

读书人网 >C++

热点推荐