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

    [C++] Classe: stessa funzione con o senza parametri

    Salve,

    mettiamo che ho un metodo di una classe che può essere chiamato con o senza parametri:

    codice:
    classe marameo {
    public:
    	marameo();
    	void print(void);
    	void print(std::string);
    private:
    	std::string szStringa;
    }
    
    void marameo::print(void)
    {
    	szStringa = "stringa di default";
    	printf("%s\n", szStringa);
    }
    
    void marameo::print(std::string a)
    {
    	szStringa = a;
    	printf("%s\n", szStringa);
    }
    in questo caso devo scrivere due funzioni distinte per lo stesso metodo usando l'overloading: una che accetta parametri, l'altra no.

    Tuttavia le funzioni però fanno la stessa cosa, essendo dello stesso metodo. Ma mi tocca scriverle separate! quindi duplico il codice. Quello che vorrei fare io è che se il metodo è chiamato con dei parametri usi quelli, altrimenti usi dei parametri di default...

    ci posso stare a fare due costruttori separati in fondo il codice è poco (solo inizilizzare variabili), ma due funzioni per lo stesso metodo dovrei duplicare il codice e mi risulterebbe moolto inconveniente...spero che C++ offra una soluzione a questo.

    grazie
    Alla batteria dai retta ballA

  2. #2
    Codice PHP:
    #include <string>
    #include <iostream>

    class 
      public: 
        
    A(){} 
        
    void print(std::string mystring std::string("ciao")){ 
          
    this->mystring mystring
          
    std::cout << mystring << std::endl
        } 

      private: 
        
    std::string mystring
    }; 

    int main() { 
      
    A a
      
    a.print(); 
      
    a.print("hello"); 

    Spero sia quello che cercavi

  3. #3
    menomale, ache se all'ultimo avevo pensato ad una cosa forse un pò bizarra:

    codice:
    void marameo::print(void)
    {
    	szStringa = "stringa di default";
    	_print(szStringa);
    }
    
    void marameo::print(std::string a)
    {
    	szStringa = a;
    	_print(szStringa);
    }
    
    void marameo::_print(std::string a) // Privata
    {
    	szStringa = a;
    	printf("%s\n", szStringa);
    }
    ovvero _print è un metodo privato che fa il vero lavoro, le due print servono solo a convogliare i dati o impostarli di default...
    Alla batteria dai retta ballA

  4. #4
    Ciao, la tua soluzione va bene, crei due (o più) metodi che faranno da interfaccia per il lavoro che avviene dietro le quinte. Sta a te decidere come procedere. Dipende dalla logica del programma, se è diversa di volta in volta o se è solo una questione di impostare un valore di default. Del tipo, qui:

    Codice PHP:
    class Sorter {
      public:
        
    Sorter(){...}
        
    void sort(Recordsr) {
          if (
    r.size() < 20algo_1(r);
          else if (
    r.size() < 100algo_2(r);
          ....
    }

      private:
        
    void algo_1(Recordsr);
        
    void algo_2(Recordsr);
        .... 
    dai come interfaccia all'utente il metodo sort, che sbriga lui il lavoro sporco (la scelta dell'algoritmo più efficiente). Mentre qui:

    Codice PHP:
    class WebServer {
      public:
        
    WebServer(){...}
        
    void connect(string hostint port 80) {...}

    conviene impostare solo il valore di default, tanto la logica non cambia.
    Spero sia chiaro

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.