Educational and experimental materials.
Various projects to showcase of
- C features and language mechanics
- C++ features, mainly from modern C++11 onwards
- examples and referential implementations of selected design patterns in modern C++
- various toy projects
Most of the project were being created with CLion, which is my favourite IDE to create C/C++ projects, because of its stability, simplicity, completeness - bundles compiler and debugger and makes output from profiler and Valgrind memory checker easier to interpret - and cross-platform interoperability.
Concrete projects are listed below in no particular order. The purpose of each project is described by its name:
ReferenceToPointer
Forward_Class_Declaration_in_CPP_Error_Create_instance_of_incomplete_type
Header_guards_ifndef
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_multiple_inheritance_A_horrible_workaround
const_member_variable-static_global
animation-single_character_circular
Sharing_with_temporary_ownership_weak_ptr_Memory_leak
Linker_error_Undefined_reference_Different_definition_Fix_definition
Constructor_inheritance_The_Problem
Instance_ownership_Other_object_owns_the_instance_Instance_can_live_shorter_than_owner_Alternative_with_weak_ptr_member_variable
PolymorphicClone_ModernSolutionMultipleInheritance
An_Implementation_Helper_For_The_Curiously_Recurring_Template_Pattern-Adding_several_functionalities_with_CRTP-diamond_inheritance
Linkage_scope_and_initialization_for_local_static_variable
The_Curiously_Recurring_Template_Pattern_in_CPP-Eli_Bendersky
PIMPL_Idiom_Unique_pointer_before_and_after
Instance_ownership_Other_object_owns_the_instance_Instance_can_live_shorter_than_owner
Compilation_process
C++_OOP
Benchmark_std_endl_vs_newline
job_interview_preparation-c_language
Declaration_Definition
For_loops_with_signed_and_unsigned_counters-algorithm
UML_Relationships_CPP
LinkedListUniquePtr
MiniDatabase
Instance_ownership_Other_object_owns_the_instance_Instance_lives_longer_than_owner
Constructor_delegation_The_Solution_Multiple_Constructors_Refactoring
state_design_pattern
refactoring_mixin_class_from_inheritance_to_composition_by_LSP
weak_ptr_example
R_30_Take_smart_pointers_as_parameters_only_to_explicitly_express_lifetime_semantics_modernescpp
Shapes_Templated_factory_Smart_pointers
Forward_Class_Declaration_in_CPP_Error_Delete_incomplete_type
Forward_Class_Declaration_in_CPP_Error_Forward_declared_class_as_base_class
Forward_Class_Declaration_in_CPP
Namespaces_Splitting
The_Curiously_Recurring_Template_Pattern_in_CPP_Eli_Bendersky-Comparisons
Linker_error_Undefined_reference_Different_definition_Fix_declaration
What_the_CRTP_can_bring_to_your_code-Adding_Functionality
Instance_ownership_Nobody_owns_the_instance
Shapes_Templated_factory_Smart_pointers_CRTP
CPP-Visual_Studio_Projects-from_FRI_UNIZA
Parentheses_around_return_value_CPP14
unique_ptr_example
Combining_Static_and_Dynamic_Polymorphism_with_CPP_Mixin_classes-Part_1-The_Problem
Namespaces_Using_declaration
Type_Punning_aka_Aliasing_With_struct_TheCherno
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function
codewars
Instance_ownership_Ownership_of_instance_is_shared_among_multiple_owners_Alternative
UniquePtrCustomDeletersMoreExpressive
Instance_ownership_Other_object_owns_the_instance_Instance_can_live_shorter_than_owner_Alternative
Alignment_alignof_sizeof
PolymorphicClone-ClassicalSolution
PolymorphicClone_CovariantUniquePtr_SimpleHierarchy
set-find
Linkage_internal_multiple_static_functions_with_same_name
Value_of_nth_bit_in_number_algorithm
Linker_error_Undefined_reference_Different_definition
Endianness_Little_endian_Big_endian
CRTP_class
Covariance_Concrete_factory
Strict_Aliasing_Rule_example_4_Solution_Union
Header_guards_omitted
ObjectSlicing
Design_Patterns_CPP
CopyObjectWithUniquePtrMemberVarWithInheritance
Header_guards_With_pragma_once
Mixin_class_with_association_instead_of_inheritance
FunctionPointers
Shapes_Templated_factory_Smart_pointers_Refactoring_with_packages_and_namespaces
Covariance_Replacing_static_casts
Partial_Template_Specialization
Introduction_to_CPP_Variadic_Templates
decimal_to_binary_converter
Namespaces_Clash
An_Implementation_Helper_For_The_Curiously_Recurring_Template_Pattern-Getting_rid_of_static_cast
Member_variable_rodeo
Strict_Aliasing_Rule_example_1
Callback-Simple_Observer-Single_Receiver
An_Implementation_Helper_For_The_Curiously_Recurring_Template_Pattern_Adding_several_functionalities_with_CRTP-each_functionality_in_separate_CRTP_class
Instance_ownership_Ownership_of_instance_is_shared_among_multiple_owners
Type_Punning_aka_Aliasing
Namespaces_ADL_Argument_Dependent_Lookup
Streams
Type_Punning_aka_Aliasing_Solution_union
Namespace_Variable_initialization
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_multiple_inheritance_The_CPP03_solution
Implicit_Conversion_and_the_Explicit_Keyword_in_CPP_Implicit_conversion
CPP-Project_skeleton
PolymorphicClone_CovariantUniquePtr_SimpleHierarchy_CRTP
Stroustrup_Why_dont_we_have_virtual_constructors_Abstract_factory_Template_arguments
Breaking_external_linkage
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_deep_hierarchy_The_CPP11_solution
Namespaces_Aliasing
udemy-mastering_object_oriented_design_in_java-14-single_responsibility_principle-SRP-Refactored
ChangingUniquePtrDeletersAtRuntime
Linkage_internal_Static_functions
PolymorphicClone_CovariantUniquePtr_MultipleInheritance_CRTP_TemplateSpecialization
Partial_Template_Specialization_With_Common_Base_Class
Constructor_inheritance_CPP11_Solution
Constructor_delegation_The_Solution_Multiple_Constructors
Linkage_external_extern
weak_ptr_example_Alternative
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP
Forward_Class_Declaration_in_CPP_Error_Using_methods_or_fields_of_incomplete_type
Linkage_internal_static_member_variable
PIMPL_Idiom_Unique_pointer_Even_more_expressive_before_and_after
initializing_member_variable_in_abstract_class_from_its_derived_class
Strict_Aliasing_Rule_example_3
VariadicFunctions
Exceptions
shared_ptr_cyclic_dependency
Shapes_Templated_factory
Header_guards_multiple_includes_of_same_header
CRTP-Plugging_a_generic_functionality_over_your_type
Linkage_internal
CPP_Polymorphic_cloning_and_the_CRTP_The_Problem
Linker_error_Undefined_reference_No_definition
PolymorphicClone_CovariantUniquePtr_SingleInheritance_DeepHierarchy_CRTP_TemplateSpecialization
Sharing_with_temporary_ownership_weak_ptr_shared_ptr_example
Linkage_Custom_namespace
Bitwise_and_logical_operators
rename_photos_to_unique_format
Combining_Static_and_Dynamic_Polymorphism_with_CPP_Mixin_classes_Part_3_Polymorphic_mixin_class
default_values_for_member_variables
Sharing_with_temporary_ownership_weak_ptr_example
Namespaces_Using_directive
PolymorphicClone_CovariantUniquePtr_MultipleInheritance_CRTP
Convert_number_to_binary-algorithm
Breaking_external_linkage_Fix_with_classes_or_structs
const_member_variable
Anonymous_namespace
Implicit_Conversion_and_the_Explicit_Keyword_in_CPP_Explicit_keyword
Translation_unit
Linker_error_Undefined_reference_No_definition_Fix
CopyObjectWithUniquePtrMemberVar
shared_ptr_example
STL
CPP_11_new_features
OperatorOverloading
Constructor_delegation_The_Problem_Basic_Constructor
Shapes_Templated_factory_CRTP
Forward_Class_Declaration_in_CPP_Error_Define_functions_that_use_incomplete_type_by_value
Reverse_bytes_in_number_algorithm
The_Curiously_Recurring_Template_Pattern_in_CPP_Eli_Bendersky_TreeNodeVisitor_modification
Smart_Pointers_Playground
Stroustrup_Why_dont_we_have_virtual_constructors_Abstract_factory_Smart_pointers
shared_ptr_cyclic_dependency_solution
Namespaces_Variables_with_same_name_different_type
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_deep_hierarchy_The_CPP11_solution-Revision
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_multiple_inheritance_The_CPP11_solution
PolymorphicClone_CovariantUniquePtr_MultipleInheritance_DeepHierarchy_DiamondProblem_CRTP_PartialTemplateSpecialization
Design_patterns-Adapter-Motivation
Templates
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_multiple_inheritance_Constructor_forwarding_problem_A horrible workaround
SharedWeakPtrsCyclicDependency
The_cost_of_dynamic_virtual_calls_vs_static_CRTP_dispatch_in_CPP_Eli_Bendersky
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_multiple_inheritance_Constructor_forwarding_problem
Namespace_Standard_namespace_std
Header_guards_two_headers_with_same_name
Alignment_Pragma_pack_Attribute_packed_Alignof_Sizeof_Alignas
Constructor_inheritance
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_multiple_inheritance_The_CPP11_solution_Example
Covariance_Replacing_static_casts_with_unique_ptr
Safe_Typecasting_CPP
Linkage_internal_extern_and_static_function_with_same_name
Combining_Static_and_Dynamic_Polymorphism_with_CPP_Mixin_classes_Part_2-Mixin_class
const_member_variable-static
PolymorphicClone_ClassicalSolutionMultipleInheritance
Namespaces_Local_nested_scopes
Stroustrup_Why_dont_we_have_virtual_constructors_Abstract_factory
UndefinedBehavior
Tetris
The_Curiously_Recurring_Template_Pattern_in_CPP_Eli_Bendersky-TreeNodeVisitor
CPP_Polymorphic_cloning_and_the_CRTP_Virtual_clone_function_through_CRTP_in_multiple_inheritance
Shapes_Templated_factory_Refactoring_with_packages_and_namespaces
Header_guards_Without_pragma_once
CPP_Memory_layout_Variable_memory_locations
UniquePtrCustomDeleter
CRTP_Definition
Struct_with_and_without_typedef
External_linkage_usage
Namespaces_Validity_of_using_keyword_as_declaration_and_directive
Type_Punning_aka_Aliasing_TheCherno
Design_patterns-Adapter-implemented_as_Object_Adapter
Forward_Class_Declaration_in_CPP_Error_Object_Member_Variable_in_Class
What_the_CRTP_can_bring_to_your_code_Static_Interfaces
PolymorphicClone_ModernSolution
C_style_cast_in_CPP_broken
mixin_class_exercise
CPP_Memory_layout_Inheritance
Constructor_delegation_The_Problem_Multiple_Constructors
Mixin_class-Plugging_a_generic_functionality_over_your_type
PolymorphicClone-TheProblem
Namespaces_CPP
Stroustrup_Why_dont_we_have_virtual_constructors_Abstract_factory_Refactoring
PIMPL_Idiom_Raw_pointer_before_and_after
Instance_ownership_Other_object_owns_the_instance_Instance_can_live_shorter_than_owner_Weak_ptr_in_vector
Linker_error_Undefined_reference_Didnt_link_object_file
Namespaces_Scopes
udemy-mastering_object_oriented_design_in_java-14-single_responsibility_principle-SRP
Sharing_with_temporary_ownership_weak_ptr_Memory_clean
Strict_Aliasing_Rule_example_2
Static_member_variable_rodeo