Wie verhält sich eine findGetCopy Methode?



  • Edit: gelöscht.



  • Falls ich es richtig verstanden habe, hier mal ein etwas unsinniges Beispiel. 😉

    #include <iostream>
    #include <memory>
    #include <string>
    #include <vector>
    
    class Frucht;
    typedef std::shared_ptr<Frucht> FruchtPtr;
    
    class Frucht
    {
    public:
    	inline virtual ~Frucht()
    	{ }
    
    	inline virtual std::string const& name() const
    	{
    		static std::string name("Frucht");
    		return name;
    	}
    
    	inline virtual FruchtPtr clone() const
    	{
    		return FruchtPtr(new Frucht());
    	}
    };
    
    class Apfel : public Frucht
    {
    private:
    	std::string m_sorte;
    
    public:
    	inline Apfel(std::string const& sorte)
    		: m_sorte(sorte)
    	{ }
    
    	inline virtual std::string const& name() const
    	{
    		return m_sorte;
    	}
    
    	inline virtual FruchtPtr clone() const
    	{
    		return FruchtPtr(new Apfel(m_sorte));
    	}
    };
    
    class Birne : public Frucht
    {
    private:
    	std::string m_sorte;
    
    public:
    	explicit inline Birne(std::string const& sorte)
    		: m_sorte(sorte)
    	{ }
    
    	inline virtual std::string const& name() const
    	{
    		return m_sorte;
    	}
    
    	inline virtual FruchtPtr clone() const
    	{
    		return FruchtPtr(new Birne(m_sorte));
    	}
    };
    
    typedef std::vector<FruchtPtr> FruchtContainer;
    inline FruchtPtr findeFruchtUndKopiere(FruchtContainer fruechte,
    	std::string const& name)
    {
    	for(FruchtContainer::iterator begin = fruechte.begin(), end = fruechte.end();
    		begin != end; ++begin)
    	{
    		if((*begin)->name() == name)
    			return (*begin)->clone();
    	}
    
    	return FruchtPtr();
    }
    
    int main()
    {
    	FruchtContainer fruechte;
    	fruechte.push_back(FruchtPtr(new Apfel("Granny Smith")));
    	fruechte.push_back(FruchtPtr(new Apfel("Cox Orange")));
    	fruechte.push_back(FruchtPtr(new Apfel("Golden Delicious")));
    	fruechte.push_back(FruchtPtr(new Apfel("Gala")));
    	fruechte.push_back(FruchtPtr(new Birne("Fruehe von Trevoux")));
    	fruechte.push_back(FruchtPtr(new Birne("Clapps Liebling")));
    	fruechte.push_back(FruchtPtr(new Birne("Stuttgarter Geisshirtle")));
    	fruechte.push_back(FruchtPtr(new Birne("Williams Christ")));
    
    	FruchtPtr apfel(findeFruchtUndKopiere(fruechte, "Gala"));
    	if(apfel)
    		std::cout << apfel->name() << " gefunden !\n";
    	else
    		std::cout << "Nichts gefunden ...\n";
    
    	FruchtPtr birne(findeFruchtUndKopiere(fruechte, "Gute Graue"));
    	if(birne)
    		std::cout << birne->name() << " gefunden !\n";
    	else
    		std::cout << "Nichts gefunden ...\n";	
    }
    


  • Also erstmal danke für die antworten 👍 👍 👍
    aber trotzdem sehe ich nicht mehr ganz durch was ihr schreibt 😕 😕



  • Was verstehst du denn an meinem Beispiel nicht?


  • Mod

    sebl11 schrieb:

    Also erstmal danke für die antworten 👍 👍 👍
    aber trotzdem sehe ich nicht mehr ganz durch was ihr schreibt 😕 😕

    Das liegt da dran, weil niemand auf deine Frage geantwortet hat, sondern sich stattdessen eine Randdiskussion entwickelt hat. Warum dir niemand geantwortet hat?
    1. Weil du nicht die als wichtig gekennzeichneten Threads im Forum gelesen hast (besonders "Du brauchst Hilfe").
    2. Weil die regelmäßigen Forenteilnehmer dich schon kennen und wissen, dass du schon eben so oft wegen deiner unbrauchbaren Fragen abgemahnt wurdest, wie du Threads eröffnet hast. Trotzdem hat sich immer noch nichts geändert.
    3. Weil Die regelmäßigen Forenteilnehmer dich schon kennen und wissen, dass du nicht einmal versuchst, Antworten zu verstehen oder dich fortzubilden sondern nur auf eine Komplettlösung wartest. Und selbst wenn du eine Komplettlösung bekommst, nimmst du sie nicht an, wenn sie nicht exakt deinen Vorgaben entspricht, da du sie nicht verstehst und deshalb nicht ändern kannst.



  • Wieso abgemahnt und unbrauchbar?
    Ich hab diese Frage nur gestellt weil ich nichts im Internet gefunden habe um es mir durchzulesen und zu verstehen. Die anderen Aufgaben die ich machen musste hab ich mit hilfe von Büchern und des Internets gelöst.



  • sebl11 schrieb:

    Ich hab diese Frage nur gestellt weil ich nichts im Internet gefunden habe um es mir durchzulesen und zu verstehen.

    Du wirst hier auch keine Antwort finden, die du dir durchlesen und verstehen kannst. Erstens, weil wir keine Kompettlösungen geben sondern nur Hilfestellungen, mit denen du dann mit etwas Grips deine eigene Lösung entwickeln kannst. Zweites weil du dich weigerst, die nötigen Infos so zu liefern, dass man dir auch nur annähernd hilfreiche Tips geben kann.



  • pumuckl schrieb:

    sebl11 schrieb:

    Ich hab diese Frage nur gestellt weil ich nichts im Internet gefunden habe um es mir durchzulesen und zu verstehen.

    Du wirst hier auch keine Antwort finden, die du dir durchlesen und verstehen kannst. Erstens, weil wir keine Kompettlösungen geben sondern nur Hilfestellungen, mit denen du dann mit etwas Grips deine eigene Lösung entwickeln kannst. Zweites weil du dich weigerst, die nötigen Infos so zu liefern, dass man dir auch nur annähernd hilfreiche Tips geben kann.

    Weigern? Wo weigere ich mich ich hab die Klasse Person gepostet und mehr wurde von mir nicht verlängt!



  • sebl11 schrieb:

    Weigern? Wo weigere ich mich...

    Fangen wir doch einfach mal am Beispiel dieses Threads an. Du stellt seine Frage zu einer Funktion, die keiner hier kennt, so das die anderen nur raten können was du meinst. Da du keinerlei Zusatzinformationen angibst, kann man nur darauf tippen das diese Funktion zu irgendeinen Framework gehört das uns unbekannt ist.

    Erst nach und nach kann man dir einzelne Informationen aus der Nase ziehen. Du hast dir scheinbar niemals die mühe gemacht den mehrfach genannten Thread durchzulesen und zu verinnerlichen.

    Es ist nicht unsere Aufgabe die nötigen Daten zu ermitteln, um überhaupt eine Frage verstehen zu können.

    Zudem hast du durch das Posten der Aufgabenstellung bereits deine Antwort gegeben:

    Implementieren Sie eine Methode findGetCopy, um als Ergebnis eine Kopie der gefundenen Instanz zu erhalten.

    Deklarieren Sie dazu zuerst eine Methode clone zum Erstellen einer Instanz-Kopie in der Klasse Person nur „rein virtuell“ und als konstant. Implementieren Sie diese Methode dann passend in den abgeleiteten Klassen.

    Die Methode muss sich also so verhalten, das sie eine Kopie der Instanz liefert, die diese Methode findet. Und zwar mittels einer anderen von dir zu schreibenden virtuellen Methode "clone" die eine Instanz kopiert.

    Auch wenn dies kein üblicher C++ Stil ist (imho hat dein Lehrer zuviel Java programmiert), ist die Aufgabe doch klar. Deine Frage wiederum ist Unsinn. Wenn überhaupt hätte es Sinn gemacht, gleich am Anfang die Aufgabe zu nennen, etwas kompilierbaren Code zu zeigen, der zeigt bis wohin du gekommen bist, und dann eine KONKRETE Frage zu einen Problem zu stellen.

    Die Aufgabe beschreibt bereits wie sich die findGetCopy verhalten muss, einzig was und wie sie suchen muss, ist unklar (aber ich wette auch vorgegeben). Anschließend musst du vom gefundenen Objekt die clone-Methode aufrufen die wiederum eine Kopie zurück liefert (die wiederum das Ergebnis der findGetCopy-Methode ist).



  • sebl11 schrieb:

    ich hab die Klasse Person gepostet und mehr wurde von mir nicht verlängt!

    Siehst du, da liegst du falsch. Lies dir mal die mit wichtig gekennzeichneten Threads durch, da wird noch einiges mehr von dir verlangt als nur die eine Klasse zu posten. Du hast uns den Bruchteil einer Aufgabenstellung ohne Kontext gegeben, damit kann man rein garnichts anfangen. Man kann mit etwas Mühe feststellen, dass da wohl eine Person gefunden und kopiert werden soll. Wo die gefunden werden soll hast du uns nicht angegeben, z.B. die Klasse, für die du die Methode findGetCopy schreiben sollst. Du hast uns keinerlei eigene Ansätze gezeigt, nichts. Also nochmal: lies dir bitte die mit wichtig gekennzeichneten Threads durch. Die stehen da nicht zur Deko. Wenns dir das nicht wert ist, warum sollten wir uns dann mit deinem Hausaufgabenproblem befassen?


Anmelden zum Antworten