[C++-Grundlagen: 23]: [Wichtige Vorlage] Entwurf und Implementierung der Überladung relationaler Operatoren: [>, <, >=, <=, !=, ==] Überladung [Nehmen Sie die Date-Klasse als Beispiel]

Diese Reihe von C++-bezogenen Artikeln dient nur den Studiennotizen des Autors, und ich werde mein eigenes Verständnis verwenden, um die Studie aufzuzeichnen! Die C++-Lernreihe ist in drei Phasen unterteilt: Grundlagen, STL sowie fortgeschrittene Datenstrukturen und Algorithmen . Die relevanten Kerninhalte sind wie folgt:

  1. Grundlagen : Klassen und Objekte (einschließlich der drei Hauptfunktionen von C++ usw.);
  2. STL : Erfahren Sie, wie Sie die von C++ bereitgestellten STL-bezogenen Bibliotheken verwenden .
  3. Datenstrukturen und Algorithmen höherer Ordnung : Implementieren Sie manuell Ihre eigene STL-Bibliothek und entwerfen und implementieren Sie Datenstrukturen höherer Ordnung , wie B-Baum, B+-Baum, Rot-Schwarz-Baum usw.

Studienset:


Inhalt dieser Ausgabe: [C++ Basics: 23]: Operatorüberladung von relationalen Operatoren [ > , < , >= , <= , != , == ] Überladung


Grundlegendes Verständnis der Operatorüberladung: C++-Lernen:: [Grundlagen: 17]: C++-Klassen und -Objekte: Einführung in die Operatorüberladung, Operatorüberladungsfunktion (Unterschied zwischen innerhalb einer Klasse und außerhalb einer Klasse), Schreibmethode und einfache Designimplementierung


Inhalt:
1. Überblick über das Schreiben von mit Operatoren überladenen Funktionen
2. Entwurfsideen für sechs Überladungen mit relationalen Operatoren (wichtig)
3. Implementierung von sechs überladenen Funktionen mit relationalen Operatoren [am Beispiel der Date-Klasse]
- - 3.1 Grundlegendes Design des Datums Klasse
- - 3.2 Sechs wichtige Implementierungen relationaler Operatoren
4. Häufige Probleme im Zusammenhang mit const in Klassen!
5. Empfohlene verwandte Artikel


[ Link zur C++-Lernsammlung ]


1. Überblick darüber, wie man mit Operatoren überladene Funktionen schreibt

  • Operatorüberladener Funktionsname (behoben!): Operator
  • Grundlegendes Formatschreiben: Funktion Rückgabewerttyp Operator Operator (Parameterliste) {}
  • Hinweis: Die Rückgabewerte der Vergleichsoperatoren in dieser Ausgabe sind: bool (boolescher Typ)

2. Designideen für die Überladung von sechs Vergleichsoperatoren

Sechs Vergleichsoperatoren: größer als, kleiner als, größer oder gleich, kleiner als oder gleich, ungleich, gleich . Ihre Rückgabeergebnisse lauten nur: ja/nein!


