Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 10:10

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++]Abstrakte Klassen

Discussion on [C++]Abstrakte Klassen within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1

 
Terreox's Avatar
 
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
[C++]Abstrakte Klassen

Hallo zusammen.

bin heute beim Durchblättern durch ältere Kapitel meines C++ Buches auf Abstrakte Klassen gestoßen. Hab das Kapitel wahrscheinlich nicht besonders gründlich gelesen, weil mir der Begriff nicht geläufig war.
Habs mir also mal durchgelesen und habe dazu eine Verständnisfrage.
Wofür werden abstrakte Klassen benötigt? Ist es sozusagen eine Klasse mit verallgemeinerten Funktionen, die von "gleichartigen" abgeleiteten Klassen benutzt wird quasi wie ein Template ohne Funktion?(ich finds ein wenig umständlich zu erklären).
Sprich, man hat eine abstrakte Klasse "Frucht" mit den rein-virtuellen Funktionen farbe(), geschmack(), gattung() und leitet davon "Birne", "Apfel" und "Himbeere" ab, die alle diese drei virtuellen Funktionen definieren müssen, bevor man die abgeleitete Klasse dann instanzieren kann?

Hat vielleicht jemand weitere Anwendungsbeispiele? Kann mir solche abstrakten Funktionen irgendwie momentan nur in riesigen Programmen mit vielen gleichartigen Klassen vorstellen.
Terreox is offline  
Old 07/05/2012, 20:36   #2


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Du hast es eigentlich schon treffend beschrieben.
Abstrakte Klassen werden hauptsächlich als Interfaces benutzt, d.h. um einem Anwender eine Schnittstelle zu bieten, die er verwenden kann.
Allerdings ist die Implementierung davon abgekapselt, d.h. jeder kann sie im Grunde neu implementieren und dem Benutzer übergeben und er kann die neue Version aufgrund der gleichen Schnittstelle trotzdem verwenden.

DirectX ist das perfekte Beispiel, dort ist jede Klasse abstrakt und bietet quasi in Interface zu einem Objekt, bspw. einem Text Font.
Sie bietet halt allerlei Methoden zum Zeichnen und manipulieren von Textausgabe. Wie das ganze aber implementiert ist, siehst du nicht.
Für verschiedene Systeme und verschiedene DX Versionen (oder bei hardwarenäheren Objekten sogar für unterschiedliche Hardware/Treiber) gibt es unterschiedliche Versionen.
GUI Frameworks sind auch bekannte Beispiele, die halt abstrakte Fenster Klassen bieten, die dann für jedes OS entsprechend implementiert werden können, ohne, dass sich der Anwender des FWs damit rumschlagen muss.

Im Informatikunterricht bekommt man es häufig am Beispiel von Container Klassen gezeigt: Es gibt das Interface List, das zahlreiche Methoden zum Verwalten von Listen bietet.
Nun kann man diese mit Arrays, mit LinkedLists, HashTables und vielem mehr implementieren, die man halt von List ableitet.
D.h. einem List Pointer kann ein LinkedList Pointer zugewiesen werden, aber dir als Anwender kann völlig egal sein, was sich nun dahinter verbirgt, da die Abstraktheit dir die Möglichkeiten, die das Interface hat, garantiert. Würde irgendeine Kindklasse die Methoden nämlich nicht implementieren, würde sie automatisch auch abstrakt und könnte nicht instanziert werden.

In der Praxis gibt es häufig sogenannte Factory Funktionen/Klassen, die dir einen Pointer auf ein Interface zurückliefern (so läuft es quasi mit jedem DX Objekt ab).
Was für eine Kindklasse sie dem Pointer zugewiesen haben und wie das ganze implementiert ist, interessiert dich nicht und muss es auch nicht.


TL;DR:

Abstrakte Klassen bieten, wie der Name schon sagt, die Möglichkeit, Schnittstelle von Implementation zu abstrahieren.
MrSm!th is offline  
Thanks
2 Users
Old 07/05/2012, 21:26   #3

 
Terreox's Avatar
 
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
würd dir ja gerne mehr als 1 thanks geben danke für die ausführliche erklärung!
Terreox is offline  
Old 07/06/2012, 08:27   #4
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Schau dir mal ein paar design patterns durch. Da werden häufig abstrakte Klassen verwendet. Als Beispiel mal folgendes: Kompositum (Entwurfsmuster)

Gibt ein paar Anregungen wozu man das noch so brauchen kann
xNopex is offline  
Reply


Similar Threads Similar Threads
Welche Klassen kann man mit den Klassen von WoW vergleichen?
10/09/2011 - General Gaming Discussion - 30 Replies
Thema sagt eigentl. alles ;)
[Tutorial] Abstrakte Signatur
11/03/2010 - Artist Tutorials - 11 Replies
TUTORIAL - ABSTRAKTE SIGNATUR by Lizzaran http://img834.imageshack.us/img834/8162/out2.jpg http://img717.imageshack.us/img717/3724/out1z.jpg http://img689.imageshack.us/img689/4758/out0.jpg
Klassen
03/08/2009 - General Gaming Discussion - 7 Replies
Hi, ich wollte mal fragen, was ich werden kann bzw welch eKlasse ich mich spezialisieren sollte für miene Anforderungen also ich habe ienen prieset / mage 22/17 kein bock, weil ich kein damage mache zwar gut GOT aber das dauert dann nen warrior lvl 21 ist jut geil, weil ich viel damage mache aber ich weiß nicht, was ich 2nd nehmen soll bin am überlegen , ob ich nun mage / priest mach
klassen tip pls :(
10/07/2008 - World of Warcraft - 11 Replies
hi möchte gern nen Hordler anfangen und kann mich einfach nicht entscheiden möchte später pvp konkurenzfähig sein muss nicht imba sein und natürlich sollte die klasse gern in instanzen mitgenommen werden. hab da an nen Frostmage gedacht aber kenn mich da halt nicht aus. hoffe ihr habt da nen paar tips für mich^^ -pvp konkurenzfähig brauch nich imba sein oO -pve nützlich danke^^
Klassen IDs
04/27/2008 - WoW Private Server - 2 Replies
Hi, hat da jemand eine Liste mit den IDs für die Klassen? Ich kenn zwei Methoden an die IDs zu kommen (beide IDs gehen aber nicht...) Meth1: z.B. Krieger erstellen, in Navicat rein, unter character die ClassID vom Krieger abschreiben. Wenn ich die ID dann bei meiner Quest unter RequiredClass eintrage geht es nicht! Meth2: Ich geh auf thottbot, wähle krieger und schau mir die kriegerquests an. da nehm ich dann irgendeine quest und merk mir die id. jetzt geh ich in navicat und such die...



All times are GMT +1. The time now is 10:11.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.