Namensräume & Gültigkeitsbereiche
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 4 von 104.
Namespaces gruppieren zusammengehörigen Code und verhindern Namenskonflikte. Der :: Bereichsauflösungsoperator greift auf Elemente innerhalb eines Namespaces zu.
Erstellen eines Namespace
namespace MathTools {
int add(int a, int b) {
return a + b;
}
}Zugriff mit dem Bereichsauflösungsoperator ::
int result = MathTools::add(5, 3); // result = 8Verwendung der Direktive, um die Angabe des Namespace jedes Mal zu vermeiden
using namespace MathTools;
int result = add(5, 3); // Entspricht MathTools::add(5, 3)Der std-Namensraum
std::cout << "Hello" << std::endl;
// oder
using namespace std;
cout << "Hello" << endl;Namespaces organisieren Code und verhindern Namenskollisionen. Der std-Namespace enthält alle Funktionen der C++-Standardbibliothek wie cout, cin, string und endl.
Aufgabe
MittelErstellen Sie Funktionen innerhalb des MathTools-Namespace:
add(int a, int b)— gibt die Summe zurückmultiply(int a, int b)— gibt das Produkt zurück
Deklarieren Sie diese in MathTools.h und implementieren Sie sie in MathTools.cpp.
Spickzettel
Namespaces gruppieren zusammengehörigen Code und verhindern Namenskonflikte. Der :: Bereichsauflösungsoperator greift auf Elemente innerhalb eines Namespace zu.
Erstellen eines Namespace:
namespace MathTools {
int add(int a, int b) {
return a + b;
}
}Zugriff mit dem Bereichsauflösungsoperator :::
int result = MathTools::add(5, 3); // result = 8Verwendung der using-Direktive, um die Angabe des Namespace jedes Mal zu vermeiden:
using namespace MathTools;
int result = add(5, 3); // Entspricht MathTools::add(5, 3)Der std-Namespace enthält alle Funktionen der C++-Standardbibliothek wie cout, cin, string und endl:
std::cout << "Hello" << std::endl;
// oder
using namespace std;
cout << "Hello" << endl;Probier es selbst
#include <iostream>
#include "MathTools.h"
int main() {
int a, b;
std::cin >> a >> b;
std::cout << "Add: " << MathTools::add(a, b) << std::endl;
std::cout << "Multiply: " << MathTools::multiply(a, b) << std::endl;
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienC++ Build & KompilierungHeader-Dateien & QuelldateienNamensräume & GültigkeitsbereicheEinführung in OOP in C++Klassen vs. ObjekteDer 'this'-PointerMethoden (Elementfunktionen)Attribute (Datenelemente)Grundlagen zu Ctors & DtorsRückblick - Einfacher Taschenrechner4Klasseneigenschaften
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen & KlassenZusammenfassung - Bankkonto-Manager7Vererbung
Grundlagen der VererbungZugriffsstufen bei VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick - Mitarbeiter-Hierarchie2Speicherverwaltung
Stack vs. Heap SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Smart Pointers in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsspezifizierer in C++Zugriffsspezifizierer im DetailInformation HidingStruct vs. ClassVerschachtelte & innere KlassenRückblick - Studentenverwaltungssystem8Polymorphie
Kompilierzeit- vs. Laufzeit-PolymorphieFunktionsüberladungVirtuelle Funktionen – WiederholungRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIZusammenfassung – Formen-Rechner3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorVerschiebekonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktoren im DetailRule of Three / Five / ZeroZusammenfassung - String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladen der [] und () OperatorenTypumwandlungsoperatorenRückblick - Matrix-Klasse9Templates
FunktionstemplatesKlassentemplatesTemplate-SpezialisierungVariadische TemplatesSFINAE & Type Traits GrundlagenRückblick - Generische Container