In der Codierungspraxis können wir alle sechs Operatorüberladungen einzeln implementieren, aber in der tatsächlichen Entwicklung berücksichtigen wir viele Faktoren. Beispielsweise sollten wir lernen, vorhandene Funktionen wiederzuverwenden, um andere Funktionen zu implementieren, um eine große Anzahl von Codefehlern zu vermeiden. Sehr ähnlicher redundanter Code. Deshalb: Die Kombination der Operatorüberladung bietet hier eine Designidee zur Lösung des Problems.


  • Zunächst einmal ist bekannt, dass es für die beiden Vergleichsobjekte nur zwei mögliche Ergebnisse gibt! Nichts weiter als: ja oder nein!
  • Zweitens, wenn man zwei Objekte vergleicht , sind sie entweder größer als oder nicht größer als! Es gibt viele Situationen, in denen es nicht größer als ist , wie zum Beispiel: kleiner oder gleich! Und nur „kleiner als oder gleich“ umfasst diese beiden Situationen, das heißt: Negieren des Ergebnisses von „größer als ist kleiner als oder gleich“, das heißt: Sie können die Funktion „größer als“ verwenden, um kleiner als oder gleich zu erreichen [Hinweis: Sagen Sie nicht einfach, wenn es nicht größer als ist, ist es kleiner als !
  • Entwurfsplan: Implementieren Sie > und == und verwenden Sie diese beiden Beziehungen erneut, um Folgendes zu implementieren: <, >=, <=, !=

veranschaulichen:

  • „Größer als oder gleich“ : das heißt: „größer als oder gleich“ oder „nicht kleiner als“
  • „Kleiner als oder gleich“ : das heißt: „kleiner als oder gleich“ oder „nicht größer als“
  • „Kleiner als“ : das heißt: „nicht größer als + ungleich“
  • „Ungleich“ : das heißt: „die Negation von gleich“
  • Dies ist das Entwurfsschema, das der Autor in diesem Artikel als Beispiel verwendet. Es gibt tatsächlich noch andere Kombinationen. Der Leser kann sie mithilfe von Code selbst entwerfen und implementieren! [Hinweis: Die Schreibweise von Vergleichsoperatoren ist universell!

3. Implementierung überladener Funktionen von sechs Vergleichsoperatoren

3.1 Grunddesign der Date-Klasse

#include<iostream>
using std::cout;
using std::endl;
using std::cin;

class Date {
public:
	Date(int year,int month, int day) 
		:_year(year),_month(month),_day(day)
	{

	}
	void Print() {
		cout << _year << "年" << _month << "月" << _day << "日" << endl;

	/* 实现两个日期对象的大小比较 */
	bool operator > (const Date& d) const;
	bool operator == (const Date& d)  const;
	bool operator != (const Date& d) const;
	bool operator < (const Date& d) const;
	bool operator >= (const Date& d) const;
	bool operator <= (const Date& d) const;
	}
private:
	int _year;
	int _month;
	int _day;
};

int main() {


	return 0;
}

3.2 Implementierung von sechs Vergleichsoperatoren

Im Folgenden erfahren Sie, wie Sie überladene Funktionen (Vorlagen) für sechs Vergleichsoperatoren schreiben!
Der Leser kann selbst denken:

  1. Weitere Umsetzungsmöglichkeiten!
  2. Warum Konstanten und Referenzen verwenden?
/* 大于运算符重载 */
bool Date::operator > (const Date& d) const
{
	if (_year > d._year
		|| _year == d._year && _month > d._month
		|| _year == d._year && _month == d._month && _day > d._day) return true;
	return false;
}

/* 等于运算符重载 */
bool Date::operator == (const Date& d)  const {
	return (_year == d._year && _month == d._month && _day == d._day);
}

/* 不等于运算符重载:对等于结果取反 */
bool Date::operator != (const Date& d) const {
	return !(*this == d);
}

/* 小于运算符重载:既不大于也不等于 */
bool Date::operator < (const Date& d) const {
	return !(*this == d) && !(*this > d);
}

/* 大于等于运算符重载:大于或等于 */
bool Date::operator >= (const Date& d) const {
	return (*this > d) || (*this == d);
}

/* 小于等于运算符重载:不大于 */
bool Date::operator <= (const Date& d) const {
	return !(*this > d);
}

4. Empfohlene verwandte Artikel

1. C++-Lernen::[Grundlagen: 11]: Grundlegende Verwendung von C++-Klassen und nicht statischen This-Zeigern (zwei Interviewtestpunkte): Nullzeigerprobleme von Klassen (kann dieser Zeiger null sein?) | Wo existiert dieser Zeiger?
2. [C++-Grundlagen: 22]: Const-Objekte und const-Memberfunktionen/-methoden von Klassen und häufige Probleme im Zusammenhang mit const in Klassen!

Supongo que te gusta

Origin blog.csdn.net/weixin_53202576/article/details/131172775
Recomendado
Clasificación