Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c/c++] classe: domanda

    ho una esempio di una classe, chiamata SampleWorkEcho

    class SampleWorkEcho : public VP_WorkBase
    {
    public:
    SampleWorkEcho ();
    int sleep_;

    private:
    int cnt_;
    static int global_cnt_;

    [...]
    SampleWorkEcho::SampleWorkEcho()
    :sleep_(0),
    body_(0),
    cnt_(global_cnt_++)
    {
    [...]
    }


    Ho un dubbio: cosa sono sleep_(0) e body_(0)?

    Grazie
    ciao

  2. #2
    uppete
    nessuno?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' un modo usato perche' quando viene chiamato il costruttore, siano inizializzati alcuni membri dell'istanza da creare.

    Ovvero, all'atto della creazione dell'oggetto i membri

    sleep_ viene inizializzato a 0

    body_ viene inizializzato a 0

    cnt_ viene inizializzato al valore del contatore global_cnt_ che viene incrementato

    E' un modo un po' piu' contratto per scrivere

    SampleWorkEcho::SampleWorkEcho()
    :sleep_(0),
    body_(0),
    cnt_(global_cnt_++)
    {
    sleep_ = 0;
    body_ = 0;
    cnt_ = global_cnt_++;

    [...]
    }

  4. #4
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Si chiama constructor initializer list.
    Molti ne abusano... serve per inizializzare quegli oggetti che devono essere inizializzati prima che il corpo della funzione abbia inizio (const, reference, ...).

    Molti lo usano anche per inizializzare normali variabili, quando questo potrebbe essere fatto tranquillamente nell'implementazione del costruttore.

    Secondo me questa è una tipica unnecessary cleverness
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sono d'accordo ... fra l'altro la leggibilita' peggiora ...

  6. #6
    mh ora è molto più chiara la cosa.

    Mi sapete consigliare un buon libro sul c++ dove vengono trattati questi argormenti (possibilmente in italiano)?
    considerate che vengo da java, e conosco il c perchè lho fatto a scuola, ma queste cose e alcune altre caratteristiche del c++ proprioo nn so da che parte girarmi

    Grazie mille a tutti

  7. #7
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    C++ Linguaggio, Libreria Standard, Principi Di Programmazione 3a Edizione.

    La terza edizione del celeberrimo testo di Stroustrup è una revisione completa del più noto e apprezzato testo sul linguaggio C++. Il testo si basa sulle ultime specifiche ANSI/ISO del C++ e tratta in modo unitario il linguaggio, la sua libreria standard e le tecniche di progettazione fondamentali.

    E' un po il K&R del C++. Senza bisogno di spendere soldi lo trovi sicuramente in biblioteca.

    Tratta bene o male tutto il linguaggio anche se di molti argomenti nn va poi cosi a fondo (vedi i templates o la libreria standard)
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  8. #8
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Riguardo l'argomento del topic...

    class Table{

    int x, y, &ref;
    const int size;

    public:

    Table(int a, int &b) : size(a), ref(b){
    }
    };



    In questo caso è obbligatorio inizializzare size (è constante) e ref (reference) prima del corpo della funzione.

    Se nn lo fai ti da proprio errore di compilazione.
    error C2758: 'Table::size' : must be initialized in constructor base/member initializer list

    Al contrario inizializzare x ed y li sarebbe una unnecessary cleverness ...voler fare troppe finezze ...rendi tutto incasinato.

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