CStringArray zurückgeben



  • Aloa!

    In meiner Klasse ist ein Member-StringArray gemäss OOP privat. Wie kann ich nun durch eine MEthode der Klasse von aussen zugreifen bzw. wie kann ich diese Variable des Typs CStringArray zurückgeben?



  • Ich weiss nicht, ob die Lösung so ok ist? Aber kann man es noch als zurückgeben dazu sagen?

    void CMyClass::GetAnStringArray(CStringArray &Array)
    {
      if(m_StringArray.GetSize()!=0)
      {
         for(int i=0; i<m_StringArray.GetSize(); i++)
         {
            Array.Add(m_StringArray.GetAt(i);
         }
      }
    }
    


  • // Funktion
    CStringArray& CMyClass::GetAnStringArray(Array)
    {
       return privateArray;
    }
    
    //nutzung
    
    CMyClass myclass;
    myclass.GetAnStringArray().Add("Hallo Welt");
    


  • DANKE, die Rückgabe von Member funktioniert!!! 🙂

    CStringArray &CMyClass::GetAnStringArray()
    {
      return m_StringArray;
    } 
    
    ---
    
    CMyClass my;
    CStringArray ar;
    ar.Copy(my.GetAnStringArray()); // Member StringArray zurückgegeben
    


  • CStringArray &CMyClass::GetAnStringArray() 
    { 
      return m_StringArray; 
    } 
    
    --- 
    
    CMyClass my; 
    CStringArray ar; 
    CStringArray *pUebeltaeter;
    pUebeltaeter = &my.GetAnStringArray();
    pUebeltaeter->Add("Mist"); // kein Kappselung mehr, da Zugriff auf Privatmember von aussen nun möglich
    

    Wie kann man es anders lösen?



  • So zum Beispiel.

    int CMyClass::Add(const CString& entry)
    {
       int pos = -1;
       if(IsValueValid(entry)) // falls du z.B. nur bestimmte Werte zu lassen willst
       {
          pos = m_StringArray.Add(entry);
       }
       return pos;
    }
    
    CString CMyClass::Get(size_t index)
    {
        return m_StringArray.GetAt(index);
    }
    


  • Danke, die einzelnen Elemente ausserhalb wieder zu einem StringArray basteln ... hmmm ... 😉



  • Also willst du die Inhalte deines CStringArray Members in ein CStringArray außerhalb der Klasse kopieren? Was macht das für einen Sinn?

    Oder willst du nur auf Elemente zu greifen? Was willst du denn nun machen?



  • Chris++ schrieb:

    Also willst du die Inhalte deines CStringArray Members in ein CStringArray außerhalb der Klasse kopieren? Was macht das für einen Sinn?

    Oder willst du nur auf Elemente zu greifen? Was willst du denn nun machen?

    Im Prinzip ist dein letzter Codebeispiel schon die Lösung. Es geht schliesslich nur darum, m_privateStringArray zurückzugeben, ohne es zu gefährden.

    Ich dachte nur, es ginge irgendwie auf die Art:

    CStringArray CMyClass::GetMyPrivateStringArray()
    {
       return m_privateStringArray;
    }
    


  • Achso... Das geht wenn du const benutzt.

    const CStringArray& CMyClass::Get() const
    {
    	return m_arr;
    }
    
    void CMyClass::Add(CString val)
    {
    	m_arr.Add(val);
    }
    
    //.... nutzung
    CMyClass my;
    
    mmy.Add("hallo");           // geht
    my.Get().GetSize();         // geht
    //my.Get().Add("hallo");    // compiler Fehler C2663
    


  • Ja, das meinte ich! Danke dir 👍


Anmelden zum Antworten