| // Class Foo |
| #pragma implementation |
| |
| |
| // We don't use header files, since we only want to see, whether the |
| // compiler is installed properly. |
| // |
| #if __GNUG__ >= 2 |
| typedef __SIZE_TYPE__ size_t; |
| #else |
| typedef unsigned int size_t; |
| #endif |
| |
| extern "C" { |
| char *strncpy (char* dest, const char* src, size_t len); |
| int printf (const char*, ...); |
| }; |
| |
| #include "cdtest-foo.h" |
| |
| int Foo::foos = 0; |
| |
| void Foo::init_foo () |
| { |
| printf ("BROKENLY calling Foo::init_foo from __init_start; size_of(Foo) = %ld\n", (long) sizeof(Foo)); |
| foos = FOOLISH_NUMBER; |
| } |
| |
| |
| Foo::Foo () |
| { |
| i = ++foos; |
| strncpy (message, "default-foo", len); |
| #ifdef WITH_ADDR |
| printf ("Constructing Foo(%d) \"default-foo\" at %08x\n", i, this); |
| #else |
| printf ("Constructing Foo(%d) \"default-foo\"\n", i); |
| #endif |
| } |
| |
| Foo::Foo (const char* msg) |
| { |
| i = ++foos; |
| strncpy( message, msg, len); |
| #ifdef WITH_ADDR |
| printf ( "Constructing Foo(%d) \"%s\" at %08x\n", i, message, this); |
| #else |
| printf ( "Constructing Foo(%d) \"%s\"\n", i, message); |
| #endif |
| } |
| |
| |
| Foo::Foo (const Foo& foo) |
| { |
| i = ++foos; |
| #ifdef WITH_ADDR |
| printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n", |
| i, foo.message, this, foo.i, &foo); |
| #else |
| printf ("Initializing Foo(%d) \"%s\" with Foo(%d)\n",i, foo.message, foo.i); |
| #endif |
| for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k]; |
| } |
| |
| |
| Foo& Foo::operator= (const Foo& foo) |
| { |
| #ifdef WITH_ADDR |
| printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n", |
| foo.i, foo.message, &foo, i, this); |
| #else |
| printf ("Copying Foo(%d) \"%s\" to Foo(%d)\n", foo.i, foo.message, i); |
| #endif |
| for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k]; |
| return *this; |
| } |
| |
| |
| Foo::~Foo () |
| { |
| foos--; |
| #ifdef WITH_ADDR |
| printf ("Destructing Foo(%d) \"%s\" at %08x (remaining foos: %d)\n", |
| i, message, this, foos); |
| #else |
| printf ("Destructing Foo(%d) \"%s\" (remaining foos: %d)\n", |
| i, message, foos); |
| #endif |
| } |