#include
#include
using namespace std;
class Int
{
public:
Int(int i);//构造函数
~Int();//析构函数
int *m_Int;
Int& operator=(Int &i)
{
//判断指针是否为空
if (m_Int != NULL)
{
delete m_Int;
m_Int = NULL;
}
//深拷贝
m_Int = new int(*i.m_Int);
return *this;
}
};
Int::Int(int i)
{
//深拷贝
//开辟堆区
m_Int = new int(i);//初始化
}
Int::~Int()
{
//判断指针是否为空
if (m_Int != NULL)
{
delete m_Int;
m_Int = NULL;
}
cout<<"析构函数"<<endl;//初始化
}
void fun()
{
Int i1(10);
cout<<*i1.m_Int<<endl;
Int i2(20);
i2 = i1;//直接赋值报错,因为会重复释放指针
cout<<*i2.m_Int<<endl;
Int i3(40);
i3 = i2 = i1;
cout<<*i3.m_Int<<endl;
}
int main()
{
fun();
//输出
//10
//10
//10
//析构函数
//析构函数
//析构函数
return 0;
}
2.关系运算符重载
#include
#include
using namespace std;
class Int
{
public:
Int(int i);//构造函数
~Int();//析构函数
int m_int;
bool operator==(Int &i)
{
if (this->m_int == i.m_int)
{
return true;
}
return false;
}
};
Int::Int(int i)
{
m_int = i;
}
Int::~Int()
{
cout<<"析构函数"<<endl;//初始化
}
void fun()
{
Int i1(23);
Int i2(34);
if(i1 == i2)
{
cout<<"Equal !!!"<<endl;
}else{
cout<<"No equal !!!"<<endl;
}
}
int main()
{
fun();
return 0;
}
3.函数调用运算符重载
#include
#include
using namespace std;
class Int
{
public:
Int(int i);//构造函数
~Int();//析构函数
int m_int;
//重载函数运算符号
int operator()()
{
//cout<
return m_int;
}
};
Int::Int(int i)
{
m_int = i;
}
Int::~Int()
{
cout<<"析构函数"<<endl;//初始化
}
void fun()
{
Int i1(23);
Int i2(34);
cout<<i2()<<endl;
//匿名对象
cout<<Int(123)()<<endl;
}
int main()
{
fun();
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)