这篇主要介绍 重载(= ++ –)
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
//对象复制:调用拷贝构造(在对象实例化时复制另一对象的内容)
//对象赋值:调用重载=运算符(两个对象已经生成,并互相赋值)
class object
{
public:
object(int);
object(void);
//注意:深拷贝-成员变量中有指针
object(object&);
void show();
~object();
//重载赋值运算符
object& operator=(object& );//本质:方法
//重载自增/减运算
object operator++();
object operator++(int);
public:
int* value;
};
//有参
object::object(int v)
{
this->value=new int(v);
}
object::object(void):value(NULL)
{
//this->value=NULL;
}
//重载拷贝构造
object::object(object& o)
{
//先申请空间,再赋值
this->value=new int(*o.value);
}
//析构
object::~object()
{
cout<<"析构函数"<<this->value<<endl;
if(NULL!=this->value)
{
delete this->value;
this->value=NULL;
}
}
object& object::operator=(object& o2)
{
if(NULL!=this->value)//先释放
delete this->value;
this->value=new int(*o2.value); //再申请
//*this=o2;
cout<<"重载="<<endl;
return *this;
}
//重载运算符 ---前自加(先自加,再取值)
object object::operator++(void)
{
object result;
//先自加
*this->value+=1;
//再取值
result=*this;
return result;
}
//重载运算符--- 后自加 (先取值,再自加)
object object::operator++(int)
{
//定义对象
object result(*this);//先取值
//再自加
*(this->value)+=1;
return result;
}
void object::show()
{
if(NULL!=this->value)
cout<<*(this->value)<<endl;
}
int main()
{
/*
object o1;
object o2(2);
o1.show();
o2.show();
//赋值:运算符只能识别基本类型
o1=o2;//可以:o1与o2的内存空间布局相同(类型相同)
// o1>o2;
*o2.value=10000;//只是通过o2修改内容,没有修改o1的内容
o1.show();
o2.show();
// string str1="hello world";
//o1=str1;//不同类型不能赋值
int a=100;
int b;
printf("%d\n",a=1);
//自加
cout<<"a++="<<a++<<endl;
++o1;
*/
return 0;
}