Παραδείγματα κώδικα και άλλα
- Παράδειγμα χρήσης δείκτη, διεύθυνσης μεταβλητής και αποαναφοράς (dereference) του δείκτη pointers1.cpp
- Δείκτες σε void pointers2.cpp
- Δέσμευση και αποδέσμευση μνήμης στη C dynamic1.cpp
- Στατικοί και δυναμικοί πίνακες στη C dynamic2.cpp
- Γιατί η δεικτοδότηση ξεκινά από το μηδέν στους πίνακες zero_indexing.cpp
- Δέσμευση και αποδέσμευση μνήμης στη C++ dynamic3.cpp
- Πρόσβαση στα στοιχεία ενός πίνακα με πολλούς τρόπους array.cpp
- Δισδιάστατοι πίνακες
- Δισδιάστατος πίνακας δεδομένων διαστάσεων ως παράμετρος πίνακα matrix1.cpp
- Δισδιάστατος πίνακας δυναμικών διαστάσεων ως παράμετρος πίνακα matrix2a.cpp, matrix2b.cpp
- Κλάση δυναμικού δισδιάστατου πίνακα με υπερφόρτωση του τελεστή [] matrix.cpp - χρήσιμο για εύκολο χειρισμό δυναμικών δισδιάστατων πινάκων σε προγράμματα
- Αναφορές (references) references.cpp
- Κλήση με τιμή (call by value), κλήση με αναφορά (call by reference) calls.cpp
- Απαριθμήσεις - enumerations
- Παράδειγμα με struct struct_simple_example.cpp και ισοδύναμος κώδικας με κλάση (μόνο με δημόσια μέλη) class_simple_example.cpp
- Προ-επεξεργαστής preprocessor.cpp
- Διάσπαση κώδικα σε header και source αρχεία Rectangle.h, Rectangle.cpp, Main.cpp
- Ενθυλάκωση, ορισμός ιδιωτικών (private) μελών, κατασκευαστές (constructors), καταστροφέας (destructor), προκαθορισμένος κατασκευαστής Main.cpp
- Η χρήση του const
- const1.cpp const σε αναφορές βασικών τύπων δεδομένων
- const2.cpp const σε αναφορές αντικειμένων
- const3.cpp const σε δείκτες
- const4.cpp const σε δηλώσεις μεταβλητών αντικειμένων και σε συναρτήσεις μέλη κλάσεων
- const5.cpp const σε αναφορές που επιστρέφουν συναρτήσεις μέλη
- example_const.cpp παράδειγμα με 7 διαφορερικές χρήσεις του const
- Κατασκευαστής με default τιμή παραμέτρου, το παράδειγμα μιας στοίβας Stack.cpp
- Κατασευαστής αντιγραφής Copy constructor
- copy_constructor_example.cpp απλό παράδειγμα με copy constructor
- Παραδείγμα με ρηχή αντιγραφή και βαθιά αντιγραφή (shallow vs deep copy)
- copy_constructor1.cpp shallow copy
- copy_constructor2.cpp deep copy και copy assignment με deep copy
- copy_constructor3.cpp παράδειγμα που το shallow copy είναι αρκετό
- copy_constructor4.cpp παραλλαγή του προηγούμενου παραδείγματος στο οποίο γίνεται δυναμική δέσμευση μνήμης και απαιτείται deep copy
- “Αόρατες” αντιγραφές κατά την κλήση συναρτήσεων copies.cpp
- Λίστα αρχικοποίησης (initializer list)
- Η χρήση του static στη C
- Στατικά μέλη κλάσεων
- static_example1.cpp
- static_example2.cpp (πρόσβαση με static συνάρτηση στα ιδιωτικά μέλη κλάσης)
- Φίλες (friend) συναρτήσεις και φίλες κλάσεις:
- friend_function1.cpp
- friend_class1.cpp
- Ένα ακόμα παράδειγμα χρήσης του friend:
- Υπερφόρτωση τελεστών (δυαδικός τελεστής +)
- Υπερφόρτωση τελεστή + με χρήση καθολικής συνάρτησης operator_overload1.cpp
- Υπερφόρτωση τελεστή + με χρήση συνάρτησης μέλους operator_overload2.cpp
- Υπερφόρτωση τελεστή + με χρήση friend συνάρτησης operator_overload3.cpp
- Υπερφόρτωση τελεστών (δυαδικός τελεστής <, δυαδικός τελεστής ==)
- Υπερφόρτωση τελεστή « (inserter) και τελεστή » (extractor)
- io_operator_overload1.cpp με φίλες συναρτήσεις
- io_operator_overload2.cpp με βοηθητικές συναρτήσεις
- Μετατροπή αντικειμένου σε λεκτικό person_to_string.cpp
- Παράδειγμα υπερφόρτωσης τελεστών (+, «, ») και μετατροπής αντικειμένου σε λεκτικό για την κλάση myTime my_time.cpp
- Χώροι ονομάτων (namespaces) namespaces1.cpp
- Εμφωλιασμός κλάσης σε κλάση (nesting) nested1.cpp
- Κληρονομικότητα
- inheritance1.cpp
- inheritance2.cpp keyword protected
- inheritance3.cpp overload και override
- overload_vs_override.cpp
- inheritance4.cpp κλήση constructors και destructors
- inheritance5.cpp overload και απόκρυψη συνάρτησης γονέα
- Το keyword override
- Το keyword final
- final1.cpp final συνάρτηση μέλος κλάσης
- final2.cpp final κλάση
- final_keyword.cpp
- Παράδειγμα κληρονομικότητας (σχέση ISA) Person.h, Person.cpp, Student.h, Main.cpp
- Παράδειγμα σύνθεσης - composition (σχέση HAS) composition.cpp
- Παράδειγμα σύνθεσης (strong vs weak containment)
- composition_strong_weak.cpp χρήση pointer για το weak containment
- composition_strong_weak2.cpp χρήση reference για το weak containment
- Upcasting (μετατροπή μιας αναφοράς ή ενός δείκτη μιας κληρονομούμενης κλάσης στην κλάση γονέα) / Downcasting (μετατροπή μιας αναφοράς ή ενός δείκτη της κλάσης γονέα σε κληρονομούμενη κλάση, το downcasting δεν επιτρέπεται αν δεν υπάρχει explicit type cast)
- Static binding vs dynamic binding (virtual συναρτήσεις)
- Virtual destructors
- Παραδείγματα πολυμορφικής ιεραρχίας, pure virtual functions, abstract classes
- Casting
- const_cast1.cpp, const_cast2.cpp
- static_cast1.cpp ο συνηθισμένος τρόπος μετατροπής.
- dynamic_cast1.cpp το dynamic_cast χρησιμοποιείται για μετατροπή από μια βασική κλάση σε μια παραγόμενη κλάση (επιστρέφει nullptr σε αποτυχία)
- Inline συναρτήσεις (απλές και συναρτήσεις μέλη)
- inline1.cpp
- inline2.cpp ο μεταγλωττιστής ορίζει αυτόματα ως inline συναρτήσεις που ορίζονται εντός της κλάσης
- Πίνακας δεικτών προς αντικείμενα arrays_of_pointers.cpp
- Πολλαπλή κληρονομικότητα (multiple inheritance)
- multiple_inheritance1.cpp
- multiple_inheritance2.cpp επίλυση συγκρούσεων σε μέλη δεδομένων και σε μέλη συναρτήσεις
- virtual_inheritance1.cpp
- virtual_inheritance2.cpp
- std::to_string to_string.cpp
- Εξαιρέσεις (exceptions)
- exception1.c asserts
- exception2.cpp
- exception3.cpp
- exception4.cpp
- exception5.cpp
- stl_container_out_of_range.cpp σύλληψη εξαίρεσης για αναφορά εκτός των ορίων του vector
- Πρότυπα (templates)
- Παράδειγμα class template
- stack.hpp
- reverse_string.cpp χρήση της στοίβας για αντιστροφή συμβολοσειράς
- postfix_evaluation.cpp χρήση της στοίβας για υπολογισμό postfix έκφρασης ψηφίων και τελεστών +,-,*,/
- Smart pointers
- Implicit conversions με βάση τους constructors μιας κλάσης και η χρήση του explicit
- Xρονομέτρηση κώδικα με το chrono
- RTTI (RunTime Type Information)
- rtti1.cpp type introspection
- Δημιουργία τυχαίων τιμών
- Χειρισμός αρχείων
- Χαρακτηριστικά συναρτησιακού προγραμματισμού στη C++
- Function Pointers
- Functors (function objects)
- functor1.cpp
- functor2.cpp
- functor3.cpp
- functor4.cpp
- functor5.cpp
- generator1.cpp
- generator2.cpp παραγωγή τυχαίων αριθμών
- unary_functor.cpp unary functor
- predicate.cpp κατηγόρημα
- remove_if_functor.cpp
- Λάμδα - ανώνυμες συναρτήσεις (lambdas - closures))
- lambda1.cpp
- lambda2.cpp
- lambda3.cpp
- lambda4.cpp δήλωση lambda με διαφορετικούς τρόπους
- Function pointers vs functors vs lambdas
- map - filter - reduce
- Ακρίβεια πράξεων
- floating points floating_point.cpp
- floating1.cpp
- floating2.cpp
- Όρια τύπων δεδομένων limits.cpp
- Χειρισμός χρηματικών ποσών μέσω ειδικής κλάσης money.hpp, main.cpp
- Λεκτικά (C-strings,std::string, std::string_view)
- Αναδρομή
- Μετατροπή από πεζά σε κεφαλαία
Βέλτιστες πρακτικές στη C++
- Const correctness http://www.possibility.com/Cpp/const.html
- Rule of three (αν μια κλάση ορίζει destructor, τότε θα πρέπει να ορίζει copy constructor και copy assignment operator)
- Rule of five (αν μια κλάση ορίζει destructor, τότε θα πρέπει να ορίζει copy constructor, copy assignment operator, move constructor και move assignment operator)
- Rule of zero (οι κλάσεις θα πρέπει να γράφονται με τέτοιο τρόπο έτσι ώστε να μην χρειάζεται destructor, copy constructor, copy assignment operator, move constructor, move assignment operator, αλλά να χρησιμοποιούνται smart pointers και containers της STL για την αυτόματη διαχείριση των πόρων)
STL
- Standard Template Library (περιέκτες, υποδοχείς=containers)
- Περιέκτες ακολουθίας
- std::array
- std::vector
- stl_vector1.cpp
- stl_vector2.cpp
- stl_vector3.cpp
- stl_vector4.cpp vector και sort
- stl_vector5.cpp vector και iterators
- stl_vector_common_mistake.cpp
- std::list
- std::forward_list
- stl_forward_list.cpp push_front, insert_after, sort, reverse, remove_if
- std::deque
- Περιέκτες συσχέτισης
- std::set
- std::multiset
- std::map
- std::multimap
- std::unordered_set
- std::unordered_multiset
- std::unordered_map
- std::unordered_multimap
- Προσαρμογείς περιεκτών (container adaptors)
- std::stack
- std:queue
- std::priority_queue
- Περιέκτες ακολουθίας
- Standard Template Library (επαναλήπτες=iterators)
- random access iterator stl_random_iterator.cpp
- bidirectional iterator stl_bidirectional_iterator.cpp
- forward iterator stl_forward_iterator.cpp
- Insertion iterators (inserters)
- stream iterators
- Χρήσιμες συναρτήσεις για iterators
- advance.cpp μετακίνηση iterator πολλές θέσεις μπροστά ή πίσω.
- distance.cpp αφαίρεση iterators.
- Standard Template Library (αλγόριθμοι)
- stl_algorithm1.cpp std::reverse
- stl_algorithm2.cpp std::equal
- stl_algorithm3.cpp std::fill, std::copy, std::count, std::count_if, std::min_element, std::max_element, std::minmax_element, std::accumulate, std::shuffle, std::for_each, std::transform
- stl_algorithm4.cpp std::find, std::find_if, std::find_if_not, std::sort, std::binary_search, std::all_of, std::any_of, std::none_of
- stl_algorithm5.cpp non modifying STL algorithms (for_each, find, find_if, find_end, find_first_of, adjacent_find, count, count_if, mismatch, equal, search, search_n)
- stl_algorithm7.cpp sort + search STL algorithms (random_shuffle, sort, stable_partition, lower_bound, upper_bound, equal_range, binary_search)
- stl_algorithm9.cpp heap (make_heap, pop_heap, push_heap, is_heap, sort_heap)
- stl_algorithm10.cpp παράδειγμα με αντικείμενα και STL
- stl_algorithm11.cpp δημιουργία 1.000 ακεραίων τιμών στο διάστημα [0,1.000.000], εμφάνιση των 10 μεγαλύτερων άρτιων τιμών
- stl_algorithm12.cpp εύρεση μέγιστου και ελάχιστου στοιχείου ενός vector με διάφορους τρόπους
- Ζεύγη (pairs), πλειάδες (tuples)
- pair.cpp
- tuple1.cpp
- tuple2.cpp
- tuple3.cpp επιστροφή δύο αποτελεσμάτων από μια συνάρτηση με 10 διαφορετικούς τρόπους
- Ειπλέον παραδείγματα με STL από το TopCoder
- C vs C++ παράδειγμα κώδικα (ελάχιστο, μέγιστο, αναζήτηση, ταξινόμηση) σε C και ισοδύναμου κώδικα σε C++
- max_search_sort.c με insertion sort
- max_search_qsort.c με χρήση της quicksort για την ταξινόμηση
- max_search_sort.cpp STL!!!
- max_search_sort.c με insertion sort
Regular Expressions
Παραδείγματα κώδικα με regular expressions στη C++
Σχέσεις αντικειμένων - UML - αρχές καλής σχεδίασης
- Σχέσεις μεταξύ αντικειμένων
- IS_A (inheritance=κληρονομικότητα) isa.cpp
- HAS-A (composition=σύνθεση) composition1.cpp
- HAS-A (composition with pointer = σύνθεση με δείκτη) composition2.cpp
- HAS-A (aggregation with reference = συνάθροιση με αναφορά) aggregation1.cpp
- HAS_A (aggregation with pointer = συνάθροιση με δείκτη) aggregation2.cpp
- Παραδείγματα κώδικα και UML
- Μια κλάση: η κλάση account που αφορά έναν λογαριασμό τράπεζας
- Δύο κλάσεις και one-way association μεταξύ τους: employee και company (η επιχείρηση μπορεί να έχει πολλούς υπαλλήλους - δίνεται η δυνατότητα μετάβασης από την επιχείρηση στους υπαλλήλους της)
- Δύο κλάσεις και two-way association μεταξύ τους: researcher και paper (ένας ερευνητής μπορεί να έχει δημοσιεύσει πολλά άρθρα και ένα άρθρο μπορεί να έχει συγγραφεί από πολλούς ερευνητές - δίνεται η δυνατότητα μετάβασης από τον ερευνητή στα άρθρα του καθώς και από τα άρθρα στους ερευνητές που τα έχουν συγγράψει)
- Σύζευξη (coupling)
- tight_coupling1.cpp ισχυρή σύζευξη :(
- tight_coupling2.cpp ισχυρή σύζευξη :(
- loose_coupling.cpp χαλαρή σύζευξη :)
- Παράδειγμα κυκλικής εξάρτησης (circular dependency) και επίλυση με forward declaration
- Χωρίς διαμέριση κώδικα: single_file.cpp
- Με διαμέριση κώδικα:
- Anemic classes (anti-pattern)
- anemic_class.cpp δημιουργία αναιμικής κλάσης
- struct_only.cpp λύση του προβλήματος με ένα απλό struct
Design Patterns
- Creational
- Factory
- Builder
- Singleton
- Structural
- Adapter: Μετατροπή του interface (διεπαφής) μιας κλάσης σε ένα άλλο interface που οι πελάτες της κλάσης αναμένουν. Επιτρέπει σε κλάσεις που δεν θα μπορούσαν να λειτουργήσουν μαζί λόγω μη συμβατών interfaces, να λειτουργήσουν.
- adapter.cpp Στο παράδειγμα υπάρχουν 2 κλάσεις, η my_class1 και η my_class2, με μη συμβατά interfaces με αυτό που περιμένει η κλάση tester.
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Adapter: Μετατροπή του interface (διεπαφής) μιας κλάσης σε ένα άλλο interface που οι πελάτες της κλάσης αναμένουν. Επιτρέπει σε κλάσεις που δεν θα μπορούσαν να λειτουργήσουν μαζί λόγω μη συμβατών interfaces, να λειτουργήσουν.
- Behavioral
- Chain of responsibility
- Command
- Mediator
- Observer
- State
- Strategy
Βασικές αρχές OOP
- Αφαίρεση (abstraction)
- Ενθυλάκωση (encapsulation)
- Πολυμορφισμός (polymorphism)
- Κληρονομικότητα (inheritance)
Καλές αρχές λογισμικού
S.O.L.I.D. principles
- Single Responsibility Principle (SRP). Κάθε μονάδα λογισμικού (π.χ. συναρτήσεις, κλάσεις) πρέπει να έχει μια μόνο καλά ορισμένη υπευθυνότητα.
- https://hackernoon.com/you-dont-understand-the-single-responsibility-principle-abfdd005b137
- Παράδειγμα εφαρμογής του Single Responsibility Principle (SRP):
- no_srp.cpp παραβίαση της αρχής SRP
- srp.cpp SRP
- Παράδειγμα εφαρμογής του Single Responsibility Principle (SRP):
- https://hackernoon.com/you-dont-understand-the-single-responsibility-principle-abfdd005b137
- Open-Closed Principle (OCP). Κάθε μονάδα λογισμικού (π.χ. συναρτήσεις, κλάσεις) πρέπει να είναι ανοικτή για επέκταση (να μπορούν να προστίθενται νέες δυνατότητες) και κλειστή για αλλαγές (ο κώδικας που έχει ήδη γραφεί να μην χρειάζεται να τροποποιηθεί προκειμένου να ενσωματώσει τις επεκτάσεις).
- https://hackernoon.com/the-open-closed-principle-c3dc45419784
- Παράδειγμα εφαρμογής του Open Closed Principle:
- no_open_closed_principle1.cpp παραβίαση της αρχής OCP
- no_open_closed_principle2.cpp παραβίαση της αρχής OCP
- open_closed_principle1.cpp OCP
- open_closed_principle2.cpp OCP
- Liskov Substitution Principle (LSP). Τα αντικείμενα ενός προγράμματος θα πρέπει να μπορούν να αντικατασταθούν από στιγμιότυπα υποκλάσεων χωρίς να παραβιάζεται η ορθότητα του προγράμματος. Οι συναρτήσεις που χρησιμοποιούν δείκτες ή αναφορές σε βασικές κλάσεις (Base) θα πρέπει να είναι σε θέση να χρησιμοποιούν αντικείμενα της παραγόμενης κλάσης (Derived) χωρίς να γνωρίζουν ότι έχουν να κάνουν με τέτοια αντικείμενα.
- https://hackernoon.com/liskov-substitution-principle-a982551d584a
- Παράδειγμα εφαρμογής του Liskov Substitution Principle (LSP):
- Interface Segregation Principle (ISP). Κανείς “πελάτης” ενός interface δεν θα πρέπει να εξαναγκάζεται να εξαρτάται από μεθόδους που δεν χρησιμοποιεί.
- https://hackernoon.com/interface-segregation-principle-bdf3f94f1d11
- Παράδειγμα εφαρμογής Interface Segregation Principle (ISP):
- Dependency Inversion Principle (DIP). Τα υψηλού επιπέδου τμήματα λογισμικού δεν θα πρέπει να στηρίζονται σε χαμηλού επιπέδου λεπτομέρειες. Τα τμήματα λογισμικού σε όλα τα επίπεδα ιεραρχίας θα πρέπει να στηρίζονται σε αφαιρέσεις.
- https://hackernoon.com/dependency-inversion-principle-e402e5b69e70
- Παράδειγμα εφαρμογής του Dependency Inversion Principle (DIP):
Μερικές ακόμα καλές αρχές λογισμικού
- DRY (Don’t Repeat Yourself = Μην επαναλαμβάνεις τον εαυτό σου). Η επανάληψη του ίδιου κώδικα σε διάφορα σημεία προκαλεί προβλήματα στη συντήρηση του λογισμικού.
- YAGNI (You Ain’t Gonna Need It = Δεν πρόκειται να το χρειαστείς). Θα πρέπει να υλοποιούνται οι απαραίτητες λειτουργίες και μόνο αυτές.
- Law of Demeter (αρχή της ελάχιστης δυνατής γνώσης).
- Information Hiding (απόκρυψη πληροφορίας). Ένα τμήμα κώδικα Α που καλεί ένα τμήμα κώδικα Β δεν θα πρέπει να “γνωρίζει” εσωτερικά θέματα της λειτουργίας του Β.
- PLoP (Principle of Least Privilege = Αρχή του ελάχιστου δικαιώματος) κάθε τμήμα θα πρέπει να μπορεί να προσπελάσει μόνο πληροφορίες και πόρους που απαιτούνται για να φέρει εις πέρας το ρόλο που οφείλει να επιτελεί και τίποτα περισσότερο.
TDD με τη βιβλιοθήκη Catch2
- TDD (Test Driven Development) με το catch2
Η βιβλιοθήκη fmt για εύκολη μορφοποίηση εξόδου (python-like)
Static dispatch (ealry binding) vs. dynamic dispatch (late binding)
Topics: vtables, vpointers
Σημειώσεις - Συγγράμματα
- The C++ Programming Language (4th Edition)
- Η γλώσσα προγραμματισμού C++ (4η αμερικανική έκδοση)
- C++ Notes for Professionals book
- Δομές δεδομένων και αλγόριθμοι με τη C++, Γκόγκος Χρήστος
Παρουσιάσεις
- Modern C++ Object-Oriented Programming - Margit ANTAL 2018
- Programming in C++ — The C++ Language, Libraries, Tools, and Other Topics by Michael Adams, Department of Electrical and Computer Engineering University of Victoria
- C++ for C programmers - Duncan Mac-Vicar P.
Ενδιαφέρουσες σελίδες
- Παρακολούθηση εκτέλεσης κώδικα http://pythontutor.com/cpp.html
- https://isocpp.org/get-started
- https://isocpp.org/std/status
Online C++ compilers
- wandbox.org
- compiler explorer
- coliru
- C++ shell
- repl.it
- onlinegdb
- techiedelight
- rextester - compile c++ gcc online
Εξάσκηση στη C++
- https://exercism.io
- https://leetcode.com/
- https://open.kattis.com/
- https://github.com/LegalizeAdulthood/cpp-koans
Coding styles
- Google C++ Style Guide
- C++ Coding Standards
- Software Engineering Institute CERT C++ Coding Standard
- https://www.cs.northwestern.edu/academics/courses/211/html/c++-style.html
C++ Guidelines
- C++ Core Guidelines
- GSL: Guidelines Support Library
Static code analysis
Test Driven Development
UML (Unified Modeling Language)
- Πηγές
- Λογισμικά για σχεδίαση UML
Βιβλιοθήκες
- Catch2 (A modern, C++-native, header-only, test framework for unit-tests, TDD and BDD …)
- fmt (Small, safe and fast formatting library)
- folly (An open-source C++ library developed and used at Facebook)
Λογισμικά - εργαλεία
IDEs (Integrated Development Environments)
Visual Studio Community Edition
CLION
-
ΒΗΜΑΤΑ ΕΓΚΑΤΑΣΤΑΣΗΣ:
- Μετάβαση στη σελίδα https://www.jetbrains.com/community/education/ (Jetbrains.com -> Support -> Education)
- Κλικ στο “Apply for Free Student Pack”
- Ανάγνωση οδηγιών και κλικ στο “Apply Now”
- Προσθήκη στοιχείων: Apply with: UNIVERSITY EMAIL ADDRESS Status: I’m a student Level of study: Undergraduate Is Computer Science or Engineering your major field of study?: YES Graduation date: Διαλέγουμε μία ημερομηνία, αρκεί να είναι μετά από τουλάχιστον ένα έτος από τη σημερινή ημερομηνία και στην οποία εξακολουθούμε να διατηρούμε τη φοιτητική ιδιότητα. Email address: Δηλώνουμε το email τύπου xyz0012345@uoi.gr που μας αντιστοιχεί. Αποδοχή: I have read and I accept the JetBrains Account Agreement
- Επιβεβαίωση μέσω email για το εκπαιδευτικό πακέτο, αποδοχή όρων χρήσης
- Δημιουργία λογαριασμού με το email που δηλώσαμε
- Κατεβάζουμε τα προγράμματα που θέλουμε (πχ. Clion)
- Εγκατάσταση προγράμματος
- Κατά την εκκίνηση κάνουμε σύνδεση με τον λογαριασμό που φτιάξαμε στο βήμα 6, ώστε να αναγνωρίσει την άδεια που διαθέτουμε.
Τα παραπάνω βήματα εγκατάστασης έχουν γραφεί από τον φοιτητή του τμήματος και βοηθό διδασκαλίας (2019-2020), Σπύρο Στραβοράβδη.
Eclipse
Qt Creator
Netbeans
Codeblocks
Codelite
Geany
DevC++
Μεταγλωττιστές για τη C++
- gcc https://gcc.gnu.org/
- http://tdm-gcc.tdragon.net/ για Windows
- http://www.mingw.org/ για Windows
- clang http://clang.llvm.org/get_started.html
- Microsoft C++ compiler
- Intel C++ compiler
- Embarcadero C++ compiler
Editors
Visual Studio Code
- To VSCode στα Windows μπορεί να λειτουργήσει μεταξύ άλλων:
- είτε με το μεταγλωττιστή C/C++ gcc - Οδηγίες Using GCC with MinGW
- είτε με το μεταγλωττιστή C/C++ της Microsoft - Οδηγίες: Configure VS Code for Microsoft C++
- Visual Studio Code by Microsoft
-
Extensions (ms-vscode.cpptools, vadimcn.vscode-lldb, formulahendry.code-runner)
# Ctrl + P (quick open) ext install ms-vscode.cpptools ext install vadimcn.vscode-lldb ext install formulahendry.code-runner # Ctrl + , (settings dialog) Extensions > Run Code configuration Here Run in Terminal: enable Save All Files Before Run: enable Clear Previous Output: enable Ctrl + Alt + N => compiles and executes current file
-
Άλλοι editors
GIT + GITHUB
Περιβάλλον Linux μέσα από Windows
- How to install Linux on Windows with WSL
- VirtualBox + Linux Distribution (Ubuntu, XUbuntu, Mint, Suse, Debian, …)
- Vagrant
- Docker
- Cygwin
Java
Τεκμηρίωση γλώσσας C++ και STL
- https://devdocs.io/ και με δυνατότητα για offline χρήση
- zeal για offline χρήση
- https://en.cppreference.com/w/
- https://www.cplusplus.com/reference/