4.5. Opakování

Cvičení
Cvičení

Úkol k textu

Zadání 1)

Co je špatného v následujícím fragmentu?
#include <iostream.h>

class cl1 {
  int i, j;
public:
  cl1(int a, int b) { i = a; j = b; }
  // ...
};

class cl2 {
  int i, j;
public:
  cl2(int a, int b) { i = a; j = b; }
  // ...
};

int main()
{
  cl1 x(10, 20);
  cl2 y(0, 0);
  x = y;

  // ...
}


Řešení

Úkol k textu

Zadání 2)

Když je funkci předáván objekt, je vytvářena jeho kopie. Při návratu této funkce je volán destruktor kopie. Co je potom špatné v následujícím příkladu?
#include <iostream.h>
#include <stdlib.h>

class dyna {
  int *p;
public:
  dyna(int i);
  ~dyna() { free(p); cout << "Uvolnuji \n"; }
  int get() { return *p; }
};

dyna::dyna(int i)
{
  p = (int *) malloc(sizeof(int));
  if(!p) {
    cout << "Allocation failure\n";
    exit(1);
  }

  *p = i;
}

// vraceni zaporne hodnoty
int neg(dyna ob)
{
  return -ob.get();
}

int main()
{
  dyna o(-10);

  cout << o.get() << "\n";
  cout << neg(o) << "\n";

  dyna o2(20);
  cout << o2.get() << "\n";
  cout << neg(o2) << "\n";

  cout << o.get() << "\n";
  cout << neg(o) << "\n";

  return 0;
}


Řešení

Úkol k textu

Zadání 3)

Vytvořte třídu who. Nechť její konstruktor přebírá jednoznakový argument, který bude použit pro identifikaci objektu. Ať konstruktor při vytváření objektu vypisuje:
Vytvarim who #x


Kde x je identifikační znak každého objektu. Když je objekt rušen, ať se zobrazuje zpráva:
Rusim who #x


Nakonec vytvořte funkci make_who(), která vrací objekt who. Každému objektu přiřaďte unikátní jméno.

Řešení

Úkol k textu

Zadání 4)

Může být adresa objektu využita funkcí jako argument?

Řešení
flash\test3.swf
Test
Kliknutím na ikonu spustíte test.