Initialiserungsliste



  • Gugelmoser schrieb:

    Und wenn man Objekte nur als Ganzes mit einem Zustand betrachtet, dann kann man sie praktisch sowieso nur initialisiern:

    class Wohnort
    {
    private:
    	string strasse;
    	string hnr;
    	string plz;
    	string ort;
    public:
    	Wohnort()
    	{
    		// an diesen Punkt sind die Membervariable mit demm Standardkonstruktur initialisiert, 
    		// deswegen sind die nachfolgende Statements Zuweisungen!
    		strasse = "Musterstrasse";
    		hnr = "1";
    		plz = "0815";
    		ort = "Musterort";
    	}
    };
    
    int main()
    {
    	Wohnort ort; // Man hat das Objekt mit einem bestimmten Zustand (Musterstrasse 1, 0815 Musterort) erzeugt. Also hat man das Objekt initialisiert (wenn man es als Ganzes betrachtet).
    }
    

    Daraus lässt sich nun ableiten, dass Konstruktoren Objekte immer initialisieren, nämlich mit einem bestimmten Zustand.



  • Was dot meinte war nicht, dass man initialisieren kann ohne zu definieren, sondern dass es anders aussehen kann als "int i = 1;". (Initialisierungsliste)



  • Zeus schrieb:

    ...

    Ich kenne keine Attribute nicht. Und wenn ich keine Attrubute kenne, kann ich auch keine Aussage darüber machen. Darum hatte ich geschrieben, wenn man das Objekt als Ganzes nur mit Zustand betrachtet. Und ein Objekt hat immer einen Zustand.

    cooky451 schrieb:

    Was dot meinte war nicht, dass man initialisieren kann ohne zu definieren, sondern dass es anders aussehen kann als "int i = 1;". (Initialisierungsliste)

    Aso, ok, einverstanden. 🙂



  • Gugelmoser schrieb:

    Zeus schrieb:

    ...

    Ich kenne keine Attribute nicht. Und wenn ich keine Attrubute kenne, kann ich auch keine Aussage darüber machen. Darum hatte ich geschrieben, wenn man das Objekt als Ganzes nur mit Zustand betrachtet. Und ein Objekt hat immer einen Zustand.

    Bis auf dem letzen Satz versteh ich dich nicht. Ein Funktor hat ein Zustand? Oder ist ein Funktor kein Objekt? Oder zählst du sein assoziereten Stackzustand als Seinen? Fragen über Fragen!



  • Zeus schrieb:

    // an diesen Punkt sind die Membervariable mit demm Standardkonstruktur initialisiert, 
    // deswegen sind die nachfolgende Statements Zuweisungen!
    

    Es wären auch Zuweisungen, wenn die Objekte keinen Konstruktor hätten. :p



  • Zeus schrieb:

    Ein Funktor hat ein Zustand? Oder ist ein Funktor kein Objekt?

    Klar ist ein Funktor ein Objekt und klar hat es einen Zustand. Wenn dem nicht so wäre, würede folgendes ja nicht gehen:

    class predicate
    {
    private:
    	string name;
    public:
    	predicate()
    	{
    		name = "Mustermann";
    	}
    	int operator()(const string& n)
    	{
    		return name==n;
    	}
    };
    
    int main()
    {
    	vector<string> names;
    	names.push_back("Musterfrau");
    	names.push_back("Mustermann");
    
    	if( find_if(begin(names),end(names),predicate())!=end(names) )
    		cout << "ja, vorhanden";
    }
    

    Wenn ein Funktor keinen Zustand hätte, könnte man ihn ja mit nichts vergleichen.



  • Und eine Stateless Object von predicate ist unmöglich?



  • Zeus schrieb:

    Und eine Stateless Object von predicate ist unmöglich?

    😃
    Du meinst sowas, oder?

    class foo
    {
    };
    foo f;
    

    Ok, wenn ein Klasse keine Attribute hat, kann ein Objekt auch keinen Zustand haben. Aber wann verwendet man praktisch sowas schon?



  • Nein, eine leere Klasse meint ich nicht, Methode sind keine Attribute, daher kannst du sie dort auch reinpacken. Evtl. wenn man funktionaler wird.



  • Gugelmoser schrieb:

    Aber wann verwendet man praktisch sowas schon?

    Ich verwende mehr Klassen ohne Attribute als Klassen mit.



  • Zeus schrieb:

    Nein, eine leere Klasse meint ich nicht, Methode sind keine Attribute, daher kannst du sie dort auch reinpacken. Evtl. wenn man funktionaler wird.

    Hmm verstehe dich irgendwie nicht ganz, vielleicht zeigst du kurz an einem Beispielcode, was für dich ein stateless Object ist. 🙂



  • template<class T>
    struct equal
    {
        bool operator()(const T& a, const T& b)
        {
            return a==b;
        }
    };
    


  • Zeus schrieb:

    template<class T>
    struct equal
    {
        bool operator()(const T& a, const T& b)
        {
            return a==b;
        }
    };
    

    Joa das meinte ich eigentlich auch mit meinem vorherigen Beispiel. Keine Attribute kein Zustand. Ok nun verstehe ich auf was du hinauswolltest (dass es auch sinnvolle zustandslose Objekte gibt), und muss meine Aussage revidieren: Objekte haben nicht immer einen Zustand. 🙂



  • Gugelmoser schrieb:

    cooky451 schrieb:

    Schlechtes Beispiel.
    (...)
    a wurde initialisiert, i_ nicht.

    😕 Ich sehe da jetzt gerade keinen Widersrpuch zu meinen Aussuagen. Oder wolltest du das damit gar keinen Widerspruch andeuten? :p

    Deine Aussage:

    Gugelmoser schrieb:

    Daraus lässt sich nun ableiten, dass Konstruktoren Objekte immer initialisieren, nämlich mit einem bestimmten Zustand.

    Wenn ein Konstruktor immer initialisiert, dann ist das halt Definitionssache, kann man schwer dagegen argumentieren.
    Aber wo ist in dem Beispiel von cooky451 der "bestimmten Zustand"?

    Das ist für mich ein Widerspruch.


Anmelden zum Antworten