| Č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.
| 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 |
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;
}
|
| Flashová animace |
|
Kliknutím na ikonu spustíte animaci.
|