// figures.h (c) 2008 adolfo@di-mare.com /** \file figures.h \brief Jerarquía de clases de figuras usadas en \c test_lkptr.cpp Implementé este archivo para que la jerarquía de figuras que uso en \c test_lkptr::inheritance() no salga en el índice de clases que Dosygen genera (pues lo ensucia mucho). \author Adolfo Di Mare \date 2008 - Why English names??? ==> http://www.di-mare.com/adolfo/binder/c01.htm#sc04 */ #ifndef figures_h #define figures_h struct Point { virtual int val() const { return 0; } }; struct Circle : public Point { virtual int val() const { return 1; } }; struct Cilinder : public Circle { virtual int val() const { return 2; } }; struct Square : public Point { virtual int val() const { return 3; } }; struct Rectangle : public Square { virtual int val() const { return 4; } }; struct grandpa { const char * g; grandpa() : g ("grandpa") {} virtual const char* doit() const { return g; } virtual ~grandpa() {} }; struct pa : public grandpa { const char * p; pa() : p("pa") {} virtual const char* doit() const { return p; } }; struct me : public pa { const char * m; me() : m("me") {} virtual const char* doit() const { return m; } }; struct myself { int v; myself() { v=+1; } ~myself() { v=-1; } lkptr eval() { return lkptr(this); } }; struct selfBase { int v; int del; // # of times deleted selfBase( int n ) : v(n),del(0) { } virtual ~selfBase() { del--; } operator int() const { return v; } }; struct selfDerived : public selfBase { selfDerived( int n ) : selfBase(n) { } virtual ~selfDerived() {} lkptr foo(); }; /// Returns an unrelated pointer to \c this. lkptr selfDerived::foo() { return lkptr(this); } class UDT { long value_; public: static int UDT_use_count; // independent of pointer maintained counts explicit UDT( long value=0 ) : value_(value) { ++UDT_use_count; } ~UDT() { --UDT_use_count; // std::cout << "UDT with value " << value_ << " being destroyed\n"; } long value() const { return value_; } void value( long v ) { value_ = v;; } }; // UDT int UDT::UDT_use_count = 0; #endif