#include #include #include using namespace std; template class Thing { private: T x; public: Thing(); Thing(T); Thing(const Thing&); T get() const; operator T() const; }; template Thing::Thing() : x(0) {} template Thing::Thing(T n) : x(n) {} template Thing::Thing(const Thing& t) : x(t.x) {} template T Thing::get() const { return x; } template Thing::operator T() const { return x; } template ostream& operator<<(ostream& s, const Thing& t) { return s << t.get(); } int main(void) { Thing t1; cout << "t1=" << t1 << endl; Thing t2(18); cout << "t2=" << t2 << endl; Thing t3(1.28); cout << "t3=" << t3 << endl; Thing t4(t3); cout << "t4=" << t4 << endl; cout << "(t2.get() + t3.get()) = " << (t2.get() + t3.get()) << endl; cout << "t2 + t3 = " << t2 + t3 << endl; Thing t5('z'); cout << "t5=" << t5 << endl; Thing t6("howdy"); cout << "t6=" << t6 << endl; cout << t6.get()[2] << endl; }