Evgenii Legotckoi
Evgenii Legotckoi8. Juli 2017 06:40

C++ - Tutorial 007. Klassen

Ö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.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

alex_lip
  • 3. April 2018 04:09

В функции

double read_and_sum(int s)

есть лишний пробел в
i!=v.siz e(); 
v.siz_e()

Evgenii Legotckoi
  • 3. April 2018 05:06

Спасибо, поправил.

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken