Deklaracja klasy w C++

  • Rejestracja: dni
  • Ostatnio: dni
0

Proszę wyjaśnić mi na tym przykładzie:

Kopiuj
class X
{
  public:
  virtual f(void);
  f1(void);
}, x, *px;

Co oznacza

Kopiuj
}, x, *px;

przy zamknięciu klasy?

szweszwe
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 1694
1

Deklaracja obiektów tej klasy.

  • Rejestracja: dni
  • Ostatnio: dni
2

x - obiekt klasy
px - wskaźnik na obiekt

  • Rejestracja: dni
  • Ostatnio: dni
0

Ten wskaźnik *px tyczy się obiektu x?

Sparrow-hawk
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Katowice
  • Postów: 189
2

Nie, wskaźnik jest niezainicjalizowany.

  • Rejestracja: dni
  • Ostatnio: dni
0

Mam problem odnośnie tej klasy, takie zadanie:

Kopiuj
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 powyzszych zestawów przypisan jest poprawny, wyjasnic dlaczego:
a. x=y; py=px;
b. y=x; py=px;
c. x=y; px=py;
d. px=py; y=x;

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 316
0

Myślę że b jest poprawną odpowiedzią, bo jeśli mamy dwa obiekty A i B(które dziedziczy po A) to można przypisać B do A. To jest jedna z zasad programowania, dokładnie zasada podstawienia Liskov, poczytaj o tym na wiki

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2

Pytanie jest tak naprawdę błędnie zadane.
Wg prowadzącego zapewne chodzi o odpowiedź (c), co łatwo można sprawdzić po prostu kompilując kod. Wytłumaczenie jest takie, że jeśli Y dziedziczy po X, to każdy obiekt typu Y jest obiektem typu X.

Kopiuj
x = y;

Oczekujemy obiektu typu X, a y jest obiektem typu X (patrz wyżej).

Kopiuj
y = x;   // błąd

Oczekujemy obiektu typu Y, a x nie jest obiektem typu Y.

Natomiast w tym przypadku te zmienne są niezainicjalizowane, więc każde z tych przypisań będzie oznaczało undefined behaviour, więc prawidłowa odpowiedź jest żaden z tych zestawów przypisań nie jest poprawny.

Poza tym taki zapis deklaracji obiektów jest pozostałością po C, rzadko się go widzi w C++ i tak naprawdę nie ma powodu żeby go używać.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.