Dziedziczenie - wywoływanie funkcji klasy bazowej wewnątrz funkcji klasy pochodnej

0

jak mam takie coś
to dlaczego jak pisze y.show() pojawia mi się jakaś dziwna liczbę i 10 a powinno byc 10 i 10.

#include <iostream>

using namespace std;

class test
{
    private:
        int x;
    public:
        virtual void fun(int a);
        virtual void show(void) const;
        //virtual void fun(int a, int b);
};

class test2 : public test
{
    private:
        int y;
    public:
        virtual void fun(int b);
        virtual void show(void) const;
};

int main(void)
{
    test x;
    test2 y;
    
    x.fun(10);
    y.fun(10);
    
    y.show();
    
//    test & pe = y;
//    pe.fun(10);
//    pe.show();
    
}

void test::fun(int a)
{
    x = a;
}
void test::show(void) const
{
    cout << x << endl;
}
void test2::fun(int b)
{
    y = b;
    
}
void test2::show(void) const
{
    test::show();
    cout << y << endl;
}
1
 test::show();

na rzecz jakiego obiektu wywołujesz tą funkcje? (w tym pytaniu masz zawarta odpowiedź)

0

no na RZecz obiektu y, ale żeby wyświetlić składową x , muszę użyc publicznej metody klasy test bo inaczej się nie da. a takie coś nie działa

a jak przykład z ksiażki

void brass::ViewAcct() const
{
    std::cout << "Klient: " << fullName << std::endl;
    std::cout << "Nr rachunku: " << acctNum << std::endl;
    std::cout << "Stankonta: " << balance << std::endl;
}
void brassPlus::ViewAcct() const
{
    brass::ViewAcct();
    std::cout << "Limit debetu: " << maxLoan << std::endl;
    std::cout << "Kwota zadluzenia: " << owesBank << std::endl;
    std::cout << "Stopa oprocentowania: " << 100 * rate << std::endl;
}

no i to działa, więc co jest źle w moim, przecież robię to samo

1

Wypisujesz to co jest w zmiennej x w obiekcie y tak jak chcesz ale że nie przypisałeś tam nic sensownego to wypisuje 'dziwne' rzeczy.

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