Ausführliche Erklärung von Klassen und Objekten (1)

Inhaltsverzeichnis

1. Erstes Verständnis von Klassen und Objekten

1.1 Der Unterschied zwischen prozessorientiert und objektorientiert

1.2 Einführung in den Unterricht

 Definitionen innerhalb 1.3

1.4 Klassenzugriffsqualifizierer und Kapselung

1.4.1 Zugangsqualifikationen

1.4.2 Verpackung

1.5 Umfang der Lehrveranstaltungen

1.6 Klassenobjektmodell

1.6.1 So berechnen Sie die Klassenobjektgröße


1. Erstes Verständnis von Klassen und Objekten

1.1 Der Unterschied zwischen prozessorientiert und objektorientiert

Die C-Sprache ist prozessorientiert , konzentriert sich auf den Prozess , analysiert die Schritte zur Lösung des Problems und löst das Problem Schritt für Schritt durch Funktionsaufrufe.
C++ basiert auf Objektorientierung , konzentriert sich auf Objekte , teilt eine Sache in verschiedene Objekte auf und verlässt sich auf die Interaktion zwischen Objekten, um sie abzuschließen.

Nehmen Sie ein einfaches Beispiel:

Der Entwurf eines einfachen Take-Away-Systems
ist prozessorientiert: Der Schwerpunkt liegt auf der Umsetzung der Prozesse der Auftragserteilung, des Bestelleingangs und der Essensauslieferung. Reflektiert auf der Codeebene – methoden-/funktionsobjektorientiert
: Der Schwerpunkt liegt auf der Implementierung von Klassenobjekten und der Beziehung zwischen Klassenobjekten, Benutzern, Händlern, Fahrern und der Beziehung zwischen ihnen. Reflektiert auf Codeebene – Klassendesign und Beziehung zwischen Klassen
 

1.2 Einführung in den Unterricht

In der C-Sprache haben wir bereits den benutzerdefinierten Strukturtyp gelernt . Lassen Sie uns die Struktur verwenden, um einen Studententyp zu definieren:

struct Student
{
	char name[10];
	int age;
	int id;
};

int main()
{
	struct Student s1; //兼容C
	Student s2;        //升级到类,Student为类名,也是类型
	return 0;
}

 Da C++ mit der C-Syntax kompatibel ist, wird struct auch in C++ zu einer Klasse aktualisiert. In der C-Sprache können wir Mitgliedsvariablen nach der Definition von Strukturvariablen nicht initialisieren. In C++ können wir jedoch in der Struktur Mitgliedsfunktionen definieren und gleichzeitig Gleichzeitig können Sie Mitgliedsfunktionen verwenden, um Strukturvariablen und andere Operationen zu initialisieren. Sehen wir uns an, wie es funktioniert:

struct Student
{
	//成员变量
	char _name[10];
	int _age;
	int _id;//前面加_是为了和后面函数的形参进行区分
	//成员方法
	//初始化成员变量
	void Init(const char* name, int age, int id)
	{
		strcpy(_name, name);
		_age = age;
		_id = id;
	}
	//打印成员变量
	void Print()
	{
		cout << _name << endl;
		cout << _age << endl;
		cout << _id << endl;
	}
};

int main()
{
	struct Student s1; //兼容C
	Student s2;        //升级到类,Student为类名,也是类型

	s1.Init("张三", 18, 1);
	s2.Init("李四", 19, 2);

	s1.Print();
	s2.Print();
	return 0;
}

 Das Ergebnis des Ausdrucks:

 Definitionen innerhalb 1.3

class ist das Schlüsselwort zum Definieren einer Klasse:

class className
{
	//类体:由成员变量和成员函数组成
};

 Kann das Schlüsselwort struct im obigen Strukturcode in class geändert werden? Probieren Sie es einfach aus:

 Offensichtlich hat uns der Compiler einen Fehler gemeldet. Keine Sorge, ich werde die Gründe für den Fehler im Folgenden einzeln vorstellen:

Zunächst einmal weist die Objektorientierung drei Hauptmerkmale auf: Kapselung, Vererbung und Polymorphismus

Was wir zuerst verstehen müssen, ist die Kapselung:

1. Bei der objektorientierten Methode werden Daten und Methoden in der Klasse zusammengestellt

2. C++ implementiert die Kapselung durch Zugriffsqualifizierer

Im Folgenden sind die Zugriffsqualifizierer aufgeführt

1.4 Klassenzugriffsqualifizierer und Kapselung

1.4.1 Zugangsqualifikationen

Der Weg von C++ zur Kapselung: Verwenden Sie die Klasse, um die Eigenschaften und Methoden des Objekts zu kombinieren, um das Objekt perfekter zu machen, und stellen Sie seine Schnittstelle über Zugriffsrechte selektiv externen Benutzern zur Verfügung.

 Beschreibung des Zugriffsqualifizierers: 

