C++ Tutorial Index

C++ Tutorial C++ History C++ Installation C++ First Program C++ cin and cout C++ Data type C++ Variable C++ operator C++ Keywords

C++ Control Statements

C++ If C++ Nested if C++ If-else C++ If-else-if C++ Switch C++ Break C++ Continue C++ Goto C++ For loop C++ While loop C++ Do while loop

C++ Functions

C++ Call by Value C++ Call by Reference C++ Recursion Function C++ Inline function C++ Friend function

C++ Arrays

Single dimension array Two dimension array

C++ Strings

C++ Strings

C++ Inheritance

C++ Inheritance Single level Inheritance Multilevel Inheritance Multiple Inheritance Hierarchical Inheritance Hybrid Inheritance

C++ Polymorphism

C++ Polymorphism C++ Overloading C++ Overriding C++ Virtual Function

C++ Pointers

C++ Pointers C++ this pointer

C++ Exception Handling

C++ Exception Handling

C++ Constructors

C++ Constructors Default Constructor Parameterize Constructor Copy constructor Constructor Overloading Destructor

C++ File Handling

C++ File Handling C++ Writing to file C++ Reading file C++ Close file

Miscellaneous

C Vs C++ C++ Comments C++ Data Abstraction C++ Identifier C++ Memory Management C++ Storage Classes C++ Void Pointer C++ Array To Function C++ Expressions C++ Features C++ Interfaces C++ Encapsulation std::min in C++ External merge sort in C++ Remove duplicates from sorted array in C++ Precision of floating point numbers Using these functions floor(), ceil(), trunc(), round() and setprecision() in C++ C++ References C++ Friend Functions C++ Mutable keyword Unary Operators in C++ Initialize Array of objects with parameterized constructors in C++ Differences between #define & const in C/C++ C++ Program to Implement Shell Sort C++ Program to Implement Merge Sort Storage Classes in C Vector resize() in C++ Passing by Reference Vs. Passing by the pointer in C++ Free vs delete() in C++ goto statement in C and C++ C++ program to read string using cin.getline() C++ String Concatenation Heap Sort in C++ Swap numbers in C++ Input Iterators in C++ Fibonacci Series in C++ C ++ Program: Alphabet Triangle and Number Triangle C++ Program: Matrix Multiplication C++ Program to Print Fibonacci Triangle Stack in C++ Maps in C++ Queue in C++ C++ Bitset C++ Algorithms Priority Queue in C++ C++ Multimap C++ Deque Function Pointer in C++ Sizeof() Operators in C++ C++ array of Pointers free() Vs delete in C Timsort Implementation Using C++ CPP Templates C++ Aggregation C++ Enumeration C++ Math Functions C++ Object Class C++ Queue Initialize Vector in C++ Vector in C++ C++ STL Components Function overloading in C++ C++ Maximum Index Problem C++ find missing in the second array C++ Program to find the product array puzzle C++ Program To Find Largest Subarray With 0 Sum C++ Program To Move All Zeros To The End Of The Array C++ Program to find the element that occurs once C++ Program to find the largest number formed from an array Constructor Vs Destructor C++ Namespaces C++ OOPs Concept C++ Static C++ Structs C++ Try-Catch C++ User Defined Exceptions C++ Virtual Destructor C++ vs C# Malloc() and new in C++ Palindrome Number Program in C++ Snake Code in C++ Splitting a string in C++ Structure Vs Class in C++ Virtual Function Vs Pure Virtual Function C++ Bidirectional Iterators C++ Forward Iterators C++ Iterators C++ Output Iterators C++ Range-based For Loop Converting string into integer in C++ LCM Program in C++ Type conversion in C++ Add two numbers using the function in C++ Advantage and disadvantage friend function C++ Armstrong Number Program in C++ ATM machine program in C++ using functions Binary to Decimal in C++ Bit Manipulation in C++ C++ Constructor C++ Dijkstra Algorithm Using the Priority Queue C++ int into String C++ Signal Handling Decimal to Binary in C++ Decimal to Hexadecimal in C++ Decimal to Octal in C++ Factorial Program in C++ Function in C++ Hexadecimal to Decimal in C++ Octal to Decimal in C++ Reverse a Number in C++ Structure Vs Class in C++ C++ Forward Iterators C++ Output Iterators C++ Prime number program Char Array to String in C++ Constructor Overloading in C++ Default arguments in C++ Different Ways to Compare Strings in C++ Dynamic Binding in C++ Program to convert infix to postfix expression in C++ SET Data Structure in C++ Upcasting and Downcasting in C++ Reverse an Array in C++ Fast Input and Output in C++ Delete Operator in C++ Copy elision in C++ C++ Date and Time C++ Bitwise XOR Operator Array of sets in C++ Binary Operator Overloading in C++ Binary Search in C++ Implementing the sets without C++ STL containers Scope Resolution Operator in C++ Smart pointers in C++ Types of polymorphism in C++ Exception Handling in C++ vs Java Const Keyword in C++ Type Casting in C++ Static keyword in C++ vs Java Inheritance in C++ vs Java How to concatenate two strings in C++ Programs to Print Pyramid Patterns in C++ swap() function in C++ Structure of C++ Program Stringstream in C++ and its applications rand() and srand() in C / C++ C++ Ternary Operator C++ Scope of Variables While Loop Examples in C++ Star pattern in C++ using For Loops For Loop Examples in C++ Do-While Loop Examples in C++ Top 5 IDEs for C++ That You Should Try Once Assertions in C/C++ C++ Convert Int to String Continue in C++ While loop Diamond Pattern in C++ using For Loop How to Reverse a String in C++ using Do-While Loop How to Reverse a String in C++ using For Loop How to Reverse a String in C++ using While Loop Infinite loop in C++ Loops in C++ Returning Multiple Values from a Function using Tuple and Pair in C++ wcscpy(), wcslen(), wcscmp() Functions in C++ Auto keyword in C++ C++ 11 vs C++ 14 vs C++ 17 C++ STL (Standard Template Library) Differences Between C Structures and C++ Structures Divide by Zero Exception in C++ Dynamic Constructor in C++ Dynamic Memory Allocation in C++ Find the Size of Array in C/C++ without using sizeof() function Floating Point Operations and Associativity in C, C++ and Java Hello World Program in C++ How to create a table in C++ How to Setup Environment for C++ Programming on Mac Implementation of a Falling Matrix in C++ Message Passing in C++ Pointer to Object in C++ Templates in C++ vs Generics in Java Ways to Copy a Vector in C++ What does Buffer Flush mean in C++ sort() function in C++ Structure Sorting (By Multiple Rules) in C++ Similarities between C++ and Java std::distance in C++ Array program in C++ C++ Tricks for Competitive Programming Desired Capabilities in Selenium Web Driver in C++ Socket Programming in C++ Template Specialization in C++ Classes and Objects in C++ Convex hull Algorithm in C++ DES in C++ C++ vardiac() function Difference between Two Sets in C++ Difference between Exit and Return Structured Binding in C++ Differences between Local and Global Variable Bitwise Operator vs Logical Operator Difference between OOP and POP in C++ Fork in C++ Functors in C++ How to call a void function in C++ How to create a directory or folder in C/C++ How to create a library in C++ How to create a stack in C++ How to create the Processes with Fork in C++ How to Handle Divide by Zero Exception in C++ Lambda Expression in C++ Pattern programs in C++ Roadmap to C++ Programming Substring in C++ Virtual base class in C++ Bits stdc++.h in C++ Top 14 Best Free C++ IDE (Editor & Compiler) for Windows in 2022 Bitmasking in C++ Auto Keyword in C++ Features of OOPS in C++ Hospital Management Project in C++ How to Declare Unordered Sets in C++ How to Sort an Array in C++ Include Guards in C++ Iostream in C++ Method overriding in C++ How to run program in turbo c++ How to Use Getline in C++ Leap Year Program in C++ Naming Convention in C++ New Operator in C++ Nullptr in C++ Object Slicing in C++ Principles of Object-Oriented Programming in C++ Processing strings using std string stream in C++ Pure Virtual Function in C++ With Example Program Random Number Generator in C++ Singleton Design Pattern in C++ Size_t Data Type in C++ Skyline Problem in C++ System() function in C++ Web Development in C++ Data Hiding in C++ Difference between exit() and _Exit() in C++ Hashing in C++ Object in C++ Sum of all Elements between k1’th and k2’th Smallest Elements Virtual class in C++ Vector Size in C++ Top best IDEs for C/C++ Developers in 2022 Tensorflow in C++ Sliding Window Technique in C++ Reverse String Word-Wise in C++ Returning a Function Pointer from a Function in C/C++ RTTI in C++ Pthreads or POSIX Threads in C++ Reserved Keywords in C++ Passing a Vector to a function in C++ 10 Best C and C++ Books for Beginners & Advanced Programmers Add two numbers represented by two arrays in C++ Array of Object in C++ C++ Program For FCFS Containership in C++ Counting Frequencies of Array Elements in C++ Decltype type Specifier in C++ Dynamic _Cast in C++ Difference between int main() and int main(void) in C/C++ Depth First Search Program to Traverse a Graph in C++ Features and Use Of Pointers in C/C++ Fread Function in C++ Programming Fscanf Function in The C++ Functions in C++ With Types and Examples Gmtime Function in C/C++ How is Multiset Implemented in C++ How to Build a Program in C++ How to Declare a 2d Array Dynamically in C++ inheritance Program in C++ int Max and int Min in C/C++ is It Fine to Write Void Main Or Main in C/C++ How to create a button in C++ abs() function in C++ Compile Time Polymorphism in C++ Division in C++ Factorial of a Number in C++ using while Loop Multiset in C++ 4 Pillars of OOPs Approach in C++ Backtracking Time Complexity in C++ C++ Global Variable C++ Pipe Tutorial Observer Design Pattern in C++ Private Inheritance in C++ Pthread in C++ Parameters SDL library in C++ with Examples Pointers in C++ Abstract Factory Design Pattern in C++ Ascending order in C++ How the value is passed in C++ Call by Pointer in C++ Constexpr in C++ Deadlock in C++ Design Patterns in C++ Factory Method for Designing Pattern in C++ How to calculate size of string in C++ Name Mangling and extern in C++ Preventing Object Copy in C++ Program that produces different results in C and C++ Quick Sort in C++ Single Handling in C++ Type difference of Character literals in C VS C++ Use of Inheritance in C++ User-defined literals in C++ Vector methods in C++ Void * in C and C++ Zombie and Orphan Process in C++ Isprint() in C++ List and Vector in C++ List iterators in C++ Merging Two Vectors in C++ Sleep function in C++ Stoi function in C++ String erase() in C++ String Trim in C++ When should we write own Assignment operator in C++ C++ tcp client server example C++ tcp server example Early Binding and Late Binding in C++ Factory Design Pattern in C++ Fisher-Yates shuffle algorithm in C++ For Auto in C++ Group anagrams in C++ How to convert binary string to int in C++ How to convert string to float in C++ How to remove space from string in C++ How to use pair in C++ How to use the string find() in C++ Dynamic Casting in C++ 2D Vector Initialization in C++ C++ GUI Visual Studio C++ IPC C++ Macro Function Example C++ Permutation Overloading Stream Insertion in C++ Overloading array Index operator in C++ Operators that cannot be overloaded in C++ Operator overloading in C++ isprint() function in c++ Is_trivial function in C++ Is assignment operator Inherited in C++ div() function in C++ Default Assignment Operator and References in C++ Copy Constructor vs Assignment Operator in C++ Conversion Operator in C++ Array sum in C++ STL C++ Define Macro C++ Design C++ Factory Pattern TCP Client Server Example in C++ Convert String to Uppercase in C++ exit() and _Exit() in C and C++ Initializer list in C++ Iterator invalidation in C++ Lower bound in C++ Modulus of Two float numbers or double number Pass by value in C++ Set insert function in C++ Std partition_point in C++ Unary Operator Overloading in C++ Using Default Arguments with Virtual Functions Virtual Functions and Runtime Polymorphism What is endl in C++ What is Unary Operator Overloading in C++ Which operators cannot be overloaded in C++ C++ Program to Divide the String Into N equal Parts Gray Code to Binary Code in C++ How to get the value of pi in C++ Multimap value_comp() function in C++ Vector of Vectors in C++ Naïve Bayes Algorithm in C++ Minimum Cost Path Problem in C++ 10 C++ Programming Tricks You Should Know btowc() function in C++ forward_list::cend() in C++ Unordered_multimap max_load_factor() function in C++ Cpp_int in c++ Dynamic Objects in C++ FLOCK() FUNCTION IN C++ Generate Random Double Numbers in C++ How to Assign Infinity to a Number in C++ Jump statements in C++ Multipath inheritance in C++ Out of Range Exception in C++ Size of Class in C++ Size of string in C++ std::binary_negate in c++ Thread_local in C++ Tokenizing a String in C++ Ancestors of a Node in Binary Search Tree C++ program for Double to String Conversion C++ Program to Demonstrate Use of Formatting Flags on Float Output Clamp in C++ K-Dimensional Tree in C++ Mutable Lambda in C++ Power Set in C++ Program to Find Sum of Geometric Progression Std::Back_inserter in C++ Strpbrk() function in C++ Size of int in C++ TYPES OF MANIPULATORS IN C++ Double colon in C++ How to sort vector in C++ How to use Setprecision in C++ How to write a Vector in C++ Insertion in Splay Tree in C++ Merge Sort Algorithm in C++ Printing a Character using ASCII value in C++ Regex in C++ Size of Data Types in C++ Abstract Factory Design Pattern in C++ Sqrtf() function in C++ Static Casting in C++ Using Range in Switch Case in C++ wcstoimax() and wcstoumax() function in C++ What is float in C++ What is the Diamond Problem in C++ Best way to learn C++ ios setstate() function in C++ Nested Namespace in C++ Single Inheritance in C++ std::fixed, std::scientific, std::hexfloat, std::defaultfloat in C++ StringStream in C++ for Decimal to Hexadecimal and back The OFFSETOF() macro in C++ Difference between std::next and std::advance in C++ Hiding of all overloaded methods with same name in base class in C++ C++ program to concatenate two strings using operator overloading Difference between array::fill() and array::swap() in C++ Difference between Friend Function and Virtual Function in C++ Semaphores in C++ Seekg in C++

