Dziedziczenie a składnik prywatny klasy podstawowej

0
#include <iostream>
using namespace std;

class pierwsza
{
    int x;
public:
    pierwsza(int z)
    {
         x = z;
    }
    void funkcja()
    {
        cout << x;
    }
};

class druga : pierwsza
{
    public:
    druga(int x) : pierwsza(x)
    {

    }
};

int main()
{
    druga d(3);
    d.funkcja();
    return 0;
}
 

Dlaczego nie mogę użyć funkcji funkcja dla obiektu klasy druga jak przecież funkcję o nazwie funkcja odziedziczyłem.

0

Tak też nie działa, a przecież jak odziedziczyłem składnik x to w klasie druga powinien on być jak prywatny, więc z funkcji publicznej powinno mieć się do niego dostęp ?:

 #include <iostream>
using namespace std;

class pierwsza
{
    int x;
public:
    pierwsza(int z)
    {
         x = z;
    }
    void funkcja()
    {
        cout << x;
    }
};

class druga : pierwsza
{
    public:
    druga(int x) : pierwsza(x)
    {

    }
    void funkcja()
    {
        cout << x;
    }
};

int main()
{
    druga d(3);
    d.funkcja();
    return 0;
}
2

Standardowo, kiedy nie określimy typu dziedziczenia, jest używane private.

Także w Twoim kodzie do poprawy:

 class druga : pierwsza

na:

 class druga : public pierwsza
1

Na pierwsze pytanie @Shakaz już odpowiedział, natomiast:

Świetny Lew napisał(a):

a przecież jak odziedziczyłem składnik x to w klasie druga powinien on być jak prywatny
Nie, klasa pochodna nie ma dostępu do prywatnych składowych klasy bazowej. Do tego celu jest protected.

0
Shakaz napisał(a):

Standardowo, kiedy nie określimy typu dziedziczenia, jest używane private.

To jest prawdziwe tylko, gdy typ został zdefiniowany jako class. Klasa ma domyślny, prywatny modyfikator dostępu. W przypadku struktur domyślnym modyfikatorem jest public.

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