Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367

    [C++] Creare oggetto da classe... possibile?

    Ho un puntatore ad un oggetto A.
    Vorrei creare un altro oggetto B della stessa classe dell'oggetto A.
    Solo che c'è il polimorfismo...

    Mi spiego meglio (o almeno cerco!):
    codice:
    class B {...}; // B è astratta
    class D1 : B {...};
    class D2 : B {...};
    class D3 : B {...};
    codice:
    B *puntatore = [qualcosa da input]
    // puntatore potrebbe puntare a un D1,D2 o D3
    
    // pseudocodice: quello che voglio fare
    return Crea_Oggetto_Da_Classe(Trova_Classe(puntatore));
    Per fare una cosa simile servierbbe un linguaggio flessibile... il C++ lo è abbastanza?

    Forse si può fare con <typeinfo> ?

    Giusto per info, in java si può fare? come?
    I've got a bike. You can ride it if you like.

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    nn sono sicurissimo di aver capito cosa intendi fare. Cmq il late binding del polimorfismo ti permette di trovare run time la classe specifica fra le derivate (quindi trova_classe).

    Per il resto un oggetto di una classe derivata è fndamentalmente anche un oggetto della sua classe base (cioè puoi riferirti ad esso sia con B* (con B classe derivata da A), sia con A* (la sua base).

    (o per caso intendi che nn vi sia parentela fra A e B?)
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    Io non voglio sono la classe dell'oggetto... voglio creare un new oggetto della stessa classe!

    Da B (supponiamo astratta) derivano D1,D2 e D3.
    Io ho un puntatore *B che si chiama P, e quindi può puntare anche ad un oggetto D..

    B *funzione(B* P);

    Se P punta ad un oggetto di tipo D1, allora la funzione mi restituirà un "new D1". Se P punta a un D2, voglio che restituisca un "new D2" and so on.
    I've got a bike. You can ride it if you like.

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    se le classe sono solo D1, D2 e D3 ti basta fare un controllo sul tipo dell'argomento e utilizzare degli if per restituire un ogetto dello stesso tipo.

    Se non devi limitarti a D1, D2 e D3 ci vogliono meccanismi di riflessione che mipare c++ non abbia, a differenza di java in cui è possibile ottenere un oggetto Class che rapprsenta la classe di un oggetto, costruire sue istanze, istanziare un oggetto a partire dalla stringa che rappresenta il nome della classe ecc...

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    Utente di HTML.it L'avatar di edriv
    Registrato dal
    Oct 2004
    Messaggi
    367
    grazie, era quello che volevo sapere...
    ... cioè che il C++ ha un supporto per il polimortismo un po' limitato (ma ne guadagna in velocità).
    I've got a bike. You can ride it if you like.

  6. #6
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    ...potresti creare tu una funzione virtuale type() che ogni classe derivata poi ridefinisce. In tal modo, attraverso proprio il polimorfismo, potresti sapere quale classe specifica è invocata (RTTI).
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

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 © 2025 vBulletin Solutions, Inc. All rights reserved.