Design Patterns in C++

A design pattern offers an all-encompassing, repeatable answer to the typical issues that arise in software design. Usually, the pattern demonstrates the connections and interactions between several classes or objects. By offering tried-and-true development/design models, the goal is to hasten the development cycle.

It's not necessary to apply design patterns to every aspect of your project. Project development is not the intended use of design patterns. Design patterns are used to help with everyday problems. To stop such problems in the coming time, one must always develop a proper pattern whenever a requirement arises.

Objective

Knowing the functions and applications of each design pattern can help you choose and employ it as appropriate in a given context.

Example

Creating just one example of a class is what we want to accomplish in several real-world scenarios. For instance, a country may only have one functioning president at any particular time. A Singleton pattern is what we're talking about here.

As it is expensive to create a distinct DB connection for each object, other software instances might have a single DB connection utilized by several objects. Similarly, to this, an application can have a single configuration manager or error controller that takes care of all issues rather than having several managers.

Types of Design Patterns

Design patterns typically fall into one of three categories:

1. Creational

Class initialization or object generation is the central theme of these design patterns. Such patterns may also be divided into patterns for creating classes and patterns for creating objects. Whereas class-creation patterns successfully employ inheritance throughout the initialization process, object-creation patterns successfully use delegation.

The Factory Method, Abstract Factory, Builder, Singleton, Object Pool, and Prototype are examples of creational design concepts.

