#include <iostream>
using namespace std;
class Base {
int content;
public:
Base( int i ) : content( i ) { }
Base & operator+=( Base const & rhs ) {
content += rhs.content;
return (*this);
}
int get() const { return content; }
};
struct Derived : public Base {
Derived( int i ) : Base( i ) { }
};
Base operator+( Base const &lhs, Base const &rhs ){
Base result = lhs;
result += rhs;
return result;
}
Derived operator+( Derived const &lhs, Derived const &rhs ){
Derived result = lhs;
result += rhs;
return result;
}
ostream &
operator << ( ostream & stream, Base const & rhs ) {
return stream << rhs.get();
}
int main() {
Base a = 3, b = -4;
cout << a + b << endl;
Derived c = 7, d = 6;
cout << c + d << endl;
}