注册 登录
编程论坛 C++教室

小弟刚学C++求教问题

亡灵岛 发布于 2012-03-25 20:15, 542 次点击
#include<iostream>

using namespace std;


class TAdd
{
public:
    TAdd(int a,int b)
    {
        x=a;y=b;
        cout<<"constructor."<<endl;
    }

    TAdd(const TAdd& p)
    {
        x=p.x;y=p.y;
        cout<<"copy constructor."<<endl;
    }
    ~TAdd()
    {
        cout<<"destructor."<<endl;
    }
    int add(){return x+y;}
private:
    int x,y;
};
TAdd& fl(TAdd a,TAdd& b)
{
    return b;
}
int main()
{
    TAdd p1(3,4);
    TAdd p2(p1);
    cout<<"x+y="<<fl(p1,p2).add()<<endl;
    return 0;

}
这个程序中   调用构造函数、复制构造函数和析构函数的时机、顺序和次数  该如何分析。求各位高手指教。
9 回复
#2
亡灵岛2012-03-25 20:40
小弟看了很久还是没看明白。
#3
Caesoiar2012-03-26 19:16
程序代码:
#include<iostream>

using namespace std;


class TAdd
{
public:
    TAdd(int a,int b)
    {
        x=a;y=b;
        cout<<"constructor."<<endl;
    }

    TAdd(const TAdd& p)
    {
        x=p.x;y=p.y;
        cout<<"copy constructor."<<endl;
    }
    ~TAdd()
    {
        cout<<"destructor."<<endl;
    }
    int add(){return x+y;}
private:
    int x,y;
};
TAdd& fl(TAdd a,TAdd& b)    // 函数的作用是什么?似乎没什么意义的说
{
    return b;
}
int main()
{
    TAdd p1(3,4);    // 第一次调用构造函数
    TAdd p2(p1);    // 第一次调用复制构造函数
    cout<<"x+y="<<fl(p1,p2).add()<<endl;    // 第二次调用复制构造函数,在fl()中构造临时对象a
                                            
// 输出完后立刻析构a
    return 0;
    // main()函数退出前对p1,p2调用析构函数
}
#4
不要看ID2012-03-26 19:54
以下是引用Caesoiar在2012-3-26 19:16:34的发言:

#include
 
using namespace std;
 
 
class TAdd
{
public:
    TAdd(int a,int b)
    {
        x=a;y=b;
        cout<<"constructor."<
TAdd& fl(TAdd a,TAdd& b)    // 函数的作用是什么?似乎没什么意义的说
{ //这个的意义是在时间上的提高,并不是楼上所说没有意义。
  //TAdd a 构造了一个对象,程序结束会析构掉;
    return b;
}
int main()
{
    TAdd p1(3,4);    // 第一次调用构造函数
    TAdd p2(p1);    // 第一次调用复制构造函数
    cout<<"x+y="<                                            // 输出完后立刻析构a
    return 0;
    // main()函数退出前对p1,p2调用析构函数
}
#5
简体字012012-03-26 21:57
学习来的。
#6
lyswwr2012-03-26 22:50
#include<iostream>
using namespace std;
class TAdd
{
public:
    TAdd(int a,int b)
    {
        x=a;y=b;
        cout<<"constructor."<<endl;
    }
    TAdd(const TAdd& p)
    {
        x=p.x;y=p.y;
        cout<<"copy constructor."<<endl;
    }
    ~TAdd()
    {
        cout<<"destructor."<<endl;
    }
    int add(){return x+y;}
private:
    int x,y;
};
TAdd& fl(TAdd a,TAdd& b)//这个函数就如上一楼说的,没有必要用
{
    return b;
}
int main()
{
    TAdd p1(3,4);//首先调用构造函数把3,和4赋值给x和y;再2次调用复制构造函数,再者求x+y,后面用析构函数先释放构造函数的内存空间,在释放复制构造函数内存空间;
    TAdd p2(p1);
    cout<<"x+y="<<fl(p1,p2).add()<<endl;
    return 0;   
}
#7
Caesoiar2012-03-27 12:53
fl函数没有用吧,直接以p2替换即可,怎么会提高时间效率?
#8
亡灵岛2012-03-27 22:52
高手们,小弟受教,谢谢了。
#9
杰4132012-03-31 16:05
在北京学C++的朋友注意啊,有sina风投的云壌公司招人啦,只要是985院校的朋友们,请投简历至david19890413@,我会先邮件回复,再电话联系。
1