Curiosità c++ Java

sabato 29 maggio 2010 - 15.55

luigidibiasi Profilo | Guru

Scrivo il codice in java per chiedere se qualcuno sa come emulare questo comportamento in c++

semplice dichiarazione di interfaccia e classe che la implementa:
public interface java1 { void metodo1(); } public class c1 implements java1 { void metodo1() { int i =1; } }


nel main utilizzo l'interfaccia astraendomi dall'implementazione per richiamare il metodo { java1 j = (java1) new c1(); << chiamo il metodo sull'interfaccia e non sull'oggetto j.metodo1(); }

in c++ è possibile fare una cosa del genere? (evitando di usare la tecnica che usa COM)

Grazie




Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

aiedail92 Profilo | Expert

Ciao

In C++ standard non esiste un concetto separato di "interfaccia", si usa semplicemente una classe base contenente metodi virtuali puri, quindi la classe concreta deriva dalla classe base e ne implementa i metodi (cioè implementa l'interfaccia)

class java1 { public: virtual void metodo1() = 0; // funzione virtuale pura };
class c1 : public java1 { public: virtual void metodo1() { std::cout << "c1::metodo1()" << std::endl; } };
int main(int argc, char** argv) { java1* interface = new c1; // meglio usare RAII, e.g. std::auto_ptr o std::tr1::shared_ptr interface->metodo1(); delete interface; }

Luca

luigidibiasi Profilo | Guru

ok... la mia idea nasceva dal fatto che ho visto in vc++ la keyword interface e mi domandavo cosa mappasse. (una classe base a questo punto?)
Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/

aiedail92 Profilo | Expert

La keyword interface del Visual C++ corrisponde alle interfacce che trovi anche nel C# e in Vb.Net, però si tratta di interfacce managed in ambiente .net, non è C++ standard...

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5