Dziedziczenie w C++ i Java

Odpowiedz Nowy wątek
2011-08-03 23:41
0

Witam,

nie byłem pewien gdzie dać ten temat bo dotyczy dwóch języków, przepraszam jeśli to zły dział. Programowałem trochę w C++ i Java, ostatnio jednak większość czasu programowałem w Java i zamierzałem sobie teraz przypomnieć troszkę C++ i natrafiłem na pewien mankament, którego nie mogę wytłumaczyć, bo pewnie mi brakuje jakichś wiadomości. Otóż mam dwa takie same kody napisane w obu językach:

Kod C++:

#include <cstdio>
#include <cstdlib>

using namespace std;

class base {
public:
    void f() const { printf( "tekst1" ); }
};

class inh : public base {
public:
    void f() const { printf( "tekst2" ); }
};

int main() {
    base* o = new inh();

    o->f();

    printf( "\n\n" );
    system( "pause" );
    return EXIT_SUCCESS;
}

i tu mi wyświetla tekst1.

Kod w Java:

class base {
    public void f() { System.out.println( "tekst1" ); }
}

class inh extends base {
    public void f() { System.out.println( "tekst2" ); } 
}

public class java1 {
    public static void main( String args[] ) {
        base o = new inh();

        o.f();
    }
}

i tu mi wyświetla tekst2. Dlaczego?

Pozdrawiam i dziękuję z góry za pomoc.
JT

edytowany 1x, ostatnio: nwnuinr, 2011-08-03 23:41

Pozostało 580 znaków

2011-08-03 23:53
mim
0

W klasie base funkcja f powinna być funkcją wirtualną?

 virtual void f() const { printf("tekst1"); }

Pozostało 580 znaków

2011-08-04 01:57

jak wyżej, w javie metody są w standardzie wirtualne, w c++ masz wybór, albo nie korzystasz z polimorfizmu, albo korzystasz (w tym drugim wypadku funkcję trzeba oznaczyć jako wirtualną)


Nie powinno być jakiegoś ostrzeżenia o przysłanianiu funkcji klasy bazowej? - msm 2011-08-04 05:05
Raczej nie, ja w ogóle nie kojarzę ostrzeżeń związanych z przesłanianiem, chyba, że się pojawiają na jakimś wyższym poziomie spamowania. - byku_guzio 2011-08-04 09:59

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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