Exploring Type Conversion in C++ with Examples

Updated on August 10, 2024

Article Outline

Ever wondered why your program crashes when you mix data types? Type conversion in C++ is a solution to such problems.

 

We often face issues when working with different data types together.

 

Imagine adding an integer to a float without any fuss. That’s where type conversion steps in.

 

Type conversion, or typecasting, lets us change a variable from one data type to another. This is vital for performing operations involving multiple data types.

 

There are two main types of type conversion in C++:

type conversion in c++

 

Understanding these can save us from many programming headaches.

Detailed Explanation of Implicit Type Conversion

Implicit type conversion, also known as automatic type conversion, happens when the compiler changes the data type for us.

 

It kicks in without our intervention.

 

For example, if we add an integer to a float, the integer gets converted to a float.

 

Also Read: Mastering C++ Comments

Order of Data Types in Implicit Conversion

The compiler follows a specific order when converting types.

 

Here’s the hierarchy:

Data Types in Implicit Conversion

This order ensures that no data gets lost during conversion.

Examples of Implicit Type Conversion

Let’s dive into an example to see implicit type conversion in action. We’ll write a simple program that takes user input and performs an implicit conversion.

 

Here, we see the integer a converted to a double b automatically.

#include<iostream> using namespace std; int main() { int a; cout << "Enter an integer: "; cin >> a; double b = a; // Implicit conversion from int to double cout << "You entered: " << a << endl; cout << "Converted to double: " << b << endl; return 0; }

Output:

Input Output
5 You entered: 5
Converted to double: 5.0

 

Potential Data Loss in Implicit Conversion

Sometimes, implicit conversion can lead to data loss.

 

Consider converting a double to an int. The fractional part gets truncated. Let’s see this with another example.

#include<iostream> using namespace std; int main() { double x; cout << "Enter a double: "; cin >> x; int y = x; // Implicit conversion from double to int cout << "You entered: " << x << endl; cout << "Converted to int: " << y << endl; return 0; }

Output:

Input Output
8.76 You entered: 8.76
Converted to int: 8

 

Here, the fractional part of the double is lost when it’s converted to an int. This is something we need to be cautious about.

*Image
Get curriculum highlights, career paths, industry insights and accelerate your technology journey.
Download brochure

Comprehensive Guide to Explicit Type Conversion

Have you ever wondered how to control type conversions in your code?

 

That’s where explicit type conversion, or typecasting, comes into play. Unlike implicit conversions, we manage explicit conversions ourselves.

 

This gives us more control and prevents unexpected data loss.

 

Explicit type conversion lets us manually change a variable’s data type. This is crucial when we need precision and control over how data types are converted.

 

In C++, we can perform explicit conversions using the assignment operator or cast operators.

Conversion Using Assignment Operator

When we use the assignment operator for explicit conversion, we force the compiler to change the data type.

Here’s a simple example:

#include<iostream> using namespace std; int main() { double num; cout << "Enter a double value: "; cin >> num; int converted_num = (int)num; // Explicit conversion from double to int cout << "You entered: " << num << endl; cout << "Converted to int: " << converted_num << endl; return 0; }

Output:

Input Output
5.76 You entered: 5.76
Converted to int: 5

 

Conversion Using Cast Operator

C++ provides several cast operators for explicit type conversion. These operators help us ensure the right type of conversion.

 

Here are the four main types of casting:

four main types of casting

Static Cast

Static cast is the most commonly used cast. It handles all basic conversions and checks types at compile time.

#include<iostream> using namespace std; int main() { float value; cout << "Enter a float value: "; cin >> value; int result = static_cast(value); cout << "You entered: " << value << endl; cout << "Converted to int: " << result << endl; return 0; }

Output:

Input Output
8.76 You entered: 8.95
Converted to int: 8

 

Dynamic Cast

Dynamic cast is used for polymorphic conversions. It’s safe because it checks the conversion at runtime.

#include<iostream> using namespace std; class Base { public: virtual void show() { cout << "Base classn"; } }; class Derived : public Base { public: void show() { cout << "Derived classn"; } }; int main() { Base *base_ptr = new Derived; Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr); if (derived_ptr) { derived_ptr->show(); } else { cout << "Conversion failedn"; } return 0; }

