Konstruktor mit verschiedenen Parametern aber gleicher Signatur



  • Hallo zusammen.

    Habe eine Klasse CMyClass. Diese Klasse benötigt nun verschiedene Konstruktoren mit der gleichen Signatur, was ja nicht geht. Am besten ich mach mal ein Beispiel

    class CMyClass
    {
    
     CMyClass(double param1)
     {
        m_p1 = param1;
        m_p2 = param1 * 2;
     }
    
     CMyClass(double param2)
     {
        m_p1 = param2 / 2;
        m_p2 = param2;
     }
    
     double m_p1;
     double m_p2;
    };
    

    Wie löse ich das Problem nun?

    Wenn dies nun Methoden wären, würde man ja einfach unterschiedliche Namen vergeben. Aber wie macht man dies bei Konstruktoren?



  • Wenn es unbedingt so sein muss, dann gib doch einen weiteren Parameter mit, der das Verhalten steuert.



  • Schau dir mal das Named Constructor Idiom an.



  • Named Constructor Idiom
    

    Ja das ist ja dann aber auch nichts anderes. Die beiden Konstruktoren muss man dann aber doch beide anlegen sind halt dann nur private. Und werden dann über eine Methode aufgerufen. Mein Problem löst es dann halt nicht.

    Wenn es unbedingt so sein muss, dann gib doch einen weiteren Parameter mit, der das Verhalten steuert.

    Na ja nicht gerade schön.



  • Zum Beispiel:

    class MyClass
    {
    public:
      static MyClass *CreateWithParam1(double param)
      { 
        return new CMyClass(param, param * 2); 
      }
      static MyClass *CreateWithParam2(double param)
      {
        return new CMyClass(param / 2, param);
      }
    private:
      CMyClass(double param1, double param2)
        : m_p1(param1)
        , m_p2(param2)
      { }
    };
    

Anmelden zum Antworten