阿牛哥C++笔记---6

第三十二讲 运算符重载实验

在类中声明成员函数

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();
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值