Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98

    char come parametro di ritorno

    Raga, immaginiamo di avere una classe del tipo:
    classe.h
    codice:
    #ifndef _BASE_
    #define _BASE_
    
    #define D 30
    
    class base
    {
    private:
    
        int a_;
        int* p_a;
        char n_[D];
    
    public:
    
        base();
        ~base();
        void seta_(int);            // inizializzo la variabile a
        void setp_a(int);            // aggancio il puntatore alla variabile a
        void setn_(char*);            // inizializzo l'array di caratteri n_
        void display();                // stampo i valori delle variabili dell'oggetto di classe base
        int geta_();
        char* getn_();
        int getp_a();
    };
    
    #endif // _BASE_
    classe.cpp
    codice:
    #include "base.h"
    #include <string>
    #include <iostream.h>
    
    base::base()
    {
        a_ = 0;
        strcpy(n_,"vuota");
        p_a = NULL;
    }
    
    base::~base() {}
    
    void base::seta_(int a)
    {
        a_ = a;
    }
    
    void base::setp_a(int a)
    {
        p_a = &a;
    }
    
    void base::setn_(char* n)
    {
        strcpy(n_,n);
    }
    
    void base::display()
    {
        cout << "a_:" << a_ << endl;
        cout << "*p_a:" << *p_a << endl;
        cout << "n_:" << n_ << endl;
    }
    int base::geta_()
    {
        return a_;
    }
        
    char* base::getn_()
    {
        char tmp[30];
        strcpy(tmp,n_);
        return tmp[30];
    }
        
        
    int base::getp_a()
    {
        return *p_a;
    }
    ho problemi nel farmi ritornare l'array di caratteri quando uso il metodo get_n_(). Come posso risolvere? grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: char come parametro di ritorno

    Originariamente inviato da sccc
    codice:
    char* base::getn_()
    {
        char tmp[30];
        strcpy(tmp,n_);
        return tmp[30];
    }
    No, così non va bene (tra l'altro è sbagliato, perché return tmp[30] ritorna il 31° carattere che non esiste e comunque sarebbe il ritorno di un char e non di un char*).
    La variabile 'tmp' è automatica, cioè "sparisce" quando la funzione termina.

    La questione principale è che quel n_ è un campo della classe. Qui dipende da cosa si vuole "offrire" al chiamante di getn_().

    Si potrebbe:

    a) Far semplicemente return n_;
    Il chiamante ha quindi un puntatore diretto al campo interno alla classe. Non è certo il massimo ... il chiamante potrebbe alterare il campo

    b) Allocare dinamicamente una nuova stringa (array di char), copiare il contenuto di n_ e ritornare il puntatore alla nuova stringa.

    c) Usare un oggetto string da ritornare, visto che siamo in C++.

    d) Dichiarare 'static' quel char tmp[30]; in modo da rendere 'tmp' una variabile statica e non automatica. Il puntatore ritornato va usato chiaramente prima di chiamare nuovamente getn_().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    ah capisco...il problema è che sto ancora alle prese con differenze tra char* e char...
    Oserei troppo se ti chiedessi di postare un esempio delle tre soluzioni che mi hai presentato?! Forse cos' chiarisco meglio le idee. TY

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Il linguaggio va specificato anche nel titolo.

    Lo aggiungo io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.