两个构造函数有啥区别
这样写可以正常运行,出问题的地方是红色标记的地方
#include <iostream>
using namespace std;
class num
{
public:
num(){n=new int;*n=1;cout<<"构造函数在执行\n";}
num(int a){n=new int;*n=a;cout<<"带参数的构造函数\n";}
num(num&s){n=new int;*n=s.get();cout<<"复制构造函数\n";}
~num(){delete n;n=NULL;cout<<"析构函数\n";}
int get(){return* n;}
void set(int t){*n=t;}
num equal(num &s){*n=s.get();return *this;}
private:
int *n;
};
int main()
{
num one(1),two(30);
num three=one.equal(two);
cout<<one.get()<<endl;
cout<<three.get()<<endl;
return 0;
}
但是这样写就不对了
#include <iostream>
using namespace std;
class num
{
public:
num(){n=new int;*n=1;cout<<"构造函数在执行\n";}
num(int a){n=new int;*n=a;cout<<"带参数的构造函数\n";}
num(num&s){n=new int;*n=s.get();cout<<"复制构造函数\n";}
~num(){delete n;n=NULL;cout<<"析构函数\n";}
int get(){return* n;}
void set(int t){*n=t;}
num equal(num &s){*n=s.get();return *this;}
private:
int *n;
};
int main()
{
num one(1),two(30),three;
three=one.equal(two);
cout<<one.get()<<endl;
cout<<three.get()<<endl;
return 0;
}