重载运算符,i++和++i问题

时间:2023-02-04 17:34:20
重载运算符,i++和++i是怎么知道执行的是哪个operator函数,虽然第二个带了个参数。

********************************************************************************
csdn发图太坑爹了。还是发代码吧!!
*********************************************************************************
#include <iostream>
using namespace std;
class dome
{
public:
dome(){cout<<"构造函数"<<endl;};
dome(int i){cout<<"带参构造函数"<<endl;x=i;};
~dome(){cout<<"析构函数"<<endl;};
dome(const dome&one){x=one.x;cout<<"复制值"<<endl;}
void set(int i){x=i;}
int get(){return x;}
dome &operator++()
{
++x;
cout<<"operator执行"<<endl;
return *this;
}
dome operator++(int o)
{
dome temp(*this);
++x;
return temp;
}
private:
int x;
};
int main()
{
dome n;
n.set(5);
cout<<n.get()<<endl;
dome y=n++;
cout<<n.get()<<endl;
cout<<y.get()<<endl;
return 0;
};

5 个解决方案

#1


++x 与 x++ 应该不算是重载的
而只是编译器的编译时处理的

#2


 dome &operator++()
    {
        ++x;
        cout<<"operator执行"<<endl;
        return *this;
    }
    dome operator++(int o)
    {
        dome temp(*this);
        ++x;
        return temp;
    }参数类型,返回值类型都是不一样的,编译器当然能区分开了

#3


引用 2 楼  的回复:
C/C++ code
 dome &amp;operator++()
    {
        ++x;
        cout<<"operator执行"<<endl;
        return *this;
    }
    dome operator++(int o)
    {
        dome temp(*this);
        ++x;
        re……

 那x++和++x分别是属于什么类型的?要怎么看??

#4


重载的时候增加一个哑元,就是没有任何作用的形参 0.

#5


只能在调用时通过显式的operator++(常数)来调用后自增吧,好像没有什么简单的方法

#1


++x 与 x++ 应该不算是重载的
而只是编译器的编译时处理的

#2


 dome &operator++()
    {
        ++x;
        cout<<"operator执行"<<endl;
        return *this;
    }
    dome operator++(int o)
    {
        dome temp(*this);
        ++x;
        return temp;
    }参数类型,返回值类型都是不一样的,编译器当然能区分开了

#3


引用 2 楼  的回复:
C/C++ code
 dome &amp;operator++()
    {
        ++x;
        cout<<"operator执行"<<endl;
        return *this;
    }
    dome operator++(int o)
    {
        dome temp(*this);
        ++x;
        re……

 那x++和++x分别是属于什么类型的?要怎么看??

#4


重载的时候增加一个哑元,就是没有任何作用的形参 0.

#5


只能在调用时通过显式的operator++(常数)来调用后自增吧,好像没有什么简单的方法