第三十二讲 运算符重载实验
在类中声明成员函数
CVector operator+(CVector *this,CVector y);
通常第一个操作数省略.隐式
可以写成
CVector operator+(CVector y);
第三十三讲 重载++运算符
理解++a和a++的区别
观点:表达式就是函数
++看作函数名 a看成参数
int operator++(int a)
{
a=a+1;
return a ;
}//前++
int operator++(int a)
{
int b=a;
a=a+1;
return b;
}//后++
其实所有的表达式都是函数
以上两个函数完全一样,有问题,重载实现,参数类型不同,参数个数不同。
将后面的改为
int operator++(int a,int)
这样的就可以区分了。
假如一个v向量
v(x,y) ++v 表达式的值是(x+1,y+1)
v对象的内容也是(x+1,y+1)
vector &operator++(vector *this)
{
++this->x;
++this->y;
return (*this);
}
返回为改变后的值,实现重载前++
其中参数是可以为隐式的 可以不写
v++ 表达式的值是(x,y)
v对象的内容是(x+1,y+1)
vector operator++(vector *this,int)
{
vector tmp=*this;
++this->x;
++this->y;
return tmp;
}
另外定义重载时候不要脱离使用习惯
习惯上:
前++定义
vector operator++()
后++
vector operator++(int)
第三十四讲 实验
目的 掌握++运算符的重载
#include <iostream.h>
class CVector
{
public:
CVector(int m,int n);
CVector operator++();
void output();
private:
int x;
int y;
};
CVector::CVector(int m,int n)
{
x = m;
y = n;
}
void CVector::output()
{
cout<<x<<","<<y<<endl;
}
CVector CVector::operator++()
{
++this->x;
++this->y;
return (*this);
}
void main()
{
CVector v(0,0);
(++v).output();
// CVector tmp = ++v;
v.output();
// tmp.output();
}
第三十五讲 实验 后++重载
体会:自++
实现两个功能
改变当前对象的值
求出表达式的结果
#include <iostream.h>
class CVector
{
public:
CVector(int m,int n);
CVector operator++(int);
void output();
private:
int x;
int y;
};
CVector::CVector(int m,int n)
{
x = m;
y = n;
}
void CVector::output()
{
cout<<x<<","<<y<<endl;
}
CVector CVector::operator++(int)
{
CVector tmp = (*this);
++this->x;
++this->y;
return tmp;
}
void main()
{
CVector v(0,0);
CVector tmp = v++;
tmp.output();
v.output();
}