Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [c++]classi astratte

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]classi astratte

    ciao.
    Sto provando a creare un engine 3d in c++ , piu' per studio e divertimento che per altro.
    Ho creato una classe astratta CMeshBase che espone tre metodi virtuali principali:
    Initialize() Setup() e Draw();
    Initialize carica le risorse principali in pratica inizializza e crea dei buffer(per i vertici e per gli indici) che verranno poi linkati nel Setup() e infine visualizzati nel draw.
    Ora CMeshBase è la classe base a cui si rifaranno tutte le altre classi Mesh specializzate.
    Per esempio:
    Vorrei creare la classe CMeshTexture che eredita da CMeshBase ; in piu questa classe deve semplicemente inizializzare una texture nell' initialize linkarla nel SetUp e visualizzarla nel Draw.
    Saranno in tutto 5 righe di codice, mentre l'initialize nella CMeshBase ne ha svariate di piu'.
    Come è il metodo in questo caso?
    Se eredito CMeshTexture da CMeshBase non vorrei fare l'override di Initialize(),setup() e draw() perchè dovrei riscrivere tutto il codice , vorrei aggiungere semplicemente quelle poche righe che devo.
    1)Ho pensato che forse si puo fare l'override ,scrivere quelle poche righe e poi chiamare il metodo della classe base .
    E' questo il modo di procedere?
    2)O è meglio creare nella classe astratta un InitializeTexture(),SetupTexture e DrawTexture() virtuali?
    in modo che qualsiasi classe che deriva da CMeshBase se è del tipo Texture utilizzerà come deve le texture per polimorfismo?

    Il dubbio è questo:
    3)E' giusto creare tantissimi metodi virtuali nella classe base
    4)o è meglio creare questi metodi virtuali exnovo nella classe che per prima li dovrà utilizzare? In questo caso CMeshTexture
    potrebbe avere InitializeTexture(),SetupTexture e DrawTexture() virtuali e la classe base niente , in questo modo pero' perdo l'utilizzo del polimorfismo di questi metodi sulla classe CMeshBase , in quanto in quest'ultima non sono presenti.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao ... Se ho capito quello che vorresti fare, puoi effettuare l' override del metodo e all' interno richiamare quello della classe base tipo :
    void CMeshTexture::Initialize()
    {
    CMeshBase::Initialize();
    // Qui le altre istruzioni
    }
    Nulla ti vieta di inserire nella classe base astratta i metodi InitializeTexture(), SetupTexture() e DrawTexture() ma non ti dimenticare che una classe astratta (in genere) dovrebbe essere una rappresentazione delle caratteristiche che tutte le classi che ereditano hanno in comune. Le caratteristiche riguardanti le texture sono una di queste???
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie KrOW.
    Nulla ti vieta di inserire nella classe base astratta i metodi InitializeTexture(), SetupTexture() e DrawTexture() ma non ti dimenticare che una classe astratta (in genere) dovrebbe essere una rappresentazione delle caratteristiche che tutte le classi che ereditano hanno in comune. Le caratteristiche riguardanti le texture sono una di queste???
    no , le texture sono relative solo delle classi dove sono previste, ad es CMeshTexture e non ad es CMeshNormal ecc....!!!!!

    ps.Ribadisco che questi sono piu' che altro studi , è per questo(per iniziare a comprendere)che mi faccio queste pare di implementazione e provo i pattern .
    grazie comunque per l'aiuto.

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.