Zum Inhalt springen

Bubble

Mitglieder
  • Gesamte Inhalte

    1.565
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Bubble

  1. "protected" ist immer dann für Variablen und Funktionen sinnvoll, wenn Performance eine Rolle spielt oder wirklich nur abgeleitete Klassen auf interne Datenstrukturen zugreifen sollen, aber kein Benutzer der Klassenbibliothek von außen. Natürlich kann man darüber vortrefflich streiten, ich finde protected jedoch in vielen Fällen sinnvoll, da es für Erweiterungen durch Vererbung mehr Spielraum lässt ohne in den Code der Basisklasse selbst eingreifen zu müssen. Neuere Sprachen wie C# unterstützen noch sealed, wodurch man die letzte Klasse in seiner Hierarchie abschotten kann, so dass kein anderer Entwickler auf die Idee kommt sich durch Vererbung Zugriff auf interne Strukturen zu verschaffen. In C++ käme man dem am nächsten, indem man die letze Ableitung in der Kette mit "private" vor dem Namen der Basisklasse modifiziert. Vor dem Ableiten von Klassen weiter oben in der Hierarchie schützt es allerdings auch nicht. Kurzbeispiel (nicht vollständig ausformuliert): Klasse Bitmap mit einem protected Zeiger auf den Speicherblock mit den Bilddaten und Integers für Angaben wie z.B. Breite und Höhe. Abgeleitete Klassen wie "BitmapRLE" oder "BitmapJPEG" sollen darauf schnell zugreifen können (Bildinhalte neu setzen, Breite und Höhe des Bildes verändern), Verwender der Klassen (die eigentliche Anwendung) sollen jedoch Daten wie Breite und Höhe nur auslesen können und auf die Bitmap nur indirekten Zugriff (GetPixel Funktion) erhalten. Hier spricht IMO nichts gegen die Verwendung von protected, sie ist sogar erforderlich.
  2. "public", "private" und "protected" verändern die Sichtbarkeit von Klassenfunktionen und Klassenvariablen. Für ein gutes Design ist das zwingend, denn nur so können in einer Klasse z.B. Zustandsvariablen verborgen und ihre Änderung auf direktem Weg von außen verhindert werden. "protected" ist eine Abschwächung von "private" in der Hinsicht, dass abgeleitete Klassen vollen Zugriff haben, während "private" wirklich privat bedeutet und auch abgeleiteten Klassen keinen Zugriff haben. Genaueres bitte in einem Buch nachlesen, alles hier auf die Schnelle zu wiederholen lohnt IMO nicht Das ist definitiv falsch, es ist sogar sehr sinnvoll für ein gutes Klassendesign! Ich würde sogar sagen: zwingend!
  3. Dann solltest Du mit dem Lernen von C oder C++ beginnen. Die Basisfunktionen der IDE zum Verwalten von Projekten sind teils selbsterklärend oder leicht zu erlernen. Viel wichtiger ist aber zuerst die Programmiersprache und ihre standard Klassenbibliotheken. Mit den Wizards der IDE und Bibliotheken wie der MFC (der Class Wizard der 6er Version steht im Zusammenhang mit der MFC) solltest Du dich erst beschäftigen, wenn Du C++ erlernt hast und sicher bist. Wobei bevor Du mit der MFC anfängst es IMO auch sinnvoll ist die Grundlagen der Win32 API ohne MFC zu erlernen. Du solltest Dich aber fragen, ob MFC für Dich später auch noch die beste Wahl ist, oder ob Du nicht lieber gleich in Richtung .NET gehen möchtest.
  4. Bubble

    array

    Doch doch, alles richtig , denn neben dem while{}-Block gibt es noch einen {}-Block. Bei mir wird z nicht im while-Block deklariert sondern im übergeordneten Block, der nichts anderes macht, als Deklaration und while-Block einzuschließen, damit für die Schleife deklarierte Variablen im weiteren Verlauf des Codes nicht mehr gültig sind. Wenn Du also das Verhalten von standardkonformen C++ for-Schleifen nachahmen willst, musst Du Deklaration und while wie in meinem Beispiel in einem {}-Block schachteln.
  5. Es gibt diverse .net Bibliotheken für Diagramme zu kaufen. Einfach mal z.B. nach .NET und charting suchen.
  6. Bubble

    array

    ??? For-Schleifen sind vom Prinzip her vollkommen überflüssig, alles geht mit while Schleifen. Betrachte for nur als eine Bequemlichkeit, die der Compiler für Dich "umschreibt" und zwar in der Form: for(int z=0;z<10;z++) { /* blah */ } [/PHP] wird z.B. zu [PHP] { int z=0; while(z++ < 10) { /* blah */ } } Je nach Compiler bzw. Einstellung werden unter Umständen die äußeren Klammern weggelassen, wodurch z auch nach dem for-Konstrukt nutzbar bleibt, was dann allerdings nicht mehr völlig dem Standard entspricht. Ich verstehe nicht, was Du daran unlogisch findest. Und wenn doch, dann betrachte es doch einfach als gegebene Festlegung.
  7. Bubble

    array

    Der Grund liegt beim for, das als eine abgekürzte Schreibweise für eine while-Schleife betrachtet werden kann. Wenn es kein for gäbe, würdest Du die Deklaration der Zählvariablen vermutlich auch im {}-Block vornehmen. Aber letztlich ist es egal, irgendwie musste es festgelegt werden und es ist nun so festgelegt, wie es eben ist. Es gibt ja auch Compiler, die sich in dieser Beziehung Freiheiten für Abweichungen vom Standard nehmen.
  8. Seit XP SP2 ist die Option in zwei Varianten unterteilt. Mit der 2. kann man das Script Debugging auch für andere Anwendungen, die das HTML Control benutzen, abschalten. Sind bei Dir beide ausgewählt?
  9. Bubble

    array

    In der Version 7.1 vom VS (vermutlich aber auch bereits in früheren Versionen) ist das Verhalten dokumentiert. Durch Abschalten der Erweiterungen (/Za) oder durch /Zc:forScope kann das C++ Standard-Verhalten erzwungen werden.
  10. Suchst Du ein Tutorial zur Einführung ins Visual Studio, suchst Du eine Einführung in die MFC (da Du den Class Wizard ansprichst) oder möchstest Du C++ lernen? Das sind alles unterschiedliche Dinge.
  11. RAW sockets? Evtl. XP SP2? Unter XP SP2 sind einige Arten von RAW Sockets verboten, insbesondere solche, die beim Senden Absender-Adresse verfälschen.
  12. @Schnuffelluff: Zuerst wäre zu klären, ob Du die Lösung numerisch oder per symbolischer Rechnung finden willst. Im zweiten Fall wird es Dir vermutlich nur für einfache Funktionen gelingen. Aber auch numerische Lösungswege sind nicht in jedem Fall für jede Funktion geeignet und gute Umsetzungen sind auch nicht trivial.
  13. Einfach die Bits Deiner Variable (z.B. int) einzeln maskieren und falls gesetzt eine 1 Ausgeben, sonst eine 0. Maskieren kannst Du ein Bit, indem Du die Zahl mit der jeweiligen Zahl, bei der nur das gewünschte Bit gesetzt ist, binär UND-verknüpfst.
  14. Hast Du bei der "Per-Hand-Lösung" das Vorzeichen-Bit beachtet? Wenn Du es vergisst, bekommst Du D0 (208) statt -208 heraus.
  15. Bubble

    Streams

    Genauso, nur dass es unter VC++ u.a. die Funktion _stat gibt. Kannst sie natürlich auch durch eine entsprechende Win32 API Funktion ersetzen. Alternativ kannst Du mit fseek ans Ende des Streams springen, mit ftell die Position einlesen und dann wieder mit fseek an den Anfang zurückkehren.
  16. Probier mal "open" und den HWND Parameter (also die ersten zwei Parameter) durch NULL zu ersetzen, evtl. hilft es in Deinem Fall. Funktioniert es denn auf anderen Rechnern? Wie sieht es mit einer sauberen (frischen) Windows-Installation aus, ggf. mit neuestem Service Pack? Kann es sein, dass zwischenzeitlich Programme installiert wurden, die die Einstellungen zur Verarbeitung von lnk-Dateien verändert haben? Irgendwo muss ja der Grund liegen, wenn es früher mal ging Bist sicher, dass es die gleichen Dateien waren?
  17. AFAIK kann man mit Windows Installer von der Ferne aus Installationen auf Rechner verteilen und auch bestimmen, wann das Programm installiert wird.
  18. Diese Lösung entspricht ebenfalls der des Binärbaums. Wie Dir bei meinem Vorschlag (den ich vielleicht etwas sehr knapp erklärt habe, sorry )aufgefallen ist, kannst Du keinen vollständig ausbalancierten Baum entwerfen, sondern nur einen Baum, der "so gut es geht" gleichmässig lange Äste hat. (Die Länge der Äste wird sich aber nie mehr, als um 1 unterscheiden.) Diese unterschiedlichen Längen zu den Blättern haben zur Folge, das bestimmte Blätter (und damit Kombinatinen) eine höhere Wahrscheinlichkeit haben aufzutreten, als andere (4 Blätter haben bei meinem Vorschlag eine Wahrscheinlichkeit von 1/8 und 2 Blätter eine von 1/4). Dieses Problem kannst Du nicht vermeiden. Der einzige "work around" wäre das Einführen zweier zusätzlicher Blätter mit Pseudo-Zuständen, die, wenn sie mit Münzwürfen erreicht werden, dazu führen, einfach neu zu beginnen. Allerdings kannst Du dadurch nicht sagen, wie lange es dauert, bis ein tatsächlches Ergebnis ausgelost wurde, da theoretisch immer wieder die beiden Blätter des Baumes, die zum Neuanfang führen, erreicht werden können. Ohne Wiederholungen des Auslosens (also mit dem Einführen zusätzlicher Blätter im Baum) ist es unmöglich einen (binären, da Münzwurf) Entscheidungsbaum aufzustellen, der zu 6 Möglichen Zuständen/Blättern (die 6 möglichen Anordnungen der Personen) einen gleich langen Pfad hat. Dadurch ergibt sich zwangsweise, dass einige Blätter (die mit kürzerem Pfad)mit einer höheren Wahrscheinlichkeit erreicht werden können. Einen binären Baum, bei dem alle Blätter gleichberechtigt sind, kannst Du nur aufstellen, wenn die Anzahl der Blätter eine Zweierpotenz ist. Wenn ich es noch ausführlicher erklären soll, oder Du noch eine Frage hast, einfach hier nachfragen
  19. @Idexe: Und was, wenn alle Kopf oder Zahj werfen? Oder zwei mal Kopf? ;-) @sysopsebdd: Soll die Wahrscheinlichkeit, das jede Person eine der 3 Nummern zugeordnet wird gleich sein? Wenn ja, kannst Du auf folgendem Weg vorgehen: Überlege Dir zuerst alle möglichen Kombinationen für Zuordnungen von Nummern zu den 3 Personen. Diese Zuordnungs-Tripel nimmst Du nun als Blätter für einen Binärbaum. Den Baum konstruiert Du, indem Du jeweils zwei Blätter zu einem Knoten verbindest. Dannach verbindest Du die Knoten weiter, usw., bis Du einen ausgewogenen Binärbaum hast (=alle Pfade zu den Blättern gleich lang). Nun beschriftest Du alle linken Kanten mit Kopf und die rechten Kanten mit Zahl. Nun wirfst Du mehrfach Deine Münze und folgst dem Pfad bis zu einem Blatt. Fertig. :-)
  20. Probiere erst einmal einen Punkt weniger zu verwenden (".." statt "...") und, wenn das nicht hilft, einen absoluten Pfad für Deinen Dateinamen anzugeben.
  21. @Crush: Ich sage mal, mit dem Anforderungskatalog kann man es als Hobby-Projekt ohne große Vorkenntnisse knicken, wenn man nicht grade die nächsten 12 Monate nichts zu tun hat, um sich erstmal gründlich in die Materie einzuarbeiten (Für mich klang die Anfrage sehr nach Hobby-Projekt). Daher würde ich unter Umständen zur Verwendung einer fertigen 3D-Engine raten.
  22. Das klingt jetzt vielleicht etwas blöd, aber: In die Engine gehört hinein, was Du von der Engine erwartest und für das Spiel brauchst. Es gibt keine verbindliche Festlegung, was dazu gehört und was nicht. Überlege Dir zuerst alle Einzelheiten des Spiels und beginne dann, den Code zu entwickeln. Über Features, die das Spiel nicht braucht, brauchst Du Dir dann keine Gedanken zu machen. Und steck' die Erwartunge nicht zu hoch, sonst wird das Projekt irgendwann einfach eingestellt, wie so viele Hobby-Projekte Viel Erfolg!
  23. Das machst Du genauso, wie die Sortierung nach der 1. Dimension. Dein Problem ist vollkommen analog zum Sortieren einer Wortliste, eigentlich sogar einfacher, da Wörter quasi nur aus 2 Buchstaben bestehen (2 Dimensionen). In Deinem Fall benötigst Du lediglich eine Vergleichsfunktion, die pro zu sortierendem Element beim Vergleich mit einem anderen Element statt einem Wert zwei Werte berücksichtigt und Dein Ordnungskriterium anwendet. Wenn Du trotzdem noch Fragen hast, einfach melden.
  24. Der JIT-Compiler übernimmt in der Laufzeitumgebung die Aufgabe des Interpreters, geht über ihn jedoch hinaus. Anstatt jeden Befehl aus dem "Zwischencode" einzeln (und immer wieder) zu verarbeiten und auszuführen, analysiert ein JIT-Compiler den Zwischencode und erzeugt echten (im optimalen Fall optimierten) Maschienen-Code, der direkt von der jeweiligen CPU ausgeführt werden kann. Dies ist ein bedeutender Leistungs-Gewinn. Ein JIT-Compiler (z.B. bei Java, .NET) kann allerdings keinen Maschinen-Code zu erzeugen, der unabhängig von der Laufzeitumgebung ausführbar ist. Meist benötigt die Laufzeitumgebung neben dem JIT-Compilat weiterhin den Meta-Code, um funktionieren zu können. JIT wird der Compiler deswegen genannt, weil die Übersetzung in Maschinen-Code zur Laufzeit stattfindet (in der Regel beim 1. Aufruf des Codes) und nicht vom Entwickler vorab vorgenommen wird. Dadurch kann der Compiler z.B. für die CPU des Anwenders geeignete Optimierungen anwenden.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...