Factory Methods

 Intent:

A creational design pattern called the factory method gives subclasses the ability to change the object types that will be generated while still providing an interface for producing objects in a superclass.

Design Patterns in C++

Problem:

Create a logistics operations app, for example. The majority of your code is located inside the Truck class since the initial version of your software can only handle truck transportation.

Your app starts to get a lot of traction eventually. You get hundreds of inquiries from shipping firms each day asking you to include marine logistics in the app.

Wonderful news, yes? How about the coding, though? The majority of your code is now tied to the Truck class. The entire software would need to be modified in order to integrate Ships into the app. Additionally; you will likely need to implement all of these adjustments once more if you decide to subsequently include another mode of transportation in the application.

As an outcome, your code will be rather bad, full of conditionals that change how the program behaves according to the kind of transportation elements.

Solution:

The factory design pattern advises switching out calls to the new unit for direct object formation calls with calls to a unique factory method. Not to worry, the new mode is still used to construct the objects, but it is now called inside the factory function. Products are frequently used to describe objects that a factory operation returns.

Design Patterns in C++

This modification may appear unnecessary at first glance because we just shifted the function Object() { [native code] } call from one area of the program to another. But take into account that you may now alter the class of goods that the factory function creates by overriding it in a subclass.

However, there is a little restriction: subclasses can only return several product types if they share a base class or interface. Additionally, the base class' factory method's returned type must be specified to be this interface.

