C++ Build & Kompilierung
Teil des Abschnitts Objektorientierte Programmierung der C++-Journey von Coddy — Lektion 2 von 104.
C++ wird in drei Phasen erstellt: Präprozessierung, Kompilierung und Linking.
1. Vorverarbeitung — #include-Direktiven werden aufgelöst, wobei Header-Inhalte in Quelldateien kopiert werden
#include <iostream> // System-Header
#include "my_file.h" // Eigener Header2. Kompilierung — Jede .cpp-Datei wird unabhängig in eine Objektdatei (.o) kompiliert
// math_utils.cpp wird zu math_utils.o kompiliert
// main.cpp wird zu main.o kompiliert3. Linken — Objektdateien werden zur finalen ausführbaren Datei kombiniert
// math_utils.o + main.o → program.exeDie Header-Datei deklariert, was existiert (Prototypen). Die .cpp-Datei liefert die tatsächliche Implementierung. Der Linker verbindet Aufrufe in main.cpp mit Implementierungen in anderen .cpp-Dateien.
Aufgabe
MittelDie Header-Datei math_utils.h deklariert zwei Funktionen. Implementiere diese in math_utils.cpp:
doubleValue(int x)— gibtx * 2zurücksquare(int x)— gibtx * xzurück
Stelle sicher, dass du die Header-Datei in deiner .cpp-Datei einbindest.
Spickzettel
C++ wird in drei Phasen erstellt: Präprozessierung, Kompilierung und Linking.
Präprozessierung — #include-Direktiven werden aufgelöst, wobei Header-Inhalte in Quelldateien kopiert werden:
#include <iostream> // System-Header
#include "my_file.h" // Ihr eigener HeaderKompilierung — Jede .cpp-Datei wird unabhängig in eine Objektdatei (.o) kompiliert:
// math_utils.cpp wird zu math_utils.o kompiliert
// main.cpp wird zu main.o kompiliertLinking — Objektdateien werden zur endgültigen ausführbaren Datei kombiniert:
// math_utils.o + main.o → program.exeDie Header-Datei deklariert, was existiert (Prototypen). Die .cpp-Datei liefert die tatsächliche Implementierung. Der Linker verbindet Aufrufe in main.cpp mit Implementierungen in anderen .cpp-Dateien.
Probier es selbst
#include <iostream>
#include "math_utils.h"
int main() {
int num;
std::cin >> num;
std::cout << "Double: " << doubleValue(num) << std::endl;
std::cout << "Square: " << square(num) << std::endl;
std::cout << "Build successful" << 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