Visualizzazione dei risultati da 1 a 4 su 4

Discussione: c++, classe annidata

  1. #1

    c++, classe annidata

    ho provato a fare un programma di esempio che usa le classi annidate, funziona tranne un metodo che fa uscire il programma con un errore, il programma viene compilato correttamente, evidentemente sbaglio a richiamare una variabile
    quello che non funziona è setname()
    codice:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    class animali{
          public:
                 class cani;
                 cani *cane;
    
                 animali();
                 ~animali();
                 
    };
    class animali::cani{
          public:
                 cani();
                 ~cani();
                 char nomecane[10];
                 void abbaia(void);
                 void mordi(void);
                 void mangia(char *tipocibo);
                 void setname(char *nome);
    };
    animali::animali(){
    
    }
    animali::~animali(){
    }
    animali::cani::cani(){
    
    }
    animali::cani::~cani(){
    }
    void animali::cani::abbaia(void){
         cout << "BAU!" << endl;
    }
    void animali::cani::mordi(void){
         cout << this->nomecane << " ti sta azzannando" << endl;
    }
    void animali::cani::mangia(char *tipocibo){
         cout << this->nomecane << " sta mangiando " << tipocibo << endl;
    }
    void animali::cani::setname(char *nome){
             strcpy(nomecane, nome);
    }
    int main(int argc, char *argv[]){
        animali animale, *anim;
        animale.cane->setname("Pippo");
        animale.cane->abbaia();
        animale.cane->mordi(); 
        animale.cane->mangia("Un Osso");
        
        anim=new animali;
        anim->cane->setname("Rocky");
        anim->cane->abbaia();
        anim->cane->mordi(); 
        anim->cane->mangia("Delle crocchette");
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    cosa sbaglio?

  2. #2
    ok forse è meglio che mi vedo bene tutte le funzionalità delle classi, poi passo a vedere anche quelle annidate... mi sa che è meglio...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    xkè invece di annidare non usi l'ereditarietà?
    *********************************
    Andrea
    *********************************

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Squall1988
    xkè invece di annidare non usi l'ereditarietà?
    effetivamnte la relazione fra animale e cane è "is a", perchè un cane è un animale e estende la classe non "has a", non è che un animale "contiene" un cane.

    Sincramente non so a cosa sia dovuto l'errore, pero accade solo quando animale è per valore e non un puntatore(infatti Rocky viene giustamente assegnato).

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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.