История изменений
Исправление ilovewindows, (текущая версия) :
Переписал код, хрен знает что там за проблемы в нём решали, но не изменил функцию main.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
class Bar;
class Foo
{
public:
Foo()
{
i = 0;
};
Foo(int j)
{
i = new int[j];
strcpy((char*)i,(const char *)"foo\n");
}
~Foo()
{
if(i) delete (char*)i;
i=0;
}
void print()
{
printf("%d %d %s",(int)this,(int)i,(char*)i);
}
Foo &operator=(const Foo & val)
{
if(&val!=this)
{
strcpy((char*)i,(const char *)val.i);
}
}
void set_pointer(void * p)
{
i=p;
}
private:
void * i;
};
//------------------------
class Bar : public Foo
{
public:
Bar(int j)
{
char * p = new char[j];
strcpy((char*)p,(const char *)"fbar\n");
set_pointer(p);
}
};
//------------------------
int main()
{
Foo* f = new Foo(100);
Foo* b = new Bar(200);
f->print();
b->print();
printf("*\n");
*f=*b;
f->print();
b->print();
delete f;
delete b;
return 0;
}
Исходная версия ilovewindows, :
Переписал код, хрен знает что там за проблемы в нём решали, но не изменил функцию main.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
class Bar;
class Foo
{
public:
Foo()
{
i = 0;
};
Foo(int j)
{
i = new int[j];
strcpy((char*)i,(const char *)"foo\n");
}
~Foo()
{
if(i) delete (char*)i;
i=0;
}
void print()
{
printf("%d %d %s",(int)this,(int)i,(char*)i);
}
Foo &operator=(const Foo & val)
{
if(&val!=this)
{
strcpy((char*)i,(const char *)val.i);
}
}
void set_pointer(void * p)
{
i=p;
}
private:
void * i;
};
//------------------------
class Bar : public Foo
{
public:
Bar(int j)
{
char * p = new char[j];
strcpy((char*)p,(const char *)"fbar\n");
set_pointer(p);
}
Bar &operator=(Foo foo);
};
//------------------------
int main()
{
Foo* f = new Foo(100);
Foo* b = new Bar(200);
f->print();
b->print();
printf("*\n");
*f=*b;
f->print();
b->print();
delete f;
delete b;
return 0;
}