Можем ли мы перегрузить operator++
для предварительного приращения и пошагового увеличения? т.е. правильно вызывать SampleObject++
и ++SampleObject
.
class CSample {
public:
int m_iValue; // just to directly fetch inside main()
CSample() : m_iValue(0) {}
CSample(int val) : m_iValue(val) {}
// Overloading ++ for Pre-Increment
int /*CSample& */ operator++() { // can also adopt to return CSample&
++(*this).m_iValue;
return m_iValue; /*(*this); */
}
// Overloading ++ for Post-Increment
/* int operator++() {
CSample temp = *this;
++(*this).m_iValue;
return temp.m_iValue; /* temp; */
} */
};
Мы не можем перегружать функцию, основанную только на возвращаемом типе, а также даже если считать ее разрешенной, она не решает проблему из-за неоднозначности разрешения вызова.
Так как перегрузка оператора обеспечивается, чтобы встроенные типы велись так же, как пользовательские типы, почему мы не можем одновременно использовать как до, так и пост приращения для наших собственных типов.