Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]subclassing idee confuse

    ciao.
    Programmando in c++ mi sono imbattuto piu' di una volta nel termine subclassing , ma leggendo qua e la ho finito per confondermi le idee.
    Avete un link o 2 righe?
    uso visual con c++ 6 visual studio .net

  2. #2
    Per quanto riguarda in generale il concetto di subclassing nella programmazione OOP vale quanto dice menphisx.
    Se parliamo invece del caso specifico di applicazioni a finestre Windows il subclassing, detto in due parole, è una tecnica con cui si vanno ad intercettare i messaggi di una finestra (o di un'intera classe di finestre) elaborandoli prima della finestra in questione. Un metodo comune di effettuare il subclassing è sostituire l'indirizzo della wndproc di una finestra con quello di una propria procedura, gestire i messaggi che interessano in questa procedura e richiamare la wndproc originale per tutti gli altri messaggi.
    Ecco uno spezzone di codice di un programma a cui sto lavorando che fa uso di questa tecnica:
    codice:
    WNDPROC realMainIVWndProc;						//Real Main IVW wndproc
    //...
    //Perform the subclass
    realMainIVWndProc=(WNDPROC)(LONG_PTR)SetWindowLongPtr(hMainWindow,GWLP_WNDPROC,(__int3264)(LONG_PTR)MainIVWndProc);
    //...
    //IrfanView main window window procedure
    LRESULT CALLBACK MainIVWndProc(HWND hWnd,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
    )
    {
    	//Message switch
    	switch(uMsg)
    	{
    		case WM_MOUSEWHEEL: //Mouse wheel rotated
    		//...
    		break;
    		//End mouse wheel rotated
    		//...
    	} //End message switch
    	return CallWindowProc(realMainIVWndProc,hWnd,uMsg,wParam,lParam); //All other messages are passed to the real MainIVW wndproc
    } //End MainIVWndProc
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Riguarda l'OOP.
    Si chiama ereditarietà ed è una proprietà dell'OOP.
    Esempio:
    codice:
    class A {
       void b() {}
       public:
          A() {}
    };
    
    class B : public A {
       void ab() {}
       public:
          B() : A() {}
    };
    B eredità tutti i metodi di A e aggiunge la funzione ab per cui puoi scrivere:
    codice:
    B b = new B();
    A a = new A();
    
    b->b();
    b-ab();
    a->b();
    //Non puoi scrivere:
    a->ab();
    http://www.google.it/search?q=oop+c%...ient=firefox-a

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.