Design Patterns in C++

For instance, the Transport method, which has the deliver function, should be implemented by both the Truck and Ship classes. This strategy is applied separately by each class: ships convey freight by water, whereas trucks distribute cargo by land. Truck objects are returned by the factory method in the RoadLogistics class, while ships are returned by the factory method in the SeaLogistics class.

The actual goods produced by different subclasses are identical to the code that utilizes the factory function (commonly referred to as the client code). The customer views every product as an abstract Transport. Although the client is aware that the delivery method should be included in all transport objects, the specifics of how it operates are unimportant to the client.

Use case of creational design pattern

  1. Assume that a developer wishes to design a straightforward DBConnection class to attach to a database and access this information from code in numerous places. Typically, the developer will construct an instance of the DBConnection class and utilize it to perform logic operations as necessary. As a result, several linkages to the database are created as each example of the DBConnection class has its own connection to the database. To address it, we develop the DBConnection class as a singleton class, resulting in the creation of just one example of DBConnection and the establishment of a single connection. We can handle load balancing, unused connections, etc. since we can handle DB Connection through a single instance.
  2. If you wish to establish loose coupling and several examples of the same sort, you may use the factory approach. A class that uses the factory design pattern functions as a link between other classes. Take many database servers like SQL Server and Oracle as an instance. Factory design structures manage loose coupling and simple execution; therefore we should choose them in order to obtain loose coupling and the formation of a similar type of object. For example, if you are creating an app using a SQL Server database as the back end and yet later need to switch to an Oracle database, you will be required to adjust all your code.

