feld von zeiger auf basisklasse?!



  • cout << "hallo welt !"

    ich habe da ein problem... und zwar habe ich eine klasse(daten), die als private datenmember ein feld von zeigern auf eine andere basis-klasse(datenliste) besitzt...

    class daten {
    	private:
    	 	datenliste *M[100];
    		int anzahl; 	
    	public:
             daten& operator>>(datenliste &neu);
             ...
    

    in der daten klasse versuche ich nun den operator>> zu überladen damit ein direktes einlesen vom main programm möglich ist...

    int main() {
             daten neuedaten;
    	datenliste neu;
    	neuedaten >> neu;
             ...
    

    nun gibt es abgeleitet von der klasse datenliste, noch die klassen harewaredaten und softwaredaten, und es soll bei dieser direkten eingabe ein zeiger auf das jeweilige daten objekt gelegt werden... nun habe ich jedoch probleme mit meiner liste...
    vielleicht kann mir jemand von euch weiterhelfen?! ich weiß das ich irgendwie den zeiger casten muß nur wie? und wie verkette ich das ganze?!

    daten& daten::operator>>(datenliste &neu) {
    	int was(0);
    
    	cout << " Wollen Sie Hardware(1) oder Software(2) einlesen ?";
    	cin  >> was;
    	if (was == 1) {
    		M[anzahl] = new hardware("",0,"");    //hardware(bezeichnung,preis,speziell)
                      ...
                      ??schein *s = dynamic_cast<schein*>(neu);??
                      // einlesen der daten...
             }
    	if (was == 2) {
    		M[anzahl] = new software("",0,0);     //software(bezeichnung,preis,speziell)
                      ...
             }
    }
    


  • Ich würde eine Klasse Datenliste machen, die eine std::list<Daten> kapselt.
    Hardware und Software wären dann von Daten abgeleitet.
    Ich versteh halt nicht, warum eine Klasse Daten mehrere Datenlisten beinhalten soll... 🙄

    class Daten
    {
        // deine Daten
    };
    
    class Datenliste
    {
        private:
            std::list<Daten> liste;
    
        public:
            Datenliste& operator<<(Daten &neu)
    };
    
    // Datenliste.cpp
    Datenliste& Datenliste::operator<<(Daten &neu)
    {
       list.push_back(neu);
    }
    
    // main.cpp
    int main()
    {
        Datenliste liste;
        int was(0);
    
        cout << " Wollen Sie Hardware(1) oder Software(2) einlesen ?";
        cin  >> was;
        switch(was)
        {
            case 1:
            {
                Hardware neu("",0,"");
                liste << neu;
                break;
            }
            case 2:
            {
                Software neu("",0,"");
                liste << neu;
                break;
            }
        }
    }
    

    So in etwa. Fall was grob falsch ist, sorry, denn a) hab ich noch kein operator benutzt und b) bin ich gerad aus'm Bett gefallen 😉


Log in to reply