Ist C++ wirklich so schlecht?
-
boah find ich voll süß wenn du ironie ernstnimmst. :p
-
Knuffig, oder??? Sorry, hab deinen Ironier-Tag übersehen...
-
Ich habe mir also gedacht, lern ich kurz mal C++, das kann nicht schaden.
schaden kanns nicht aber das mit dem kurz kannst du vergessen c++ ist eine sehr mächtige sprache und wer sie volltändig nutzen will muss viel lernen
Nun muss ich mit Erschrecken feststellen, dass C++ kryptisch und weit
weniger gut beherrschbar wie Java oder VBA sind.hmm über das kryptisch kann man sich streiten... das ist puure gewöhnungssache... ich finde mich in c/c++ programmen eigentlich ziemlich zurecht. hab aber mit pascal z.b. mühe...
und was meinst du mit kontrollierbar? ich bin mir sicher du hast in c++ viel mehr kontrolle über das programm als in java oder VB. das bringt aber mitsich das man auch mehr falsch machen kann (speicherlecks etc.) meinst du das mit unkontrollierbar?
(ein sportwagen is auch schwerer zu fahren als ein smart )Auch die Klassen in C++ sind ein Witz, dass ist prakisch nur die Überschrift der Datei.
was haben die klassen in c++ nicht was man in anderen sprachen hat... erklär mal
klassensatz version 0.1: "die klassen in C++ sind meiner meinung nach mächter als die in so gut wie allen anderen sprachen... was das ganze aber auch manchmal etwas verwirrlich macht..."
klassensatz version 0.2: "die klassen in C++ sind meiner meinung nach mächter als die in den meisten anderen sprachen(z.b. VB, Pascal)... was das ganze aber auch manchmal etwas verwirrlich macht..."
[ Dieser Beitrag wurde am 15.01.2003 um 21:31 Uhr von japro editiert. ]
-
Original erstellt von japro:
**
die klassen in C++ sind meiner meinung nach mächter als die in so gut wie allen anderen sprachen... was das ganze aber auch manchmal etwas verwirrlich macht...**Erklärung bitte!
-
Original erstellt von Gregor:
Erklärung bitte!C++ kann jede Menge Sachen. Was von der Klassensemantik her kann Java, was C++ nicht kann?
-
Original erstellt von Gregor:
Erklärung bitte!ohoh ich sehs schon kommen ich sage jetzt irgendwas und werde dann zerissen weil ich mich mit anderen sprachen nicht so gut auskenne.
naja ich versuchs mal:
automatischer ctor und dtor aufruf
mehrfachvererbung
friendsach ich bin nicht erfahren genug um das jetzt vollständig begründen zu können. jedenfalls fällt mir nichts ein was ich mit c++ klassen nicht kann was in andere sprachen möglich wäre (AOP vielleicht???). ausserdem wollte ich ja damit nicht sagen das die klassen in c++ besser als die in z.B. java sind (ich nehme an du denkts in diese richtung). ich verstehe nur nicht wie man nach dem proggen von VB und java (so verstehe ich den ersten beitrag) sagen kann das c++ classen ein witz sind...
-
Original erstellt von Mr. N:
**
C++ kann jede Menge Sachen. Was von der Klassensemantik her kann Java, was C++ nicht kann?**Ich hatte nur eine Frage in Bezug auf C++ gestellt, weil ich die Aussage nicht nachvollziehen konnte. Inzwischen wurde ja gesagt, wie das gemeint war!
...ich sehe weder C++-Klassen, noch Java-Klassen, noch C#-Klassen als mächtiger an.
BTW : Wo du fragst : Gibt es eigentlich soetwas, wie Reflection bei C++?
[ Dieser Beitrag wurde am 15.01.2003 um 21:40 Uhr von Gregor editiert. ]
-
http://java.sun.com/docs/books/tutorial/reflect/ <--- is das damit gemeint?
hmm ich weiss net so genau was man in c++ mit der rtti anfangen kann weil ichs noch nie ernsthaft benutzt hab aber das scheint was "ähliches" zu sein. naja wobei man die klassen damit nicht während der laufzeit manipulieren kann...interessant scheint es mir ja schon aber wofür braucht man sowas kann mit momentan kaum ein einsatzgebiet vorstellen?
-
Ja, das hatte ich gemeint! Ich werde mir rtti demnächst mal angucken!
...ich nutze Reflection momentan in Verbindung mit Plugins.
-
reflection in c++ geht nicht
-
Original erstellt von Gregor:
...ich nutze Reflection momentan in Verbindung mit Plugins.Wie das?
-
java
-
Original erstellt von Mr. N:
Wie das?Naja! Ich durchsuche halt bei Programmstart ein Verzeichnis nach allen Java-Klassen, teste dann, welche mein Plugin-Interface implementieren, teile diese noch in ein paar verschiedene Kategorien ein, erzeuge mir mit Hilfe der geladenen Klassen einen Großteil meiner GUI und erzeuge mir bei Bedarf ein Objekt einer Klasse.
...vor allem kommt es mir also aufs dynamische Klassenladen an.
-
Ich durchsuche halt bei Programmstart ein Verzeichnis nach allen Java-Klassen
Wie soll das gehen?
-
Original erstellt von <Domian>:
Wie soll das gehen?Zum Beispiel so:
[java]
public static Class [] loadControllerClasses ()
{
java.net.URL controllerURL = PluginLoader.class.getResource ("/plugin");
LinkedList classList = new LinkedList();
try
{
File controllerDirectory = new File (new URI(controllerURL.toString ()));
File [] directories = getSubdirectories(controllerDirectory);
if (directories == null) return null;
for (int i = 0 ; i < directories.length ; ++i)
{
File [] files = directories[i].listFiles ();
for (int x = 0 ; x < files.length ; ++x)
{
Class currentClass = loadControllerClass (files[x]);
if (currentClass != null)
{
classList.add(currentClass);
}
}
}
}
catch (java.net.URISyntaxException e)
{
return null;
}
Class [] outArray = new Class [classList.size ()];
Iterator iterator = classList.iterator ();
for (int i = 0 ; i < outArray.length ; ++i)
{
outArray[i] = (Class)iterator.next ();
}
return outArray;
}private static File [] getSubdirectories (File directory)
{
if (!directory.isDirectory ()) return null;
ArrayList directoryList = new ArrayList();
File [] files = directory.listFiles ();
for (int i = 0 ; i < files.length ; ++i)
{
if (files[i].isDirectory ()) directoryList.add(files[i]);
}
int length = directoryList.size ();
for (int i = 0 ; i < length ; ++i)
{
File [] newDirectories = getSubdirectories((File)directoryList.get (i));
for (int x = 0 ; x < newDirectories.length ; ++x)
{
directoryList.add(newDirectories[x]);
}
}
File [] directoryArray = new File [directoryList.size ()];
for (int i = 0 ; i < directoryArray.length ; ++i)
{
directoryArray [i] = (File) directoryList.get(i);
}
return directoryArray;
}private static Class loadControllerClass(File classFile)
{
String className = classFile.getAbsolutePath ();
if (!className.endsWith (".class")) return null;
if (!classFile.getParentFile ().getAbsolutePath ().endsWith ("controller")) return null;
int start = className.indexOf ("plugin");
className = className.substring (start,className.length()-6);
className = className.replace (File.separatorChar,'.');
try
{
Class loadedClass = Class.forName (className);
if (Class.forName ("plugin.Plugin").isAssignableFrom (loadedClass))
{
return loadedClass;
}
}
catch (ClassNotFoundException e)
{
}
return null;
}[/code]
Der Code ist allerdings schon recht alt und ich bin nicht so zufrieden damit. ...muss ich wohl irgendwann überarbeiten.
-
Hallo,
Reflections haben wie fast alles ihre Vor- und Nachteile. Ein Vorteil ist ganz klar die Möglichkeit der Reduzierung statischer Abhängigkeiten. Man kann relativ einfach neue Komponenten in ein Programm einbinden ohne irgendetwas neu kompilieren (oder neu ausliefern) zu müssen. Man kann also sehr gut statische Typeinschränkungen aufweichen und vieles auf Stringbasis erledigen.Hier liegt aber auch einer der Nachteile. Viele Fehler können so nur noch zur Laufzeit erkannt werden, da zur Compilezeit die notwendigen Informationen noch gar nicht vorliegen. Und Laufzeitfehler sind bekanntlich böse Fehler.
Übertrieben häufig angewendet resultiert Reflection häufig auch in unnützer Komplexität.
Ich könnte mir allerdings gut vorstellen, dass der neue C++ Standard auch etwas zum Thema Reflections zu sagen haben wird. Auch wenn der Wunsch nach einem Reflection-System in der C++ Community nicht so verbreitet (gewünscht) ist. Liegt wohl daran, dass sich selbige Community in den letzten Jahren mehr mit Temlates als mit allem anderen beschäftigt hat
-
Ist sowas wie Reflections überhaupt möglich in einer "compilieren Sprache"?
-
Original erstellt von <Startguthaben>:
Ist sowas wie Reflections überhaupt möglich in einer "compilieren Sprache"?man macht einfach eine klasse die zu laufzeit eine dll läd, funktions aufrufe passieren dan ca. so ReflectionSimulator.run_func( "sag_hallo_world" );
-
Original erstellt von Dimah:
man macht einfach eine klasse die zu laufzeit eine dll läd, funktions aufrufe passieren dan ca. so ReflectionSimulator.run_func( "sag_hallo_world" );jo. sehe den sinn von reflection hier nicht.
-
Original erstellt von Mr. N:
[quote]Original erstellt von Dimah:
[qb]man macht einfach eine klasse die zu laufzeit eine dll läd, funktions aufrufe passieren dan ca. so ReflectionSimulator.run_func( "sag_hallo_world" );jo. sehe den sinn von reflection hier nicht.[/QB][/QUOTE]
Ich weiß nicht, was man da alles mit C++ machen kann. Deshalb aus Interesse:Zeig mal C++-Code, der ein Verzeichnis nach Klassen durchsucht, die von einer gegebenen Klasse abgeleitet sind. ...es sollen auch andere Klassen in dem Verzeichnis zu finden sein. Die entsprechenden Klassen, die du findest, speicherst du in einem Array, erstellst dann von jeder dieser Klassen ein Exemplar und läßt das Exemplar dann etwas machen, was es wegen der Oberklasse können muss.
...ich würde einen solchen Code gerne mal sehen, weil ich es eben noch nicht gesehen habe.
[ Dieser Beitrag wurde am 17.01.2003 um 00:02 Uhr von Gregor editiert. ]