Öffentlich verfügbare Daten in einer Struktur zu haben, hat seine Vorteile und bietet volle Handlungsfreiheit. Möglicherweise möchten wir jedoch die Variablen ausblenden, die in einem Datentyp verwendet werden, um das Verhalten des Typs vorhersehbarer und einfacher zu ändern und seine Verwendung eher wie die Verwendung eines grundlegenden Datentyps zu gestalten. Dazu müssen Sie das Zusammenspiel der Datentypschnittstelle mit dem Zugriff auf nicht erreichbare Variablen in der Klasse definieren.
In C++ werden diese Datentypen als Klassen bezeichnet. Eine Klasse hat einen solchen Satz von Komponenten wie Variablen und Methoden für den Zugriff auf die Funktionalität der Klasse.
Die folgenden Abschnitte können in einer Klassenschnittstelle definiert werden:
- öffentlich - Methoden und Variablen sind für die Interaktion von außerhalb der Klasse verfügbar;
- geschützt - Methoden und Variablen sind für die Verwendung innerhalb der Klasse sowie in von dieser Klasse geerbten Klassen verfügbar;
- privat - Methoden und Variablen sind nur für die Verwendung innerhalb der Klasse verfügbar
Auf private Variablen kann jedoch von außen mit öffentlichen Methoden zugegriffen werden.
In Strukturen können Sie auch private , protected und public Abschnitte definieren. Der Unterschied zwischen Strukturen und Klassen besteht in diesem Fall darin, dass standardmäßig alle Mitglieder von Strukturen (Variablen, Methoden) öffentlich sind, während Mitglieder einer Klasse im Abschnitt private. stehen
Mal sehen, wie die Vector-Klasse, die im vorherigen Artikel als Struktur deklariert wurde, aussehen könnte.
class Vector { public: Vector(int s) : elem {new double[s]}, sz{s} { } double& operator[](int i) { return elem[i]; } int size() { return sz; } private: double∗ elem; // указатель на элементы int sz; // число элементов };
Lassen Sie uns eine Klassenvariable Vector. definieren.
Vector v(6); // Вектор из шести элементов
Grafisch kann Vector so dargestellt werden:
Grundsätzlich ist Vector ein Objekt, das beschreibt, wie man mit einem Zeiger auf ein Array von Elementen und deren Wert arbeitet. Unterschiedliche Vector -Objekte können eine unterschiedliche Anzahl von Elementen und deren Größe haben, aber die Größe des Vector -Objekts selbst ist immer gleich, da es nur einen Zeiger und einen ganzzahligen Wert der Array-Größe speichert.
Denn jetzt befindet sich das Array von Elementen im Abschnitt private . Dann erfolgt der Zugriff auf seine Elemente durch den überladenen Operator der eckigen Klammern [] und auf die Größe des Arrays durch die Methode size(). .
double read_and_sum(int s) { Vector v(s); // Создаём вектор элементов for (int i=0; i!=v.size(); ++i) cin>>v[i]; // Считываем элементы из ввода и записываем в вектор double sum = 0; for (int i=0; i!=v.size(); ++i) sum+=v[i]; // Суммируем элементы return sum; }
Die Klasse Vector hat eine Funktion mit dem gleichen Namen Vector(int). Diese Funktion ist ein Konstruktor der Klasse Vector, der die notwendige Initialisierung eines Objekts während seiner Erstellung durchführt. Eine Klasse kann mehrere Konstruktoren haben.
Vector(int s) : elem {new double[s]}, sz{s} { }
Der Konstruktor initialisiert die Elemente mit initializer list , einem C++11-Standardelement.
Es zeigt nicht den Mechanismus für die Fehlerbehandlung und die Arbeit mit dem Destruktor, aber dazu später mehr.
В функции
есть лишний пробел в
v.siz_e()
Спасибо, поправил.