Output:

Derived class

Const Cast

Const cast adds or removes the const qualifier from a variable.

#include <iostream> using namespace std;  int main() { const int x = 10; int *ptr = const_cast<int*>(&x); *ptr = 20;  cout << "Original value: " << x << endl; cout << "Modified value: " << *ptr << endl; return 0; }

Output:

Original value: 10

Modified value: 20

Reinterpret Cast

Reinterpret cast changes the type of the pointer itself. It’s useful for low-level code and bit manipulation.

#include <iostream> using namespace std;  int main() { int num = 65; char *char_ptr = reinterpret_cast<char*>(&num);  cout << "Integer value: " << num << endl; cout << "Interpreted as char: " << *char_ptr << endl;  return 0; }

Output: Integer value: 65

 

Interpreted as char: A

Potential Data Loss During Type Conversion

Type conversion in C++ can sometimes lead to data loss. This is especially true when converting from a larger data type to a smaller one. Data Loss During Type Conversion Explanation of Narrowing Conversion   Narrowing conversion happens when we convert a larger data type to a smaller one.   For example, converting a double to an int. The fractional part is lost, which might lead to inaccurate results.

Examples of Data Loss in Integer and Floating Point Conversions

Example 1

#include<iostream> using namespace std; int main() {     double num;     cout << "Enter a double value: ";     cin >> num;        int truncated_num = static_cast(num);     cout << "You entered: " << num << endl;     cout << "After conversion to int: " << truncated_num << endl;     return 0; }

Output:

Input Output
12.99 You entered: 12.99
Converted to int: 12

 

Example 2

#include <iostream> using namespace std;  int main() { long long big_num; cout << "Enter a large integer: "; cin >> big_num;  int small_num = static_cast<int>(big_num); cout << "You entered: " << big_num << endl; cout << "After conversion to int: " << small_num << endl;   return 0; }

 

Output:

Input Output
12.99 You entered: 12345678912345
Converted to int: 1942903641

 

The large number doesn’t fit into an int, leading to data loss and incorrect values.

Conclusion

In this web blog, we’ve delved into the essentials of type conversion in C++. We explored the two main types: implicit and explicit conversions.

 

Implicit conversions happen automatically, helping us mix different data types seamlessly. However, they can sometimes lead to data loss.

 

Explicit casts, on the other hand, allow the programmer to have control over data type conversion and possible precision so as not to yield undesirable results.

 

Remember, the use of the proper conversion can ensure proper results and no loss of data.

 

Knowledge of these concepts helps to write correct and efficient programs. Type conversion in C++ is a very crucial knowledge for programmers to handle C++ programming with ease.

FAQs
Implicit type conversion is done without the involvement of the programmer through the compiler. Another name given to it is automatic type conversion. Explicit type conversion requires us to manually convert the data type. It is also known as typecasting.
Yes, implicit type conversion can lead to data loss. For instance, when casting Double 3.5 to int, it becomes 3.
It is, therefore, suggested that dynamic_cast should be used for polymorphic conversions. It is safe because it actually checks the conversion at run time. It becomes handy when you have pointers or references within inheritance and need to reduce the size of the pointers or references.
const_cast is used when a programmer wishes to alter or delete the const qualifier from a variable. It enables the alteration of a constant variable. It can also pass a constant variable to a function that takes an argument of something other than a constant value.

Updated on August 10, 2024

Link
left dot patternright dot pattern

Programs tailored for your success

Popular

Management

Data Science

Finance

Technology

Future Tech

Upskill with expert articles

View all
Hero Vired logo
Hero Vired is a leading LearnTech company dedicated to offering cutting-edge programs in collaboration with top-tier global institutions. As part of the esteemed Hero Group, we are committed to revolutionizing the skill development landscape in India. Our programs, delivered by industry experts, are designed to empower professionals and students with the skills they need to thrive in today’s competitive job market.
Blogs
Reviews
Events
In the News
About Us
Contact us
Learning Hub
18003093939     ·     hello@herovired.com     ·    Whatsapp
Privacy policy and Terms of use

|

Sitemap

© 2024 Hero Vired. All rights reserved