De programmeertaal C++ Geschiedenis Geschreven in C++ Voor- en nadelen Voorbeeld in C en C++ Compile, link en run Voorbeeld: beruchte fout in C, oplossing in C++ Aanvullende bibliotheken Voorbeeld: wxWidgets op Raspbian
Geschiedenis 1979: Bjarne Stroustrup verzint “C with classes” Pre-processor voor C compilers Object-georienteerde toevoegingen 1983: Naam “C++” Jaren ‘90: Standard Template Library (STL) Boost 1998: Standaard ISO/IEC 14882 = “c++98” Inmiddels ook c++03, c++11, c++14, c++17, etc….
Geschreven in C++
Voor- en nadelen C++ Gecompileerd, efficiente code Aanpassingen standaard backwards compatible Compiler op vrijwel ieder systeem Basaal Géén standaard toegang tot GUI of database Meer regels om hetzelfde te bereiken Keuzevrijheid om C-stijl, procedureel, object georiënteerd of functioneel te programmeren Veel vrijheid om fouten te maken Meeste implementaties geen “garbage collection”
C en C++ Hello world in C Hello world in C++ String en cout onderdeel van de STL #include <stdio.h> main() { char msg[] = "Hello World"; printf( "%s", msg ); }; #include <iostream> #include <string> int main() { std::string msg = "Hello World"; std::cout << msg; };
hello.cpp + iostream.h + string.h Compile, link en run > g++ hello.cpp -o hello > ./hello Hello World Compile Link hello.cpp + iostream.h + string.h hello.o iostream.cpp iostream.o hello string.cpp string.o
Beruchte foutbron C Buffer overflow in C Geen buffer overflow in C++ character array msg precies groot genoeg character array msg te klein voor uitroepteken. Geen buffer overflow in C++ string maakt automatisch ruimte voor uitroepteken #include <stdio.h> #include <string.h> main() { char msg[] = "Hello World"; printf( "%s", msg ); strcpy( msg, "Hello World!" ); }; #include <iostream> #include <string> int main() { std::string msg = "Hello World"; std::cout << msg; msg = "Hello world!"; }
Bibliotheken Microsoft Foundation Classes (MFC) MS Visual C++ (VC) MS Dot Net (.net) Borland Visual Component Library (VCL) Qt wxWidgets Duizenden gespecialiseerde libs...
wxWidgets voorbeeld
Naar Raspbian
Compile en link > cd wxtunnel > g++ -c `wx-config –cxxflags` *.cpp > g++ `wx-config –libs` *.o -o wxtunnel > ./wxtunnel