LINUX.ORG.RU

История изменений

Исправление 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;
}