And you can explore another design model of creational design pattern, which is mentioned above.

2. Structural 

These design patterns focus on grouping several classes and objects into more substantial structures that offer fresh functionality. Following are some examples of this type of design.

Adapter, Bridge, Composite, Decorators, etc are examples of structural design patterns.

Adapter:

 Intent:

A structural design pattern called an adapter enables items with disparate APIs to work together.

 Problem:

Consider developing a stock market tracking app. The program receives the stock data in XML format from several places and then shows the user appealing charts and diagrams.

You eventually make the decision to enhance the app by using a clever third-party analytics package. The analytics library only functions with data in JSON format, thus there is a catch.

The library could be modified to support XML. Furthermore, certain existing code that depends on the library can be broken as a result. And to make matters worse, you could not even have had access to the library's source code, rendering this strategy useless.

Use Case of Structural Design Pattern

An adapter design pattern is used when two interfaces that are incompatible with one another attempt to form a relationship using an adapter. The adapter pattern transforms a class's interface into a different interface or class that the customer requires, allowing classes that would not have been able to coexist due to incompatibility to do so. We may use the adapter approach in these kinds of incompatible cases.

Composite:

 Intent:

With the use of the structural design pattern known as Composite, you may group things into diagrams and then treat those structures as specific items.

Design Patterns in C++

Problem:

Only when your app's main design can be shown as a tree does use the Composite design make sense.

Consider having two different kinds of items, such as boxes and products. A Box may include a variety of products as well as many smaller Boxes. These tiny boxes may also accommodate other products or even more diminutive boxes, and so on.

Let's say you choose to use these classes to develop an ordering system. Orders may include plain goods that are not packaged, as well as boxes that are packed with goods and additional boxes. How would you calculate the order's total cost?

