Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]interfacce e classi

    ciao.
    Un interfaccia in c++ è equivalente ad una classe astratta pura?
    In cosa differisce (se differisce) la programmazione con le interfacce dalla programmazione c++ standard?
    Voglio dire nei programmi tipo java o c# non si parla di classi astratte e si usa un costrutto diverso per implementare un interfaccia dall' ereditarietà normale(ad es in c# credo sia implements) e interface per dichiarare un interfaccia.
    Inoltre si possono implementare tranquillamente piu di un interfaccia , mentre si puo ereditare solo da una classe.
    sbaglio?

    grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non ho capito la tua serie di domande.
    Cmq in java c'è ereditarietà singola da classi, mentre ereditarietà multipla da interfacce. In c# non sono sicura al 100 % che sia così, chiedo conferma.

    Per quanto riguarda le classi astratte, in java esistono eccome, sono classi per cui impongo un comportamento da definire (il metodo astratto).
    Differiscono dalle interfacce per il semplice fatto che in genere al loro interno hanno dei metodi funzionanti, hanno campi, vogliono imporre un comportamento a chi le usa.

    Un interfaccia in c++ è equivalente ad una classe astratta pura?
    In cosa differisce (se differisce) la programmazione con le interfacce dalla programmazione c++ standard?
    cosa vuole dire ???

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    come è corretto implementare in c++ piu' di un interfaccia?
    con l'eredità multipla ?
    o con altri metodi?

    grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    continui a fare confusione: l'interfaccia è la dichiarazione di intenti, dici cosa fa una classe. Dichiari il comportamento di una classe.
    L'implementazione ovviamente è il punto in cui dici come la classe fa quello che dichiari.
    L'ereditarietà è un'altra roba: è la possibilità di partire da una classe e aggiungere via via comportamenti e proprietà che sono valide in un determinato ambito (ma mi rendo conto che detta così è molto molto molto riduttiva)
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie Valia.
    Il problema è che da quello che ne so in c++ non esistono le interfacce come in java e c# , le interfacce dovrebbero essere tipo classi astratte pure, sbaglio?
    in c++ come da titolo , e implementare un interfaccia in c++ da quello che ne so è come ereditare da una classe pura astratta.
    grazie.
    ciao.

  6. #6

    Re: [c++]interfacce e classi

    Originariamente inviato da giuseppe500
    ciao.
    Un interfaccia in c++ è equivalente ad una classe astratta pura?
    In cosa differisce (se differisce) la programmazione con le interfacce dalla programmazione c++ standard?
    Voglio dire nei programmi tipo java o c# non si parla di classi astratte e si usa un costrutto diverso per implementare un interfaccia dall' ereditarietà normale(ad es in c# credo sia implements) e interface per dichiarare un interfaccia.
    Java e C# non consentono l'ereditarietà multipla generale, ma solo con le interfacce. Il C++ invece consente il caso più generale possibile (ereditarietà multipla da classi di qualunque genere), che comunque in genere viene impiegata in maniera analoga a quanto si farebbe in Java o in C# con le interfacce, usando, come dici, classi astratte pure al posto delle interfacce.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da giuseppe500
    grazie Valia.
    Il problema è che da quello che ne so in c++ non esistono le interfacce come in java e c# , le interfacce dovrebbero essere tipo classi astratte pure, sbaglio?
    in c++ come da titolo , e implementare un interfaccia in c++ da quello che ne so è come ereditare da una classe pura astratta.
    grazie.
    ciao.
    A grandi linee puoi considerare l'header (per la parte riguardante la dichiarazione dei metodi) una interfaccia: se ci fai caso tu dichiari la signature di un metodo così come faresti con una interfaccia in java o c#, poi passi alla sua implementazione
    RTFM Read That F*** Manual!!!

  8. #8
    Originariamente inviato da valia
    A grandi linee puoi considerare l'header (per la parte riguardante la dichiarazione dei metodi) una interfaccia: se ci fai caso tu dichiari la signature di un metodo così come faresti con una interfaccia in java o c#, poi passi alla sua implementazione
    @valia
    Le tue considerazioni, sono fuorvianti, e gli header in questo contesto non c'entrano un bel nulla.

    La risposta concisa ma precisa alla domanda di giuseppe500 è quella data da MItaly.

    La mia spiegazione:
    In C++ le interfacce, esattamente per come sono definite negli altri linguaggi, non ci sono;
    ma c'è l'ereditarietà multipla (non presente "casualmente" nei linguaggi che hanno le interfacce, quali ad esempio il C#, Java e VB), che combinate alle classi astratte pure (o quelle che io chiamo "purissime": aventi solo metodi virtuali puri), possono acquisire, (ed è il programmatore che lo decide), la semantica di interfaccia.

    Insomma come al solito, in C/C++ viene delegata al bravo programmatore, la semantica di ciò che sta scrivendo.

    Tipici esempi di interfacce realizzate in C++ sono ad esempio le classi con prefisso M in MacApp, ed il prefisso I (se non ricordo male) nella roba microsozz.

    @giuseppe500
    A proposito di interfacce, è interessante anche dare un'occhiata ai protocolli ed alle categorie di Objective-C.
    ;-)

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    infatti ho detto A GRANDI LINEE se leggi bene

    non ho detto che c'è corrispondenza uno ad uno, ho detto che in generale molto spesso ti limiti ad usare un header C++ come dichiarazione di intenti nei casi in cui ti interessa dichiarare una classe che abbia determinati comportamenti e implementarla altrove e per qualche motivo vuoi bypassare il RTTI (quindi ti basta che risolva il tutto a tempo di compilazione).
    Non dico che sia corretto, ma nella pratica codice di questo tipo in giro se ne vede e ne viene ancora prodotto.
    Java o C# (o meglio i linguaggi OOP più puri di C++) non ti danno questa scelta, in C++ puoi ancora girarci intorno.
    Nel caso sopra citato, la famosa interfaccia java la puoi IN GENERALE far corrispondere a quella parte di header, visto che cmq il linguaggio non ti consente di non usare ereditarietà e polimorfismo, visto che cmq hai definito una classe.
    RTFM Read That F*** Manual!!!

  10. #10
    Se si parla di interfacce con il senso che hanno in C# o in Java gli header non c'entrano nulla.
    Le interfacce servono fondamentalmente per consentire al codice di una libreria di lavorare sulla tua classe tramite i metodi definiti sull'interfaccia, indipendentemente dal tipo "vero" della tua classe, tramite virtual dispatching.

    (tra parentesi, RTTI non c'entra con le funzioni virtuali, è un'aggiunta)
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.