Błąd podczas kompilacji kodu, przymusowe dodanie konstrukotra domyślnego

Błąd podczas kompilacji kodu, przymusowe dodanie konstrukotra domyślnego
BT
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 102
0

Ktoś może mi wytłumaczyć dlaczego w poniższym kodzie muszę zastosować konstruktor domyślny w klasie A?

Kopiuj
class A 
{
public: 
	A() { y = 0; }
	A(int x) { y = x; }
protected: 
	int y;
};
class B 
	:public A 
{
public: 
	B(int x) { y = x; }
};

Gdy go usunę w linijce:

Kopiuj
B(int x) { y = x; }

wyświetla się błąd.

dodanie znacznika <code class="cpp"> - furious programming

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
0

Bo konstruktor w klasie, która dziedziczy wywołuje implicit konstruktor w klasie bazowej

BT
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 102
0

A dlaczego wywołuje konstruktor domyślny z klasy A?
Tworzy jakiś obiekt pomocniczy?

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
0

Nie.
Wywołuje go na rzecz obiektu klasy B.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

Bo źle to napisałeś! A gdyby klasa A miała 100 pól to też być ich ustawianie skopiował do klasy B? o_O

Kopiuj
class B 
    :public A 
{
public: 
    B(int x):A(x) {}
};
BT
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 102
0

Nie ja to pisałem. To jest zadanie z egzaminu, które muszę poprawić, aby program się skompilował.
Teraz wszystko działa, dzięki. :)

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.