|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<iostream>
class Base
{
public:
Base(int *p,int *q):begin(p),end(q),num(p){} //分别传入数组的头尾的地址
int *begin; //指向数组头
int *end; //指向数组尾
int *num ;//指向当前的数组元素,初始化为begin
Base& operator++(); //前缀式自增
Base operator++(int b=0); //后缀式自增,为了区别前缀式自增,增加了一个无用的形参,同时不再返回引用,因为后缀式自增返回的是原本的
//状态。而原本的状态是用一个临时对象保存的,返回一个临时对象的引用无意义
};
Base& Base::operator++()
{
if(num==end)
{
std::cout<<"已到最后一个位置";
}
else{num++;}
}
Base Base::operator++(int b=0)
{
Base fb(*this); //创建一个副本保留保留的状态,后缀式自增的特点所决定
++*this; //这里用了我们在之前定义的前缀式自增
return fb; //返回原本的状态
}
int main(void)
{
int a[3]={0,1,2};
Base base(&a[0],&a[2]);
base++; //这样是可以正确调用后缀式自增的
//base++0; (这样是错误的,但是为什么是错误的呢,++还有一个形参是int型啊,我给一个0. 同时在重载+号时,对象A+对象B,+号能把对象当 做是形参,那么++也能把0当作形参才对呀,为什么是错的呢)
base.operator++(12); //这样显示调用是可以的
std::cout<<*(base.num);
return 0;
|
|