// class to contain a pair of arbitrary objects #include using namespace std; class PairInt { public: PairInt(int a, int b): a_(a), b_(b) {}; int a() const { return a_; } int b() const { return b_; } private: int a_; int b_; }; template class PairSame { public: PairSame(T a, T b): a_(a), b_(b) {} T a() const { return a_; } T b() const { return b_; } private: T a_; T b_; }; template ostream& operator<<(ostream& out, const PairSame& p) { return ( out << "(" << p.a() << "," << p.b() << ")" ); } template class Pair { public: Pair(T1 a, T2 b): a_(a), b_(b) {} T1 a() const { return a_; } T2 b() const { return b_; } private: T1 a_; T2 b_; }; template ostream& operator<<(ostream& out, const Pair& p) { return ( out << "(" << p.a() << "," << p.b() << ")" ); } int main() { PairInt coppia(1,2); cout << "Coppia " << coppia.a() << "," << coppia.b() << endl; PairSame c1(1,2); PairSame c2(1.1,2.1); PairSame c3("hello","world"); cout << "c1 " << c1 << endl; cout << "c2 " << c2 << endl; cout << "c3 " << c3 << endl; Pair c4(4,"world"); Pair > c5("world",Pair(1,2)); cout << "c4 " << c4 << endl; cout << "c5 " << c5 << endl; return 0; }