用成员函数和友元函数重置单目运算符(++后缀和前缀)

运算符重载疑难知识点:点击打开链接

单目运算符“++”和“--”的重载

 在C++,可以通过在运算符函数参数表中是否插入关键字int来区分前缀和后缀这两种方式。

    ◆对于前缀方式++ob,可以用运算符函数重载为

         ob.operator ++();             // 成员函数重载

   或 operator ++ (X& ob);      // 友元函数重载,

                                             其中ob为类X对象的引用

    ◆ 对于后缀方式ob++,可以用运算符函数重载为

        ob.ooperator ++(int);         // 成员函数重载

   或 operator++(X& ob,int);     // 友元函数重载

在调用后缀方式的函数时,参数int一般被传递给值0

以下为具体例子:

a.何用成员函数重置单目运算符

class Time

{public:

       Time(){minute=0;sec=0;}

       Time(intm,int s):minute(m),sec(s){ }

       Time operator++( );    //声明前置自增运算符“++”重载函数

       Time operator++(int);   //声明后置自增运算符“++”重载函数

         void display(){cout<<minute<<“minute”<<sec<<“sec”<<endl;}

private:

       intminute;

       intsec;

};

Time Time∷operator++( )    //定义前置自增运算符“++”重载函数

{       sec++;

       if(sec>=60)

       {     

              sec=0;         //满60秒进1分钟

              ++minute;

       }

       return *this;         //返回当前对象值

}

Time Time∷operator++(int)  //定义后置自增运算符“++”重载函数

{

       Time temp(*this);

       sec++;

       if(sec>=60)

       {

              sec=0;

              ++minute;

       }

       return temp;         //返回的是自加前的对象

}

b)     如何用友元函数重置单目运算符

friend void operator ++(Point &point)//重载前缀++

{++point.x;   ++point.y;}

 

friend Point operator ++(Point&point,int a) //重载后缀++

{     

Point p(1,1); //创建任意一个对象

    p=point;

       ++point.x;   

       ++point.y;

       returnp;

}

好的,我会为您解答这个问题。 首先,我们需要定义一个计数器类Counter,其中包含一个私有成员变量count,表示当前计数器的值。类的定义如下: ```cpp class Counter { public: Counter(int count = 0) : count(count) {} // 前置++ Counter& operator++() { count++; return *this; } // 后置++ Counter operator++(int) { Counter c(*this); count++; return c; } // 友元函数 friend Counter& operator--(Counter& c); friend Counter operator--(Counter& c, int); int getCount() const { return count; } private: int count; }; ``` 在上面的代码中,我们定义了一个计数器类Counter,其中包含了一个count成员变量,表示当前计数器的值。同时,我们重载了前置和后置++运算符,前置++运算符返回一个引用,后置++运算符返回一个副本,这两个运算符都会将计数器的值加1。 接下来,我们需要重载单目运算符--,同样包括前置和后置的重载函数,并分别用类的成员函数友元函数实现。代码如下: ```cpp // 前置-- Counter& operator--(Counter& c) { c.count--; return c; } // 后置-- Counter operator--(Counter& c, int) { Counter d(c); c.count--; return d; } ``` 在上面的代码中,我们定义了两个单目运算符--,同样包括前置和后置的重载函数。前置--运算符返回一个引用,后置--运算符返回一个副本,这两个运算符都会将计数器的值减1。 最后,我们来看一下如何使用这个计数器类: ```cpp int main() { Counter c(0); cout << "初始值:" << c.getCount() << endl; ++c; cout << "前置++:" << c.getCount() << endl; c++; cout << "后置++:" << c.getCount() << endl; --c; cout << "前置--:" << c.getCount() << endl; c--; cout << "后置--:" << c.getCount() << endl; return 0; } ``` 在上面的代码中,我们首先创建了一个计数器对象c,初始值为0。然后分别调用了前置++、后置++、前置--和后置--运算符,并输出计数器当前的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值