Was der Modifikator const nach einer Methodendeklaration bedeutet - Seite 2

 
Vasiliy Sokolov:
Die konstante Methode ist ein weiteres Beispiel für das Sprichwort "Wir wollten es besser machen, aber es hat sich herausgestellt, dass es das Gleiche wie immer ist". Ich denke, das ist ein Motto für C++ überhaupt. Es gibt keinen praktischen Nutzen, aber es erschwert den Entwurf von OOP-Programmen erheblich, weil man ständig kontrollieren muss, welcher Typ von Objekt geändert wird (er muss auch konstant sein).

Darf ich Ihnen ein Beispiel für das geben, worüber Sie geschrieben haben?

 
Vasiliy Sokolov:
Die konstante Methode ist nur ein weiteres Beispiel für das Sprichwort "Wir wollten es besser machen, aber es kam wie immer". Ich denke, das ist ein Motto für C++ überhaupt. Dies ist zwar nicht von praktischem Nutzen, erschwert aber den Entwurf von OOP-Programmen erheblich, da man ständig den Typ des geänderten Objekts kontrollieren muss (er muss außerdem konstant sein).

))) Ich habe ein altes Stroustrup-Buch herumliegen, wenn Einbrecher ins Haus kommen, kann ich sie leicht damit verprügeln, es wiegt wie ein Ziegelstein )) Der alte Mann hat sich so viel Mühe mit seiner Zunge gegeben...

Ich erinnere mich, dass ich vor langer Zeit bei einem Vorstellungsgespräch verfolgt wurde, als man mir eine Frage stellte, die ich nicht genau beantworten konnte. Sie brachten mir ein solches Buch, ich las es und fragte: "Verwenden Sie es selbst?

Ich fragte: "Benutzt du es selbst?" - Die Leute lachen, es ist OK, niemand hat diese Frage richtig beantwortet, denn niemand benutzt es.

Übrigens habe ich ein Buch über Pluspunkte aus den frühen 90er Jahren, bevor der erste Standard verabschiedet wurde. Ein normal verdauliches Taschenbuch. Aber dann ließ sich Ostap hinreißen ))

 
Alexey Kozitsyn:

Kann ich ein Beispiel dafür haben, worüber Sie geschrieben haben?

Alexey schrieb ein Beispiel. Eine konstante Methode kann ihre Klassenmitglieder nicht ändern. Wo liegt das Problem? Verwenden Sie einfach nicht den Modifikator const. Aber dann gibt es Schwierigkeiten bei der Vererbung (vor allem aus derStandardbibliothek): Designer definiert virtuelle Methode const, aber in abgeleiteten Klasse, Methode muss etwas in seine Daten ändern - und es gibt einen Stecker wegen const. Ohne sie kann die Methode nicht überschrieben werden, und mit ihr kann die abgeleitete Methode ihre eigenen Klassendaten nicht ändern.

Was ist der Hauptfehler bei der Einführung eines solchen Modifikators für Klassenmethoden? Das Hauptprinzip der Vererbung wird verletzt: Spezialisierung und Verfeinerung. Die Basisklasse verbietet der Methode der abgeleiteten Klasse, mit ihren internen Daten zu arbeiten. Und eine solche Situation sollte es nicht geben.

 
Vasiliy Sokolov:

Sharpe stinkt schon von weitem ))

Es gibt keine Hindernisse, es gibt keinen Grund, darüber zu schwadronieren.

 
Комбинатор:

Sharpe stinkt schon von weitem ))

Ich leugne es nicht. Sharpe ist wirklich eine perfekte, große und schöne Sprache.

Kombinator:

Const macht nichts kompliziert, kein Blabla

Ok, sagen wir mal, man kann sich immer von Verstopfungen befreien. Aber warum erklären Sie nicht kurz anhand eines Beispiels, was die Konst macht? Welchen Nutzen hat sie wirklich? Durch ein Beispiel und möglichst nicht aus der Luft gegriffen.

 
Const ist eine der markanten Metaphern von C++: Erst legt man fleißig überall im Code ausgeklügelte Fallen aus, und dann entkommt man seinen eigenen Fallen - das ist der ganze Prozess der C++-Programmierung.
 
Vasiliy Sokolov:

...

Was ist der Hauptfehler bei der Einführung eines solchen Modifikators für Klassenmethoden? Das Hauptprinzip der Vererbung wird verletzt: Spezialisierung und Verfeinerung. Die Basisklasse verbietet den Methoden der abgeleiteten Klasse, mit ihren internen Daten zu arbeiten. Aber so etwas darf es nicht geben.

Vielleicht ist es ein Teil, der von den Urhebern an die einfachen Nutzer weitergegeben wird. Wie die Startfunktion im Expert Advisor und die Bid- und Ask-Variablen.

Wenn man alles selbst herstellt, hat es keinen Sinn, sich mit allen möglichen Konventionen herumzuschlagen.

 
Vasiliy Sokolov:

Ich leugne es nicht. Sharp ist in der Tat eine perfekte, großartige und schöne Sprache.

...

Großartig. Aber sie ist weit davon entfernt, perfekt zu sein.
 
Dmitry Fedoseev:
Großartig. Aber es ist weit davon entfernt, perfekt zu sein.
Der Sharp ist gut, nicht wegen der Genies, die ihn gemacht haben, sondern weil er der letzte ist. Davor versuchten sie 30 Jahre lang, mit Harken verschiedener Größen und phantasievoller Konfigurationen zu töten. C++ war ein wunderbares Testfeld dafür. Nachdem alle umgebracht wurden, haben die Microsoft-Leute einfach losgezischt.... hat die bewährten Konzepte übernommen und eine syntaktisch saubere Sprache von Grund auf geschaffen.
 
Übrigens hatte MetaQuotes auch eine gute Chance, MQL5 schrittweise zu einem Robe-ähnlichen Monster a la C++ zu "entwickeln". Aber tiefe Kenntnisse in C++ (wo Schweiß, Tränen und Hass geflossen sein müssen) ließen sie erkennen, dass sie den Ratschlägen von C++-Programmierern der alten Schule nicht folgen sollten. Deshalb haben wir jetzt eine syntaktisch saubere und mehr oder weniger streng typisierte Programmiersprache. Es ist sogar erstaunlich, dass wir es geschafft haben, eine solche Süßigkeit zu kreieren, die auf einem völlig monströsen Erbe basiert. Meisterschaft kann man nicht verlieren, wie man sagt.