Indexoperator bei Zeiger



  • Hey!

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    class Test
    {
    	vector<string> mask;
    public:
    	string& Test::operator[](int index)
    	{
    		return mask[index];
    	}
    };
    
    int main()
    {
    	Test* test = new Test();
    
    	// Dieser Ausdruck ist vom Typ 'Test'
    	// Sollte aber vom Typ 'std::string' sein ?!
    	test[0];
    
    	string* s = new string();
    	s->resize(10);
    	s[0] = 'X'; // Hier funktioniert der Index- Operator aber normal...
    
    	cout << *s; // X ...
    }
    

    😕



  • jo !

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    class Test
    {
        vector<string> mask;
    public:
        string& Test::operator[](int index)
        {
            return mask[index];
        }
    };
    
    int main()
    {
        Test* test = new Test();
    
        // Dieser Ausdruck ist vom Typ 'Test'
        // Sollte aber vom Typ 'std::string' sein ?!
    
        // test ist vom typ Test *
        // test[0] (oder *test) ist vom typ Test
    
        // was du suchst ist
        *test[0];
        // oder
        test[0][0];
        // oder
        Test &t = *test;
        t[0]
    
        string* s = new string();
        s->resize(10);
        s[0] = 'X'; // Hier funktioniert der Index- Operator aber normal...
    
        cout << *s; // X ...
    }
    


  • Danke erstmal, warum ist es beim std::string anders?

    MfG


  • Mod

    cpp@loggedoff@loggedoff schrieb:

    Danke erstmal, warum ist es beim std::string anders?

    MfG

    ist es nicht. schau dir einfach mal s->size() nach der Zuweisung an.



  • cpp@loggedoff@loggedoff schrieb:

    Danke erstmal, warum ist es beim std::string anders?

    MfG

    Ist es doch gar nicht, bei std::string benutzt du bei my_string[0] den op[] von std::string bei deiner Test Klasse bei my_test[0] den op[] deiner Test-Klasse. Passt doch.



  • #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    class Test
    {
        vector<string> mask;
    public:
        string& Test::operator[](int index)
        {
            return mask[index];
        }
    
       // ist für den Lesezugriff wichtig!!!
       const string& Test::operator[](int index)const{
            return mask[index];
       }
    };
    
    int main()
    {
        Test* test = new Test();
    
        // Dieser Ausdruck ist vom Typ 'Test'
        // Sollte aber vom Typ 'std::string' sein ?!
        test[0];
    
        string* s = new string();
        s->resize(10);
        s[0] = 'X'; // Hier funktioniert der Index- Operator aber normal...
    
        cout << *s; // X ...
    }
    


  • Achso ja na klar ich Depp, hier ...

    s[0] = 'X';

    ... spricht man den String an, nicht einem Element davon.

    THX,
    MfG


Anmelden zum Antworten