1. Auf öffentliche geänderte Mitglieder kann direkt außerhalb der Klasse zugegriffen werden.
2. Auf geschützte und private geänderte Mitglieder kann nicht direkt außerhalb der Klasse zugegriffen werden (hier sind geschützt und privat ähnlich).
3. Der Umfang der Zugriffsrechte ergibt sich aus diesem Zugriffsqualifizierer. Die Position beginnt bis das nächste Zugriffsqualifikationsmerkmal erscheint
4. Wenn dahinter kein Zugriffsqualifikationsmerkmal steht, endet der Gültigkeitsbereich am Ende der Klasse.
5. Das Standardzugriffsrecht der Klasse ist privat (Struktur öffentlich, da Struktur mit C kompatibel ist).
 

Der fünfte Punkt hier ist , dass das Standardzugriffsrecht der Klasse privat ist, weshalb der obige Code-Compiler einen Fehler meldet. Wenn wir die Mitgliedsfunktion als öffentlich festlegen (oder sowohl die Mitgliedsvariable als auch die Mitgliedsfunktion als öffentlich festlegen), Der Compiler funktioniert nicht. Es wurde ein Fehler gemeldet:

Wenn wir eine Klasse definieren, versuchen wir daher, den Zugriffsqualifizierer klar zu definieren, anstatt den Standardqualifizierer von Klasse/Struktur zu verwenden, damit andere beim Lesen unseres Codes die Mitgliedsattribute auf einen Blick erkennen können.

1.4.2 Verpackung

 
Die Kapselung ist eine Art strikte Verwaltung, und die Nichtkapselung ist eine Art freie Verwaltung

In C++ werden Daten und Methoden in Klassen gekapselt. Die Mitglieder, auf die Sie zugreifen können, werden als öffentlich definiert, und die Mitglieder, auf die Sie nicht zugreifen möchten, werden als privat definiert.

Die Vorteile der Kapselung:
1. Wir können unseren eigenen Code ändern, ohne die Programmfragmente zu ändern, die unseren Code aufrufen, was die Wartung des Codes erleichtert.
2. Kapseln Sie die zugehörigen Variablen und Funktionen in ein Objekt. Die Variablen beschreiben die Eigenschaften des Objekts und die Funktionen beschreiben das Verhalten des Objekts, was unserem Verständnis der objektiven Welt entspricht.
3. Außerdem werden Datenzugriffsbeschränkungen für Attribute implementiert und die Sicherheit von Programmcodes erhöht.

1.5 Umfang der Lehrveranstaltungen

Eine Klasse definiert einen neuen Bereich und alle Mitglieder der Klasse befinden sich im Gültigkeitsbereich der Klasse. Um ein Mitglied außerhalb einer Klasse zu definieren, müssen Sie den :: -Bereichsparser verwenden, um anzugeben, zu welcher Klassendomäne das Mitglied gehört

Verwendung in der tatsächlichen Entwicklung der modularen Programmierung:

 Stack.h-Datei:

#pragma once

class Stack
{
public:
	void Init();
	void Push(int x);
	// ...
//private:
	int* _a;
	int _top;
	int _capacity;
};

Stack.cpp-Datei:

#include "Stack.h"

void Stack::Init()
{
	_a = nullptr;
	_top = _capacity = 0;
}

Dadurch wird die Trennung von Daten und Methoden erreicht.

1.6 Klassenobjektmodell

1.6.1 So berechnen Sie die Klassenobjektgröße

1. Die Berechnung der Klassengröße erfolgt nach dem Prinzip der Strukturausrichtung

2. Die Größe einer Klasse hängt mit Datenelementen zusammen und hat nichts mit Elementfunktionen zu tun (die Größe einer leeren Klasse beträgt 1 Byte), und die Größe einer Klasse hat nichts mit statischen Datenelementen zu tun

3. Die leere Klasse gibt ein Byte zurück. In diesem Byte werden keine gültigen Daten gespeichert. Es dient lediglich dazu, einen Platz einzunehmen, was darauf hinweist, dass das Objekt vorhanden ist

 Fall 1: Die Klasse enthält sowohl Mitgliedsvariablen als auch Mitgliedsfunktionen

class A1
{
public:
	void f1() {}
private:
	int _a;
};

  Größe: 4 Byte

Fall 2: Die Klasse enthält nur Mitgliedsfunktionen

class A2
{
public:
	void f1() {}
};

   Größe: 1 Byte

Fall 3: Es gibt nichts in der Klasse

class A3
{
}; ​

    Größe: 1 Byte

Ich denke du magst

Origin blog.csdn.net/m0_73648729/article/details/129657886
Empfohlen
Rangfolge