合肥餐饮网站建设,把网站内的文本保存到txt怎么做,软件项目管理的内容,wordpress插件开发教程 pdf运算符重载实质上就是函数重载#xff0c;重载为成员函数#xff0c;他就可以自由访问本类的数据成员。实际使用时#xff0c;总是通过该类的某个对象来访问重载的运算符。 
如果是双目运算符#xff0c;左操作数是对象本身的数据#xff0c;由this指针指出#xff0c;右…运算符重载实质上就是函数重载重载为成员函数他就可以自由访问本类的数据成员。实际使用时总是通过该类的某个对象来访问重载的运算符。 
如果是双目运算符左操作数是对象本身的数据由this指针指出右操作数则需要通过运算符重载函数的参数表来传递如果是单目运算符操作数由对象的this指针给出就不再需要任何参数。 
1双目运算符的重载 对于双目运算符B如果要重载为类的成员函数使之能够实现表达式a B c 其中a1是A类的对象则应当把B重载为A类的成员函数该函数只有一个形参形参类型为c所属的类型。经过重载之后表达式a B c 就相当于调用a.operator B(c)。 2单目运算符的重载 对于前置单目运算符U如“-”负号等如果要重载为类的成员函数用来实现表达式U a其中a为A类对象那么U应当重载为A类的成员函数函数没有形参。经过重载之后表达式U a就相当于调用a.operator U() 对于后置运算符“”和“–”来说如果将它们重载为类的成员函数用来实现表达式a或者a--其中a为A类对象那么运算符就应当重载为A类的成员函数这时函数要带有一个整型int形参。重载之后表达式a和a--就相当于调用a.operator(0)和a.operator--(0)。这里的int类型的参数在运算中不起任何作用只是用于区别后置、–和前置、–。 
【例1】两个对象相加的实现体即两个对象相加的原理。就是把两个对象中的数据成员依次进行相加。 
class A
{
public:A(int i  0, int j  0, int k  0) :m_i(i), m_j(j), m_k(k) {}int GetI()const{return m_i;}int GetJ()const{return m_j;}void Add(A s){cout ( this-m_i  s.m_i  ,  this-m_j  s.m_j  ,  this-m_k  s.m_k)endl;}private:int m_i;int m_j;int m_k;
};
void main()
{A a(2, 5, 7);A b(5, 7, 9);a.Add(b); //ab
}运行结果  【例2】两个对象相乘的实现体即两个对象相乘的原理。就是把两个对象中的数据成员依次进行相乘。 
class A
{
public:A(int i  0, int j  0, int k  0) :m_i(i), m_j(j), m_k(k) {}int GetI()const{return m_i;}int GetJ()const{return m_j;}void fn(A s){cout  (  this-m_i * s.m_i  ,  this-m_j * s.m_j  ,  this-m_k * s.m_k  )  endl;}
private:int m_i;int m_j;int m_k;
};
void main()
{A a(2, 5, 7);A b(5, 7, 9);a.fn(b); //a * b}运行结果  以上两个个例子中在执行Add函数a.Add(b);或者fn函数a.fn(b); 之前在执行结果还没有出来的情况下我们是不知道这两个函数到底是干什么的这导致程序的可读性不好。虽然上面两个例子中通过函数的调用实现了我们所需要实现的功能但是这样的写法不如直接写成运算符可以直观的表达出我们要现实的功能是什么。所以引出运算符重载。 
运算符重载的原因 ①想让当前的对象像基本数据类型去操作。 ②把对象的运算写成运算符的形式比写成函数调用的形式可读性更强。 
【例3】把运算符“”重载为成员函数 
class A
{
public:A(int i  0) :m_i(i) {}A operator(A s){cout  调用函数operator ()  endl;return this-m_i  s.m_i;//把A类中的m_i和B类中的m_i相加this指针指向当前对象a中的数据成员m_i的地址//此处返回值为int型是因为构造函数可以进行类型转换}void print(){cout  m_i  endl;}
private:int m_i;
};
int main()
{A a(5);A b(6);//a  b;//相当于a.operator(b)  //(a.b)(a  b).print();/*遇到先看类中有没有重载加法运算符如果重载了去调用这个的重载函数把第一个操作数a当作this指针传给这个重载函数把右操作数b当作实参传给的重载函数的形参*/A c;c  a.operator(b);c.print();return 0;
}运行结果  结果分析 在程序中遇到“”先看此处的“”是不是加法运算符重载如果重载了去调用这个“”的重载函数在上述程序主函数中遇到的ab这里的“”是加法运算符重载所以去调用A operator(A s)重载函数把第一个操作数a当作this指针传给这个重载函数把右操作数b当作实参传给这个重载函数的形参A s。在重载函数A operator(A s)的函数体内将A类对象a中的m_i和B类对象b中的m_i相加的值返回给A类的构造函数的形参然后通过初始化列表给A类的数据成员m_i进行赋值为A类中对象m_i的值和B类对象m_i的值相加的结果。然后用这个相加后的对象去调用print函数输出相加的结果。 
因为运算符重载的实质为函数重载所以可以把ab;写为a.operator(b);这两种写法完全相同。 
减法运算符“-”的重载与加法运算符“”的重载同理。 
【例4】默认赋值运算符重载函数 
class A
{
public:A(int i  0) :m_i(i) {}void print(){cout  m_i  endl;}
private:int m_i;
};
int main()
{A a(5);A b(6);(a  b).print();return 0;
}运行结果  结果分析 我们从程序中可以看出当前运算符“”并没有重载但是结果却没错说明在类中给了一个默认的赋值运算符重载函数。默认的赋值运算符重载函数就是把当前的右边对象的数据成员的值依次赋值给左边对象的数据成员。这里的默认赋值重载函数是浅赋值。如果把这个默认赋值运算符重载函数写出来就是这样 
A operator(const A s)
{if(thiss)//判断自赋值return *this;m_is.m_i;return *this;}所以 (a  b).print();相当于是a.operator(b)把a当作this指针传给这个重载函数把b当作实参传给这个重载函数的形参。上面这个默认的赋值运算符重载函数的返回类型为引用类型是因为如果使用值类型返回就会产生拷贝构造函数比较麻烦而这里由当前运算符组成的表达式可以放在的左边它具有相应的内存空间所以使用引用作为默认的赋值运算符重载函数的返回类型。所以最后的 return *this;返回的就是当前对象a的数据成员m_i的值。 
【例5】单目运算符“”重载为成员函数。 
class A
{
public:A(int i  0) :m_i(i) {}void print(){cout  m_i  endl;}A operator(int)  //为了实现的重载语法规定在后的时候参数里面写int没有实际的意义不用传参{cout  调用函数operator  endl;return m_i;}A operator(){cout  调用函数operator  endl;m_i  m_i  1;return *this;}
private:int m_i;
};void main()
{A a(6);A b(3);A c(20);//后置cout  (a)表达式的值endl;(a).print();//相当于a.()  //a表达式的值是a没加以前的值6  a的值是a加过1之后的值7最终返回的是表达式的值//a这个表达式在执行过程中有两个结果cout  a的值  endl;a.print();//前置	cout  (b)表达式的值  endl;(b).print(); //b.()  b表达式的值是b加过1之后的值b的值也是b加过1之后的值//因为b表达式的值和b的值是相同的所以没有必要给b这个表达式开辟空间直接从b的内存单元中将这个值取出来所以返回类型可以不用值类型而是使用引用的返回类型cout  b的值  endl;b.print();} 
运行结果  结果分析 ①语法规定在后置的时候参数里面写int没有实际的意义不用传参它的目的是为了与前置构成函数重载。 ②后置(a)表达式的值是a没加以前的值a的值变为了a1以后的值所以后置表达式有两个不同的值但是最终返回的是表达式的值因此对于将后置运算符重载为成员函数时的返回类型为值类型。 ③前置 (b)表达式的值和b的值一样都是b1以后的值所以前置表达式的值只有一个因为b表达式的值和b的值是相同的所以没有必要给b这个表达式开辟空间直接从b的内存单元中将这个值取出来所以返回类型可以不用值类型而是使用引用的返回类型。 文章转载自: http://www.morning.nbhft.cn.gov.cn.nbhft.cn http://www.morning.kqxwm.cn.gov.cn.kqxwm.cn http://www.morning.lmfmd.cn.gov.cn.lmfmd.cn http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn http://www.morning.rtspr.cn.gov.cn.rtspr.cn http://www.morning.rfzzw.com.gov.cn.rfzzw.com http://www.morning.rhsr.cn.gov.cn.rhsr.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.ffwrq.cn.gov.cn.ffwrq.cn http://www.morning.lxngn.cn.gov.cn.lxngn.cn http://www.morning.nggry.cn.gov.cn.nggry.cn http://www.morning.zthln.cn.gov.cn.zthln.cn http://www.morning.fqyxb.cn.gov.cn.fqyxb.cn http://www.morning.fjlsfs.com.gov.cn.fjlsfs.com http://www.morning.cpfx.cn.gov.cn.cpfx.cn http://www.morning.gxtfk.cn.gov.cn.gxtfk.cn http://www.morning.krywy.cn.gov.cn.krywy.cn http://www.morning.ndngj.cn.gov.cn.ndngj.cn http://www.morning.npmx.cn.gov.cn.npmx.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.ctfh.cn.gov.cn.ctfh.cn http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn http://www.morning.sqgsx.cn.gov.cn.sqgsx.cn http://www.morning.dkgtr.cn.gov.cn.dkgtr.cn http://www.morning.lqljj.cn.gov.cn.lqljj.cn http://www.morning.smqjl.cn.gov.cn.smqjl.cn http://www.morning.wfzdh.cn.gov.cn.wfzdh.cn http://www.morning.mkczm.cn.gov.cn.mkczm.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.pctql.cn.gov.cn.pctql.cn http://www.morning.bmrqz.cn.gov.cn.bmrqz.cn http://www.morning.saastob.com.gov.cn.saastob.com http://www.morning.lbxhy.cn.gov.cn.lbxhy.cn http://www.morning.gcdzp.cn.gov.cn.gcdzp.cn http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn http://www.morning.aiai201.cn.gov.cn.aiai201.cn http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn http://www.morning.lwcgh.cn.gov.cn.lwcgh.cn http://www.morning.gbybx.cn.gov.cn.gbybx.cn http://www.morning.bqwsz.cn.gov.cn.bqwsz.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.qqklk.cn.gov.cn.qqklk.cn http://www.morning.mpnff.cn.gov.cn.mpnff.cn http://www.morning.elbae.cn.gov.cn.elbae.cn http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn http://www.morning.tjpmf.cn.gov.cn.tjpmf.cn http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn http://www.morning.lwzgn.cn.gov.cn.lwzgn.cn http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.drgmr.cn.gov.cn.drgmr.cn http://www.morning.xpwdf.cn.gov.cn.xpwdf.cn http://www.morning.nmnhs.cn.gov.cn.nmnhs.cn http://www.morning.htbsk.cn.gov.cn.htbsk.cn http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn http://www.morning.mcgsq.cn.gov.cn.mcgsq.cn http://www.morning.brps.cn.gov.cn.brps.cn http://www.morning.fewhope.com.gov.cn.fewhope.com http://www.morning.zwsgl.cn.gov.cn.zwsgl.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.prfrb.cn.gov.cn.prfrb.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.dschz.cn.gov.cn.dschz.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.tbqdm.cn.gov.cn.tbqdm.cn http://www.morning.wfyqn.cn.gov.cn.wfyqn.cn http://www.morning.pltbd.cn.gov.cn.pltbd.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.wdhzk.cn.gov.cn.wdhzk.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.jqzns.cn.gov.cn.jqzns.cn http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn http://www.morning.txtgy.cn.gov.cn.txtgy.cn