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

    [C++]problema di eredità e polimorfismo

    una classe ha un metodo INSERT sovraccaricato con 3 passaggi di parametri differenti:
    INSERT(INT,CHAR&);
    INSERT(CHAR&,CHAR&);
    INSERT(STRUCT&);

    Nella classe derivata con ereditarietà pubblica, mi vede solo il primo metodo che è stato rinominato per effettuare operazioni in più della precedente.

    Come faccio a richiamare il 2' metodo? non basta
    Derivata.Insert(char1, char2)?

  2. #2
    Qui devi usare la direttiva using. Esempio di direttiva using:

    class A { public: A(const int); void print(int); private: int a; };

    class B : public A { public: B(const float, const float); void print(float, float); using A:rint; private: float b, c; };

    non e' il massimo dell'ordine ma spero tu capisca.

    bye
    There are 10 kinds of people in the world: who knows the binary numeration and who not

  3. #3
    usando la direttiva USING il compilatore riporta un errore.
    il codice:
    Codice PHP:
    class HashTab{
    public:
    bool Hinsert(Key_t,Text_t);
    bool Hinsert(Text_t,Text_t);
    bool Hinsert(HTEntry&);
    }

    class 
    Chained : public HashTab
    {
    public:
    bool Hinsert(Key_t,Text_t);//overloaded e specializzata
    using HashTab::Hinsert(Text_t,Text_t);//errore prima della parentesi
    using HashTab::Hinsert//non riconosce nel main il passaggio di parametri Text_t

    per la cronaca sto implementando a scopo didattico delle classi per le tabelle hash.
    ps uso il compilatore mingw e IDE dev-c++

  4. #4
    prova cosi:
    codice:
    namaspace HashTab{
    class HashTab{
    public:
    bool Hinsert(Key_t,Text_t);
    bool Hinsert(Text_t,Text_t);
    bool Hinsert(HTEntry&);
    };
    }
    
    class Chained : public HashTab
    {
    public:
    bool Hinsert(Key_t,Text_t);//overloaded e specializzata
    using HashTab::Hinsert(Text_t,Text_t);//errore prima della parentesi
    using HashTab::Hinsert//non riconosce nel main il passaggio di parametri Text_t
    };
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #5
    Si, l'errore e' dovuto poiche' non devi isnerire anche i parametri della funzione ma solo il nome. Per capirci (lo sapevo che il mio primo esempio faceva un po pena, ma era leggibile questo):

    codice:
    class HashTab{
    
       public:
    
       bool Hinsert(Key_t,Text_t);
    
       bool Hinsert(Text_t,Text_t);
    
       bool Hinsert(HTEntry&);
    
    }
    
    
    
    class Chained : public HashTab
    
    {
    
       public:
    
       // inserisci Text_t nello scope di questa classe
    
       bool Hinsert(Key_t,Text_t);
    
       using HashTab::Hinsert;
    };
    bye
    There are 10 kinds of people in the world: who knows the binary numeration and who not

  6. #6
    ho isolato il problema come un errore di ambiguita':
    avendo specializzato un metodo non posso riferirmi ad un altro sovraccaricato della classe base.
    Di contro se prima importo come public (o private) esplicitamente i metodi base c'e' un errore nel cercare sovrascriverlo....

  7. #7
    Originariamente inviato da Supertoms
    ho isolato il problema come un errore di ambiguita':
    avendo specializzato un metodo non posso riferirmi ad un altro sovraccaricato della classe base.
    Di contro se prima importo come public (o private) esplicitamente i metodi base c'e' un errore nel cercare sovrascriverlo....
    hai provato il mio modo?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  8. #8
    A questo punto non puoi fare altro che mostrare tutto il codice o mandrmelo in pvt, in modo che possa vederlo da solo e risolvere l'ambiguità (non ho ben capito quale e' il problema).

    Luc@s: il tuo metodo non e' una panacea attendibile. Non fai altro che definire un namespace e non c'entra niente con l'overloading.


    bye
    There are 10 kinds of people in the world: who knows the binary numeration and who not

  9. #9
    Originariamente inviato da TheGreatWorld
    Luc@s: il tuo metodo non e' una panacea attendibile. Non fai altro che definire un namespace e non c'entra niente con l'overloading.


    bye
    ho sbagliato..................... shiedo skusa
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

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