dichiarazione e definizione

1

Le persone dicono che la definizione viene usata quando la roba dichiarata ha un po 'di memoria allocata. Se dichiaro una classe

class fish
{
  char* name;
  int type;
  //someting i dont know about fish
}; 
int main()
{ 
   fish a;
   return 0;
}

Dovrebbe significare che questo è un pesce dichiarato o un pesce definito?

Fammi provare prima!

si chiama pesce definito!

Ora lascio una violazione a // qualcosa ..... (questa è una dichiarazione valida di qualcosa che non so proprio) Sai che cosa c'è a // che il debugger potrebbe mai raggiungere? Significa anche che non ci sono allocazioni di memoria per questo. Sarò profondamente triste nel sentire un no.

    
posta Dalton 09.08.2011 - 08:51
fonte

3 risposte

4

No, è più simile a:

// declaration
class Fish {
  void swim();
}

// definition
void Fish::swim() {
  // some code for swimming
}

Quindi effettivamente usando un oggetto di classe Fish si chiama istanziazione:

int main() {
  Fish nemo;
}

Perché crei un'istanza della classe di pesce.

Per prima cosa dichiari nell'intestazione che esiste qualcosa come Fish . Quindi nel file .cpp puoi definire come funziona questa cosa Fish. In questo caso l'allocazione della memoria non è direttamente collegata alla dichiarazione e alla definizione.

La linea:

// something i dont know about fish

non fa nulla, poiché // lo contrassegna come un commento e il compilatore semplicemente lo ignorerà.

Il debugger non raggiungerà mai alcuna parte di una dichiarazione. Non è un codice che viene eseguito affatto. Dichiara solo che c'è qualcosa che può essere usato da altre parti del codice.

    
risposta data 09.08.2011 - 09:13
fonte
4

In C ++ (quasi testualmente dallo standard),

  • Una dichiarazione è l'introduzione di un nome che ne specifica l'interpretazione e gli attributi (una dichiarazione può anche ridichiarare un nome già dichiarato)

  • Le dichiarazioni sono definizioni, attese:

    • funzione dichiarata senza un corpo,
    • utilizza extern o una specifica di collegamento e né un inizializzatore né un corpo di funzione
    • dichiara un membro di dati statici in una dichiarazione di classe
    • si tratta di una dichiarazione del nome di classe, una dichiarazione typedef, una dichiarazione di utilizzo o una direttiva using.

Quindi nel tuo esempio, tutte le dichiarazioni sono anche definizioni.

    
risposta data 09.08.2011 - 09:46
fonte
3

Ci sono quattro concetti nel mondo di OOP:

  1. Definizione (quando si definisce la classe)

    public class Human
    {
        private string firstName;
    
        public string FirstName { get; set; }
    }
    
  2. Dichiarazione (quando dichiari che una variabile è del tipo di una classe)

    Human saeed;
    
  3. Istanziazione (quando assegni la memoria alla tua variabile di riferimento usando la parola chiave new )

    saeed = new Human();
    
  4. Inizializzazione (quando si inizializza la variabile sui suoi valori iniziali, o valori predefiniti)

    saeed.FirstName = "Saeed";
    

Ora, a volte puoi dichiarare, creare un'istanza e inizializzare una variabile in una riga di codice:

Human saeed = new Human() { FirstName = "Saeed" };
    
risposta data 09.08.2011 - 09:27
fonte

Leggi altre domande sui tag