// counten2.cpp
// constructors in derived class
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class Counter
{
public: //NOTE: not private
unsigned int count; //count
public:
Counter() : count(0) //constructor, no args
{ }
Counter(int c) : count(c) //constructor, one arg
{ }
unsigned int get_count() const //return count
{ return count; }
Counter operator ++ () //incr count (prefix)
{ return Counter(++count); }
// Counter operator ++ (int) //incr count (prefix)
// { return Counter(count++); }
};
////////////////////////////////////////////////////////////////
class CountDn : public Counter
{
public:
CountDn() : Counter() //constructor, no args
{ }
CountDn(int c) : Counter(c) //constructor, 1 arg
{ }
CountDn operator -- () //decr count (prefix)
{ return CountDn(--count); }
CountDn operator -- (int) //decr count (prefix)
{ return CountDn(count--); }
CountDn operator ++ () //decr count (prefix)
{ return CountDn(count++); }
};
////////////////////////////////////////////////////////////////
int main()
{
CountDn c1; //class CountDn
CountDn c2(30);
cout<<(c2--).count<<endl;
cout<<(c2).count<<endl;
cout<<(--c2).count<<endl;
cout<<(++c2).count<<endl;
cout<<(c2++).count<<endl;
cout<<(c2).count<<endl;
return 0;
}
Код выдает ошибку untitled.cxx:47:13: error: no ‘operator++(int)’ declared for postfix ‘++’.
Если переписать таким образом проблема исчезает.
class Counter
{
public: //NOTE: not private
unsigned int count; //count
public:
Counter() : count(0) //constructor, no args
{ }
Counter(int c) : count(c) //constructor, one arg
{ }
unsigned int get_count() const //return count
{ return count; }
Counter operator ++ () //incr count (prefix)
{ return Counter(++count); }
Counter operator ++ (int) //incr count (prefix)
{ return Counter(count++); }
};
////////////////////////////////////////////////////////////////
class CountDn : public Counter
{
public:
CountDn() : Counter() //constructor, no args
{ }
CountDn(int c) : Counter(c) //constructor, 1 arg
{ }
CountDn operator -- () //decr count (prefix)
{ return CountDn(--count); }
CountDn operator -- (int) //decr count (prefix)
{ return CountDn(count--); }
// CountDn operator ++ () //decr count (prefix)
// { return CountDn(count++); }
};
Как реализовать постфиксную операцию ++ в дочернем классе, если префиксная операция реализована в базовом классе?