Design Patterns in C++

Various goods may be included in an order, each wrapped in a box, which is then placed in a larger box, and so on. The entire building has the appearance of an upside-down tree.

You could go the straightforward route and open every package, inspect every item, and then add it all up. In the actual world, that might be possible, but in a program, it wouldn't be as straightforward as executing a loop. You must be aware of the categories of goods and boxes you'll be dealing with, the boxes' level of stacking, and other unpleasant information, in advance. The straightforward method is either too difficult or possibly impossible because of all of this.

And you can explore another design model of structural design pattern, which is mentioned above.

3. Behavioural 

The goal of behavioural patterns is to identify the previous communication styles across things.

The Chain of Responsibility pattern, Command, Interpreter, Iterator, Mediator, Memento, Null Object, etc are examples of behavioural patterns.

Chain of Responsibility:

Intent:

You may transmit queries down a chain of handlers using the behavioral design pattern known as the Chain of Responsibility. Every handler chooses whether to execute a request or send it to the handler behind it in the chain.

Design Patterns in C++

Problem:

Consider you are developing an internet ordering system. You need to limit access to the system so that only users who have been verified may make orders. Additionally, individuals with admin rights must have complete access to all transactions.

After some preparation, you understood that these tests needed to be carried out in order. Anytime the program gets a request with the user's credentials, it may try to verify the user with the system. There is no need to carry out any more tests if verification fails because those credentials were incorrect.

Design Patterns in C++

 Well before the order management system alone can process the request, a number of checks must be passed.

You put in place numerous more such consecutive inspections over the next couple of months.

  • One of your coworkers said it was risky to send raw data directly to the ordering system. So, to sanitize the data in a query, you introduced an additional validation step.
  • Someone later discovered that the system is susceptible to password brute-force attacks. You quickly included a check that filters out repeated unsuccessful requests originating from the same IP address to counteract this.
  • Another person proposed that you might speed up the system by responding to repeated queries for the same data with cached results. As a result, you introduced an additional check that only permits the request to reach the system if no appropriate cached answer exists.
Design Patterns in C++

The code for the inspections, which already seemed to be a jumble, became larger and larger since each new product was introduced. Sometimes altering one test has an impact on the others. Most troubling of all, developers had to repeat some code while attempting to reuse the procedures to safeguard another entire system since parts of the tests were needed but not every one of them.

The system grew to be exceedingly complex and costly to maintain. You spent some time struggling with the code before deciding to rework it all at once.

Solution:

The Chain of Responsibility, like numerous other behavioral design patterns, depends on turning specific activities into independent usually called handlers. In this situation, every test should be separated into its own class and handled by a single function. This procedure receives the request as well as its data as a parameter.

The pattern advises creating a chain out of these handlers. A field on every connected handler may be used to store a reference to the handler after it in the network. Handlers transmit requests farther up the chain in addition to dealing with them. Until each handler has had an opportunity to handle the request, it moves up the chain.

The finest element is that a handler has the option to determine whether to stop processing a request and transmit it no farther in the chain.

In our illustration of ordering systems, a handler processes the request and then chooses whether to send it to a subsequent link in the chain. Every handler, whether doing verification tests or caching, may carry out their main activity if the request provides the appropriate data.

Design Patterns in C++

A handler chooses whether it is able to process a query after getting it, which is a little different method that is a little more standard. If it can, it declines to transmit the request. Therefore, either one controller or no handlers at all execute the request. While handling actions in stacks of items inside a graphical user interface(GUI), this strategy is quite popular.

Behavioural Design Pattern Use Case:

The template pattern outlines an algorithm's basic stages while delegating others to subclasses. The template technique enables subclasses to rewrite specific algorithmic stages without altering the framework of the algorithm. For instance, in your development, you would want the capsule's behaviour to be extendable so that it may act in new and novel ways when the application's specifications evolve or to accommodate the demands of brand-new applications. Nobody is permitted to alter the source code, therefore in those situations when a developer may use the template design pattern, someone can add things but not change the layout.

And you can explore another design model of behaviouraldesign pattern, which is mentioned above.