Namespaces & Gültigkeitsbereich
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy. Lektion 4 von 104.
Namespaces gruppieren zusammengehörigen Code und verhindern Namenskonflikte. Der ::-Operator zur Bereichsauflösung greift auf Elemente innerhalb eines Namespace zu.
Erstellen eines Namespace
namespace MathTools {
int add(int a, int b) {
return a + b;
}
}Zugreifen mit Bereichsauflösung ::
int result = MathTools::add(5, 3); // result = 8Using-Direktive, um den Namespace nicht jedes Mal eingeben zu müssen
using namespace MathTools;
int result = add(5, 3); // Dasselbe wie MathTools::add(5, 3)Der Namensraum std
std::cout << "Hello" << std::endl;
// oder
using namespace std;
cout << "Hello" << endl;Namensräume organisieren Code und verhindern Namenskollisionen. Der Namensraum std enthält alle Funktionen der C++-Standardbibliothek wie cout, cin, string und endl.
Aufgabe
MittelErstelle Funktionen innerhalb des Namensraums MathTools:
add(int a, int b): gibt die Summe zurückmultiply(int a, int b): gibt das Produkt zurück
Deklariere sie in MathTools.h und implementiere sie in MathTools.cpp.
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 & QuelldateienNamespaces & GültigkeitsbereichEinführung in OOP mit C++Klassen vs. ObjekteDer „this“-ZeigerMethoden (Member-Funktionen)Attribute (Datenmember)Grundlagen zu Ctors & DtorsRückblick – Einfacher Taschenrechner4Klassenattribute
Instanz- vs. statische MemberGetter und SetterConst-MemberfunktionenMutable-SchlüsselwortStatische Methoden und VariablenFriend-Funktionen und -KlassenZusammenfassung – Bankkontoverwaltung7Vererbung
Grundlagen der VererbungZugriffsebenen bei der VererbungAufrufreihenfolge von Ctor & DtorÜberschreiben von MethodenVirtuelle Funktionen & VTableMehrfachvererbungVirtuelle VererbungRückblick – Mitarbeiterhierarchie2Speicherverwaltung
Stack- vs. Heap-SpeicherZeiger und ReferenzenDynamischer Speicher (new/delete)Intelligente Zeiger in C++RAII in C++Rückblick – Dynamischer Array-Manager5Kapselung
Zugriffsbezeichner in C++Zugriffsbezeichner im DetailInformationsverbergungStruct vs. KlasseVerschachtelte und innere KlassenWiederholung – Studierendenverwaltungssystem8Polymorphie
Polymorphie zur Compilezeit vs. LaufzeitFunktionsüberladungVirtuelle Funktionen erneut betrachtetRein virtuelle FunktionenAbstrakte KlassenInterface-Design in C++Dynamic Casting & RTTIRückblick – Shape-Calculator3Konstruktoren & Destruktoren
StandardkonstruktorParametrisierter KonstruktorKopierkonstruktorMove-KonstruktorKonstruktor-InitialisierungslistenDelegierende KonstruktorenDestruktor im DetailDrei-/Fünf-/Null-RegelZusammenfassung – String-Klasse6Operatorüberladung
Einführung in die OperatorüberladungArithmetische OperatorüberladungVergleichsoperatorüberladungStream-OperatorenZuweisungsoperatorüberladungÜberladung der Operatoren [] und ()TypkonvertierungsoperatorenWiederholung – Matrix-Klasse9Templates
FunktionstemplatesKlassen-TemplatesTemplate-SpezialisierungVariadische TemplatesGrundlagen zu SFINAE und Type TraitsRückblick – Generischer ContainerÜbe selbstständig: Online-C++-Compiler