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

请各位帮我看下下面的程序,怎么运行的啊

yy7software 发布于 2011-10-13 11:51, 473 次点击
#include <iostream>
using namespace std;
class num
{
public:
    num(){n=1;cout<<"构造函数执行"<<endl;}
    num (const num &s){this->n=s.n;cout<<"复制构造函数执行"<<endl;}
    num(int i){n=i;cout<<"构造函数执行"<<endl;}
    ~num(){cout<<"析构函数执行"<<endl;}
    int get()const {return n;}
    void set(int x){n=x;}
    void add(){n++;}
    const num &operator++(){++n;return *this;}
    const num operator++(int o){num temp(*this);++n;return temp;}
private:
    int n;
};
int main()
{
    num i;
    cout<<"i:"<<i.get()<<endl;
    num x=++i;
    cout<<"x:"<<x.get()<<endl;
    cout<<"i:"<<i.get()<<endl;
    x=i++;
    cout<<"x:"<<x.get()<<endl;
    cout<<"i:"<<i.get()<<endl;
    return 0;
}
运行结果:
构造函数执行
i:1
复制构造函数执行  //为什么这里还要执行一次复制构造函数,上面返回的不是别名来初始化对象x的吗
x:2
i:2
复制构造函数执行
复制构造函数执行
析构函数执行
析构函数执行
x:2
i:3
析构函数执行
析构函数执行
1 回复
#2
lqsh2011-10-13 16:20
程序代码:
#include <iostream>
using namespace std;

class num
{
public:
    num()
    {
        n=1;
        cout<<"构造函数执行"<<endl;
    }
    num (const num &s)
    {
        this->n=s.n;
    cout<<"复制构造函数执行"<<endl;
    }
   
    num(int i)
    {
        n=i;
    cout<<"构造函数执行"<<endl;
    }
    ~num()
    {
        cout<<"析构函数执行"<<endl;
    }
    int get()const
    {
        return n;
    }
    void set(int x)
    {
        n=x;
    }
    void add()
    {
        n++;
    }
  
    num &operator++()
    {
        ++n;
        return *this;
    }
    num &operator++(int n)
    {
        num temp(*this);
        ++(this->n);
        return temp;
    }

private:
    int n;
};



int main()
{
    num i;
    cout<<"i:"<<i.get()<<endl;
    num x;//调用构造函数
    x=++i;//默认赋值构造函数
   
//num x=++i;//默认拷贝构造函数
    cout<<"x:"<<x.get()<<endl;
    cout<<"i:"<<i.get()<<endl;
    x=i++;
    cout<<"x:"<<x.get()<<endl;
    cout<<"i:"<<i.get()<<endl;
    return 0;
}

1