klassen in sdt::vector



  • hi

    class muster
    {
    // inhalt
    virtual void show();
    };
    
    class myclass1 : muster
    {
    // inahlt
    show();
    };
    
    class myclass2 : muster
    {
    // inahlt
    show();
    };
    

    jetzt möchte myclass1 und myclass2 und weitere dieses types in einen vector ablegen und der reihe nach show(); darstellen .. kann mir bitte einer zeigen wie das geht?



  • vector<muster*> v;
    v.push_back(new myclass1);
    v.push_back(new myclass2);
    ...
    foreach i in v
       i->show();
    ...
    foreach i in v
       delete i;
    


  • vielen lieben dank 😉



  • so habe mal ausprobiert.
    stosse da leider auf probleme 😉

    zum einen kenne ich foreach nur aus php und c# glaub hat das .. mein vc6 kennt es nicht. ich würds aber gerne nutzen, da ichs aus php gewohnt bin.
    gibts irgend nen trick es nutzen zu können?

    zum anderen habe ich nen problem mit den classen
    error C2243: 'type cast' : Konvertierung von 'class myclass1 *' zu 'class muster *const ' existiert bereits, aber es ist kein Zugriff darauf moeglich

    hier meine orginal klassen:

    Button.h

    #ifndef _BUTTON_
    #define _BUTTON_
    
    class Button
    {
    private:
    
    	virtual void OnDestroy();
    
    public:
    
    	virtual bool OnShow();
    
    	Button();
    	virtual ~Button()
    	{
    		OnDestroy();
    	}
    };
    
    #endif
    

    myclass1

    #ifndef _BUTTON1_
    #define _BUTTON1_
    
    #include "Button.h"
    
    class Button1 : Button
    {
    private:
    
    	void OnDestroy();
    
    public:
    
    	bool OnShow();	
    
    	Button1 ();
    	~Button1 ()
    	{
    		OnDestroy();
    	}
    };
    
    #endif
    
    vector<Button *> buttons;
    buttons.push_back(new Button1); // error: 2243
    

    Ich möchte also mit Hilfe einer Basisklasse, abgeleitete Klassen bilden.
    Die ich dann der Reihe nach darstellen möchte.

    Man könnts auch anders sagen .. Ich habe einen Basisbutton und möchte jetzt von diesem abgeleitet neue Buttons erstellen und per vector durchgehen und darstellen.

    wäre nett wenn einer mir mit dem foreach und dem error helfen würde .. *wink*



  • knauf schrieb:

    so habe mal ausprobiert.
    zum einen kenne ich foreach nur aus php und c# glaub hat das .. mein vc6 kennt es nicht. ich würds aber gerne nutzen, da ichs aus php gewohnt bin.
    gibts irgend nen trick es nutzen zu können?

    for(vector<Button*>::ierator i=buttos.begin();i!=buttons.end();++i)
       i->tuwas();
    

    ich war zu faul, das alles zu schreibseln.

    knauf schrieb:

    error C2243: 'type cast' : Konvertierung von 'class myclass1 *' zu 'class muster *const ' existiert bereits, aber es ist kein Zugriff darauf moeglich

    class Button1 : public Button
    

    du hattes aus versehen private geerbt. dann ist die konvertierung zwar da, aber halt private und du darfst sie nicht von außerhalb der klasse benutzen.



  • wau! das ging ja schneller eils eilexpress

    *gegen kopf klatsch* argh, vergessen es public zu setzen .. ich glaub auf sowas simples wäre ich nicht in 100jahren gekommen .. danke!

    hehe, die for sieht witzig aus .. noch nie mit iteratoren gearbeitet, aber ich verstehe den code 😉 .. danke für deine super fixe antwort

    achja, falls wer doch noch irgendwie weiss wie man das foreach in c++ nutzen kann wäre ich echt dankbar.
    für array durchläufe macht sich das nämlich wirklich gut und einfach.

    *wink*



  • knauf schrieb:

    in c++ nutzen kann wäre ich echt dankbar.
    *wink*

    Ich glaube gehört zu haben das Boost das kann:
    www.boost.org

    MfG Max



  • wenn ja konnt ich leider nichts finden 🤡



  • knauf schrieb:

    wenn ja konnt ich leider nichts finden 🤡

    Such mal nach foreach und Eeric niebler

    In Standard-C++ geht das so:

    for(vector<Button*>::ierator i=buttos.begin();i!=buttons.end();++i)
       i->tuwas();
    

    ->

    std::for_each(buttons.begin(), buttons.end(), std::mem_fun(&Button::tuwas));
    

    Und zum Löschen:

    // Ein nützliches kleines Funktionsobjekt, dass man immer wieder
    // gebrauchen kann
    struct DeleteObject
    {
    	template<typename T>
    	void operator()(const T* ptr) const
    	{ delete ptr; }
    };
    
    std::for_each(buttons.begin(), buttons.end(), DeleteObject());
    

Anmelden zum Antworten