Überladen von Operatoren in C ++

Bewerten Sie diesen Artikel





перегрузка операторов c++, перегрузка операторов с++, Überlast c ++ Operationen, перегрузBetreiber Überlastung c ++

Operator in einem gewissen Grad eine Überlastung, der kreative Prozess. Mit seiner Hilfe, Programmierer es möglich ist, es einfacher zu machen für sich selbst Code schreiben, und andere – Verbesserung der Lesbarkeit. beispielsweise, wenn eine Aktion hat viele Male im Code wiederholt werden,, und nur mühsam den dauerhaften Einsatz für diese spezielle Funktion – Sie können einen Operator für diese überlasten. Lassen Sie uns, im Code ist es notwendig, oft Linie zu kombinieren (einen String in einen String-Klasse Element anhängen). Es kann auf unterschiedliche Weise gestaltet sein. Aber wir tun so, auf String-Verkettung ist dann passiert, wenn wir verwenden, um die Betreiber + :

Das Ergebnis sollte eine Änderung in der Zelle sein, str. Er und ein zweizeiliges: “Der Name unserer Website PureCodeCpp”.

Während wir uns natürlich nicht überlasten das sind +, Compiler “schwören”, da wir summieren sich die Zahlen nicht, und die Linie. Aber jetzt lernen wir, wie ihm zu sagen,, wie zu handeln, wenn wir fragen, einen Nicht-Standard-Aktion auszuführen, Verwendung +.

Erste Praxis. Definieren Sie in Beispiel 4 Linien. Als nächstes sammeln eine Anekdote, sie in der richtigen Reihenfolge in einer Zeile kombiniert.

Lassen Sie uns nicht über die offensichtlichen sprechen – gehen die meisten Überlastung zu untersuchen. On line 15 Verfahren sehen wir einen Prototyp einer Klasse Überlast: Leere Operator +(verkohlen*); Dieses Verfahren führt dazu, dass der Bediener arbeiten + so, dass wir wollen, (wie definieren wir unten). Um eine Überlastung jeden Betreiber wollen Sie das Schlüsselwort zu verwenden, Operator. In diesem Fall, Methode nicht die Werte zurückgeben, so Leere, Weitere Schlüsselwort Operator und der Bediener selbst +. Es nimmt diese Methode auf einem String-Zeiger.

Linien 20 – 23 Es ist die Definition der Methode der Betreiber Überlastung. (Wie eine Klassenmethode zu definieren, ist in dem Artikel beschrieben Klassen in C ++) In ihm, mit Hilfe der Funktion strcat_s(str, s); Linie erzeugt einen Datensatz s Ende der Leitung str (Klasse Element). Acts so – sobald der Code die Bedienungsperson trifft + die sich hinter der Linie befinden wird – Methode wird Überladen von Operatoren genannt und diese Linie wird auf das Zeichen auf sie übertragen werden,.

Die Hauptfunktion, stellten wir fest, zufällig 4 Linien. Zeigen Sie sie auf dem Bildschirm (Linien 39 – 42). unten, in Zeile 44, erklärt Objekt Witz. Zum Zeitpunkt seiner Entstehung, Klasse-Designer, reinigen Klasse Element str von “Müll” und es wird bereit sein, Linien aufzeichnen. Befolgen Sie diese einfachen Schritte (Linien 46 – 49) – überladenen + notieren Sie alle Zeilen in einem (str) in der richtigen Reihenfolge.

Ergebnis:

перегрузка операторов c++,  Betreiber Überlastung c ++

alles geschah. Noch, wie in der Folge ersichtlich, für numerische Daten Operator + korrekt geladen. Daher kann es sicher für die arithmetischen Operationen in dem Code verwendet werden, – компилятор васпоймет”. Ein weiterer Punkt, – перегрузка оператора действует только в пределах того класса, для которого она определена. Если мы определим еще один класс (Overload2 beispielsweise) но не перегрузим для него оператор, то попытка использовать + для записи строки куда-либо приведет к ошибке.




Есть ряд исключений в С++nicht все операторы можно перегрузить. Hier ist eine Liste:

перегрузка операторов c++,  Betreiber Überlastung c ++

И еще немного теории:

перегрузка операторов не может изменить приоритет и порядок выполнения операций;

нет возможности, с помощью перегрузки, создать новые символы для операций;

бинарные операторы не могут быть использованы для переопределения унарной операции и наоборотунарный оператор не переопределит бинарную операцию.

Перегрузка операторов, natürlich, “Sache” интересная. Только не стоит увлекаться. Используйте её только по мере острой необходимостиесли это действительно будет приносить больше удобства, экономить вам время и положительно скажется на читабельности кода. Старайтесь перегружать операторы так, чтобы это было как можно ближе к их логическому значению. То есть не надо складывать строки, перегружая оператор , beispielsweise. Логичнее использовать +. ich stelle fest,, что многие программисты не очень любят перегрузку операторов, так как некоторые чрезмерно ней увлекаются и читать код становится сложно. Так что внимательно взвешивайте все за и против, принимая решение о перегрузке операторов.

Я планирую в будущем написать еще одну статью о перегрузке операторов, где на примерах хочу показать как перегрузить ++ Zuwachs, Dekrement, == равенство, = присваивание neu und löschen. Хоть бы не забыть :)

Есть видео по теме. Автор MyNekis.

Zur Unterstützung unserer Website – klicken Sie auf das Sparschwein und wählen Sie eine beliebige bequeme Weise.

Newsletter neue Lektionen über die Programmierung:

Ein Gedanke zu "Überladen von Operatoren in C ++

  1. >> beispielsweise, wenn eine Aktion hat viele Male im Code wiederholt werden,, и просто мучительно постоянно использовать для этого специальные функции – можно перегрузить оператор для этого.

    В целом то верно, но перегрузкаэто шикарный способ выстрелить себе в ногу (и еще отстрелить что-нибудь товарищу). Очень опасная штука. Она может как повысить читаемость кода, так и все испортить.

    У Маерса были правила на эту тему (если их не соблюдатьв аду вас заставят поддерживать свой код все 7 кругов). beispielsweise:
    оператор присваивания должен возвращать ссылку на *this;
    в операторе присваивания осуществляйте проверку самоприсваивания;
    есть целыйел про перегрузку new и delete, но ИМХО 99% смертных просто не нужно трогать эти операторы;
    объявляйте функции, не являющиеся членами, когда преобразование типов должно быть применимо ко всем параметрам.
    Ну и ряд других правил (в нескольких книжках).
    Предлагаю уделить внимание последнему правилу из списка. У вас описан оператор, который сработает для

    Witz + str1;
    Но не сработает для
    str1 + Witz;

    Но было бы здорово если оператор работал бы в обе стороны. Для этого достаточно сделать его не членом класса (обычной функцией). Это ведь совсем не сложно? )

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>