Dziedziczenie - Blad konstruktora

0

Witam!!

Chciałbym zrozumieć, co jest nie tak, w tym prostym kodzie i dlaczego kompilator wyświetla błąd :

"No matching function for call to 'A::A()'

Dodatkowo, błędu nie ma, gdy w konstruktorze klasy bazowej, dam wartość domniemaną dla argumentu.

Proszę o informacje, dlaczego tak się dzieje

 #include <iostream>
#include <vector>
using namespace std;
class A
{
protected:
    int a;
public:
    A(int x):a(x){}
};
class B : public A
{
private:
    int x;
public:
    B(int c):x(c){}
};

int main()
{

    return 0;
}
0
#include <iostream>
#include <vector>
using namespace std;
class A
{
protected:
    int a;
public:
    A(int x):a(x){}
};
class B : public A
{
private:
    int x;
public:
    B(int c): A(c), x(c){}
};
 
int main()
{
 
    return 0;
}
1

Podczas tworzenia obiektu B najpierw jest utworzony obiekt A. Jeżeli nie powiesz jakiego konstruktora A chcesz użyć to kompilator będzie próbował użyć domyślnego, bezargumentowego. W tym przykładzie A nie ma domyślnego, bo zdefiniowałeś konstruktor z parametrem.

błędu nie ma, gdy w konstruktorze klasy bazowej, dam wartość domniemaną dla argumentu.
bo wtedy można użyć tego konstruktora jako bezargumentowego.

0

Dziękuje za odpowiedz!

1 użytkowników online, w tym zalogowanych: 0, gości: 1