Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    52

    [C++] cosa significa simbolo ':' (non condizionale)

    una classe è dichiarata così:
    codice:
    #include "IBGS.h"
    class FrameDifferenceBGS : public IBGS { 
    private:   
    bool firstTime;   
    cv::Mat img_input_prev;   
    cv::Mat img_foreground;   
    bool enableThreshold;   
    int threshold;   
    bool showOutput;  
    
    public:   
    FrameDifferenceBGS();   
    ~FrameDifferenceBGS();    
    void process(const cv::Mat &img_input, cv::Mat &img_output);  
    
    private:   
    void saveConfig();   
    void loadConfig(); };
    e in FrameDifferenceBGS.cpp c'è:

    codice:
     FrameDifferenceBGS::FrameDifferenceBGS() : firstTime(true), enableThreshold(true), threshold(15), showOutput(true) 
    {   
    std::cout << "FrameDifferenceBGS()" << std::endl; 
    }
    Cosa vuol dire ': public IBGS' prima delle graffe?

    E' il costruttore della classe, senza argomenti, ma cosa vuol dire quel : prima di firstTime ?

  2. #2

    Re: [C++] cosa significa simbolo ':' (non condizionale)

    Originariamente inviato da franki10
    Cosa vuol dire ': public IBGS' prima delle graffe?
    Significa che FrameDifferenceBGS eredita da IBGS con ereditarietà pubblica (tutti i membri ereditati hanno al massimo visibilità pubblica).
    E' il costruttore della classe, senza argomenti, ma cosa vuol dire quel : prima di firstTime ?
    È la sintassi di inizializzazione di campi e classi base. Serve per richiamare i costruttori dei membri e delle classi base quando viene richiamato il costruttore della classe, in modo che, quando parte il corpo del costruttore, i campi membri della classe (e le classi base) sono già inizializzati.

    In ogni caso, è tutta roba che trovi sul tuo libro di C++.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    52
    Grazie.
    Sarebbe stato lo stesso se fosse stato così:
    codice:
    FrameDifferenceBGS::FrameDifferenceBGS() 
    {   
     firstTime(true);
     enableThreshold(true);
     threshold(15);
     showOutput(true); 
     std::cout << "FrameDifferenceBGS()" << std::endl;  
    }
    Su Internet c'è qualche link che descrive il : ?
    Ho cercato ma non ho trovato niente.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da franki10
    Ho cercato ma non ho trovato niente.
    è tutta roba che trovi sul tuo libro di C++
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da franki10
    Grazie.
    Sarebbe stato lo stesso se fosse stato così:
    No. Semmai:
    codice:
     firstTime=true;
     enableThreshold=true;
     threshold=15;
     showOutput=true;
    Ma comunque è una cosa diversa, dato che si tratta di assegnamento e non di inizializzazione. La differenza è evidente quando si hanno come campi delle classi senza costruttore di default, che possono essere costruite solo specificando i parametri del costruttore.
    Su Internet c'è qualche link che descrive il : ?
    Dato che : ha almeno cinque significati diversi a seconda del contesto la vedo difficile trovare qualcosa di rilevante cercando solo "due punti" Per questo uso specifico, dai un'occhiata da qui in avanti (tra l'altro alla lezione 11 si inizia a parlare di ereditarietà, dove trovi spiegato l'altro uso).

    Ma comunque, come già detto da me è oregon, dovresti trovare tutti questi argomenti sul tuo libro di C++, a cui ti rimando - imparare il C++ leggiucchiando qua e là su internet non è una buona idea.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.