4.1. Přiřazování objektů

Časová náročnost
Časová náročnost: 8 minut

Pokud existují dva objekty stejného typu, může být jeden objekt přiřazen druhému. Při přiřazování jednoho objektu druhému, se vytváří bitová kopie všech datových členů. Když je například objekt obj1 přiřazen objektu obj2, pak je obsah všech dat objektu obj1 kopírován do ekvivalentních členů objektu obj2. Viz následující příklad.

src/4_1.cpp
Příklad 4.1.
#include <iostream.h>

class myclass {
  int a, b;
public:
  void set(int i, int j) { a = i; b = j; }
  void show() { cout << a << ' ' << b << "\n"; }
};

int main()
{
  myclass obj1, obj2;

  obj1.set(10, 4);

  // prirazeni obj1 do obj2
  obj2 = obj1;

  obj1.show();
  obj2.show();

  return 0;
}





Objekt obj1 má nastaveny proměnné a, b na hodnoty 10 a 4. Přiřazení způsobí, že aktuální hodnota obj1.a je přiřazena do obj2.a a obj1.b je přiřazena do obj2.b

upozornění Při přiřazení mezi dvěma objekty zůstávají data v těchto objektech identická. Objekty však jsou stále oddělené.

Pokud však objekty nejsou stejného typu, pak se při kompilaci objeví chybové hlášení. Nestačí aby byly objekty stejného typu. Musí si také být fyzicky podobné - jejich typová jména musí být shodná.

V následujícím příkladě jsou myclass a yourclass fyzicky stejné, ale mají různá typová jména a proto je překladač bere jako rozdílné typy a zobrazí chybové hlášení.

Chybný příklad:

#include <iostream.h>
class myclass {
  int a, b;
public:
  void set(int i, int j) { a = i; b = j; }
  void show() { cout << a << ' ' << b << "\n"; }
};

/* Tato trida je podobna myclass, ale pouziva jine jmeno tridy a jevi
   se tedy prekladaci jako jiny typ
*/
class yourclass {
  int a, b;
public:
  void set(int i, int j) { a = i; b = j; }
  void show() { cout << a << ' ' << b << "\n"; }
};

int main()
{
  myclass o1;
  yourclass o2;

  o1.set(10, 4);

  o2 = o1; // ERROR, objekty nejsou stejneho typu

  o1.show();
  o2.show();

  return 0;
}


flash\prirobj.swf
Flashová animace
Kliknutím na ikonu spustíte animaci.