Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di sylvaticus
    Registrato dal
    Aug 2004
    Messaggi
    1,207

    [C++] accesso alle funzioni della classe "madre"

    Ho una classe alunni i cui membri hanno tra le proprietà un puntatore alla classe quaderni e tra le funzioni una funzione getAlumnName();

    come posso accedere, da dentro la classe quaderni, alle funzioni della classe alunni, ad es. per sapere il nome del proprietario??

    Ho provato questo ma non va:

    AnsiString nome_proprietario= (alunni)* this->getAlumnName;

    Ho un sacco di queste situazioni nel programma che mi è capitato tra le mani :-((((
    <<contro i gas serra, spero più nelle nuove tecnologie pulite che nelle conferenze internazionali>>
    -- Steven Chu

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Hai provato a fare
    codice:
    NomeClasseMadre::Funzione()
    Se non va non credo che tu lo possa fare...
    In questo caso, ti consiglio di mettere un'ansi string anche nella classe quaderni, e nel costruttore della classe alunno, pass il valore alunno a quello del ansi string di quaderni.
    Se posti il codice ti posso fare un esempio pratic.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it L'avatar di sylvaticus
    Registrato dal
    Aug 2004
    Messaggi
    1,207
    no purtroppo non funziona.. ho provato a fare un codice di esempio:

    ok.. allora ho questi tre files:
    main.cpp, cani.h e persone.h

    >>>>persone.h>>>>>>>>>>

    #ifndef PERSONE_H
    #define PERSONE_H
    #include <string>
    #include "cani.h"

    namespace std{

    class persone {
    string cognome;
    cani *miocane;
    public:
    persone(string nome);
    string getCognome();

    };
    }

    #endif
    <<<<<<<<<<<<<<<<<<<<<<<<

    >>>>>cani.h>>>>>>>>>>>>>>

    #ifndef CANI_H
    #define CANI_H
    #include <string>

    namespace std{

    class cani {
    string proprietario;
    public:
    cani();
    void setProprietario();

    };
    }

    #endif
    <<<<<<<<<<<<<<<<<<<<<<<

    >>>>>main.cpp>>>>>>>>>>>

    #include "persone.h"
    #include "cani.h"
    #include <string>
    #include <iostream>


    using namespace std;

    cani::cani(){

    };

    void
    cani::setProprietario() {
    //proprietario = (persone) this->getCognome();
    };

    persone:ersone(string nome){
    cognome=nome;
    miocane = new cani();
    miocane->setProprietario();

    };

    string
    persone::getCognome(){
    return cognome;
    };

    main (){
    persone* proprietario_di_cane;
    proprietario_di_cane = new persone("Rossi");
    cout << "fatto"<<endl;
    };
    <<<<<<<<<<<<<<<<<<<<<<<

    Quello che non funziona è "proprietario = (persone)
    this->getCognome();"
    Ovviamente in quest'esempio potrei fare qualcosa del tipo:
    miocane->setProprietario(cognome);
    ma l'idea generale è:
    ho una classe.
    In questa classe "madre" viene dichiarato un puntatore ad un oggetto di
    un altra classe e quindi viene creato con new un istanza di questa
    seconda classe.
    Quando sono dentro alla seconda classe, come posso far riferimento alle
    funzioni della classe madre??
    E' veramene impossibile??? :-(((
    <<contro i gas serra, spero più nelle nuove tecnologie pulite che nelle conferenze internazionali>>
    -- Steven Chu

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Utilizzando la parola chiave super (dovrebbe esistere anche in C++).


    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

  5. #5
    Utente di HTML.it L'avatar di sylvaticus
    Registrato dal
    Aug 2004
    Messaggi
    1,207
    no.. c'è in java ma non credo in C++ (almeno a leggere alcuni documenti googlando in giro)

    Ho scoperto che così il compilatore me lo accetta:

    proprietario = ((persone*) this)->getCognome();

    ma mi lascia proprietario vuoto.. temo che faccia una nuova istanza di persone invece di far riferimento a quella che ha creato l'istanza sulla quale mi trovo..
    <<contro i gas serra, spero più nelle nuove tecnologie pulite che nelle conferenze internazionali>>
    -- Steven Chu

  6. #6
    come posso accedere, da dentro la classe quaderni, alle funzioni della classe alunni, ad es. per sapere il nome del proprietario??
    Non puoi inserire nella classe alunni una funzione che restituisce per esempio il nome dell'alunno?

    In java di solito si fa così...

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Stai a fare una casino. Come l'hai messa tu sembrava che si parlasse di ereditarietà (infatti molti ti hanno dato risposte in questo senso). Invece il tuo è un semplice problema di puntatori, che si risolve così:
    codice:
    class cani { 
    persone *owner; 
    string proprietario; 
    public: 
    cani(); 
    void SetOwner(persone *NewOwner); 
    persone *GetOwner() 
    } 
    void cani::SetOwner(persone *NewOwner)
    {
     owner = NewOwner;
    }
    persone* cani::GetOwner()
    {
     return owner;
    }
    Poi nel costruttore di persone ci scrivi ...
    codice:
    persone::persone(string nome)
    { 
     cognome=nome; 
     miocane = new cani(); 
     miocane->setProprietario(this); 
    }
    Questo è applicabile per qualunque accoppiamento "contenitore-contenuto".

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da sylvaticus
    proprietario = ((persone*) this)->getCognome();
    Da quello che vedo qui non mi sembra affatto un problema di tipo "contenitore/contenuto", ma proprio di ereditarietà.

    Ed è proprio gercando con google che avevo trovato questo.
    The super keyword allows you to explicitly state that you are calling a base-class implementation for a function that you are overriding. All accessible base-class methods are considered during the overload resolution phase, and the function that provides the best match is the one that is called.
    Ma essendo tratto dal MSDN forse andrebbe preso con le pinze...

    Infatti, la voce successiva riportata da Google mostra questo:
    Java also uses the super keyword when a subclass method calls the superclass method. In C++, you use the name of the superclass and the :perator instead
    Tratto da qui.


    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

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Originariamente inviato da LeleFT
    Da quello che vedo qui non mi sembra affatto un problema di tipo "contenitore/contenuto", ma proprio di ereditarietà.

    Ed è proprio gercando con google che avevo trovato questo.

    Ma essendo tratto dal MSDN forse andrebbe preso con le pinze...

    Infatti, la voce successiva riportata da Google mostra questo:

    Tratto da qui.


    Ciao.
    Infatti è lui che ha scritto male. Guarda come sono strutturate le classi: è un problema di contenitore-contenuto. Tra l'altro un'ereditarietà cani-persone la vedo male anche dal punto di vista della semantica

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da pprllo
    Infatti è lui che ha scritto male. Guarda come sono strutturate le classi: è un problema di contenitore-contenuto. Tra l'altro un'ereditarietà cani-persone la vedo male anche dal punto di vista della semantica
    E' vero... sai, non mi sono soffermato sui nomi delle classi, ma sul codice specifico.

    Direi che far discendere un cane da una persona non è tanto corretto, peggio se si vuol far discendere una persona da un cane...


    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.