[C++] Poprawność przypisań

Matej91
Użytkownik
Użytkownik
Posty: 178
Rejestracja: 6 sty 2012, o 00:37
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 24 razy

[C++] Poprawność przypisań

Post autor: Matej91 »

Dane są następujące szkielety klas:

Kod: Zaznacz cały

class X
	{
public:
virtual f(void);
f1(void);
}, x, *px;
class Y: public X
	{
public:
virtual f(void);
f1(void);
}, y, *py;
Które z poniższych zestawów przypisań jest poprawny, wyjaśnić dlaczego:

Kod: Zaznacz cały

a. 	x=y; py=px;
b. 	y=x; py=px;
c. 	x=y; px=py;
d. 	px=py; y=x;
Wiem, że poprawną odpowiedzią jest c. ale nie potrafię wyjaśnić dlaczego. Prosił bym o pomoc.
Ostatnio zmieniony 11 lip 2012, o 19:58 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
steal
Użytkownik
Użytkownik
Posty: 1043
Rejestracja: 7 lut 2007, o 18:35
Płeć: Mężczyzna
Lokalizacja: Białystok|Warszawa
Podziękował: 6 razy
Pomógł: 160 razy

[C++] Poprawność przypisań

Post autor: steal »

Wskaźnika klasy bazowej X można używać dla obiektów klasy pochodnej bez konieczności jawnego rzutowania typu, a więc px = py. Obiekt klasy pochodnej możne być przypisany do obiektu klasy bazowej x = y, ponieważ jest to równoważne zapisowi

Kod: Zaznacz cały

x.operator=(y)
Dla odwrotnego przypadku należałoby albo zdefiniować operator konwersji obiektu klasy pochodnej na obiekt klasy bazowej, albo zdefiniować odpowiedni operator przypisania, który pobierałby argument typu referencja do klasy bazowej:

Kod: Zaznacz cały

Y & Y::operator=(const X & x)
ODPOWIEDZ