Dziedziczenie w C++ i Java

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

0

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

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

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ą)

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