Introduction To C++
Introduction To C++
C++, as we all know is an extension to C language and was developed by Bjarne stroustrup at
bell labs. C++ is an intermediate level language, as it comprises a confirmation of both high level
and low level language features. C++ is a statically typed, free form, multiparadigm, compiled
general-purpose language.
C++ is an Object Oriented Programming language but is not purely Object Oriented. Its
features like Friend and Virtual, violate some of the very important OOPS features, rendering
this language unworthy of being called completely Object Oriented. Its a middle level language.
Benefits of C++ over C Language
The major difference being OOPS concept, C++ is an object oriented language whereas C
language is a procedural language. Apart form this there are many other features of C++ which
gives this language an upper hand on C laguage.
Following features of C++ makes it a stronger language than C,
1. There is Stronger Type Checking in C++.
2. All the OOPS features in C++ like Abstraction, Encapsulation, Inheritance etc makes it more
worthy and useful for programmers.
3. C++ supports and allows user defined operators (i.e Operator Overloading) and function
overloading is also supported in it.
4. Exception Handling is there in C++.
5. The Concept of Virtual functions and also Constructors and Destructors for Objects.
6. Inline Functions in C++ instead of Macros in C language. Inline functions make complete
function body act like Macro, safely.
7. Variables can be declared anywhere in the program in C++, but must be declared before they
are used.
Object Oriented Programming
Object Oriented programming is a programming style that is associated with the concept of
Class, Objects and various other concepts revolving around these two, like Inheritance,
Polymorphism, Abstraction, Encapsulation etc.
Class
Here we can take Human Being as a class. A class is a blueprint for any functional entity which
defines its properties and its functions. Like Human Being, having body parts, and performing
various actions.
Inheritance
Considering HumanBeing a class, which has properties like hands, legs, eyes etc, and functions
like walk, talk, eat, see etc. Male and Female are also classes, but most of the properties and
functions are included in HumanBeing, hence they can inherit everything from
class HumanBeing using the concept of Inheritance.
Objects
My name is Abhishek, and I am an instance/object of class Male. When we say, Human Being,
Male or Female, we just mean a kind, you, your friend, me we are the forms of these classes. We
have a physical existence while a class is just a logical definition. We are the objects.
Abstraction
Abstraction means, showcasing only the required things to the outside world while hiding the
details. Continuing our example, Human Being's can talk, walk, hear, eat, but the details are
hidden from the outside world. We can take our skin as the Abstraction factor in our case, hiding
the inside mechanism.
Encapsulation
This concept is a little tricky to explain with our example. Our Legs are binded to help us walk.
Our hands, help us hold things. This binding of the properties to functions is called
Encapsulation.
Polymorphism
Polymorphism is a concept, which allows us to redefine the way something works, by either
changing how it is done or by changing the parts using which it is done. Both the ways have
different terms for them.
If we walk using our hands, and not legs, here we will change the parts used to perform
something. Hence this is called Overloading.
And if there is a defined way of walking, but I wish to walk differently, but using my legs, like
everyone else. Then I can walk like I want, this will be called as Overriding.
Modifiers in C++
In C++, special words(called modifiers) can be used to modify the meaning of the predefined
built-in data types and expand them to a much larger set. There are four datatype modifiers in
C++, they are:
1. long
2. short
3. signed
4. unsigned
The above mentioned modifiers can be used along with built in datatypes to make them more
precise and even expand their range.
Below mentioned are some important points you must know about the modifiers,
long and short modify the maximum and minimum values that a data type will hold.
A plain int must have a minimum size of short.
Size hierarchy : short int < int < long int
Size hierarchy for floating point numbers is : float < double < long double
long float is not a legal type and there are no short floating point numbers.
Signed types includes both positive and negative numbers and is the default type.
Unsigned, numbers are always without any sign, that is always positive.
What are Variables
Variable are used in C++, where we need storage for any value, which will change in program.
Variable can be declared in multiple ways each with different memory requirements and
functioning. Variable is the name of memory location allocated by the compiler depending upon
the datatype of the variable.
float and double are also types for variables with large and floating point values
Declaration and Initialization
Variable must be declared before they are used. Usually it is preferred to declare them at the
starting of the program, but in C++ they can be declared in the middle of program too, but must
be done before using them.
For example:
int i; // declared but not initialised
char c;
int i, j, k; // Multiple declaration
Initialization means assigning value to an already declared variable,
int i; // declaration
i = 10; // initialization
Initialization and declaration can be done in one single step also,
int i=10; //initialization and declaration in same step
int i=10, j=11;
If a variable is declared and not initialized by default it will hold a garbage value. Also, if a
variable is once declared and if try to declare it again, we will get a compile time error.
int i,j;
i=10;
j=20;
int j=i+j; //compile time error, cannot redeclare a variable in same scope
Scope of Variables
All the variables have their area of functioning, and out of that boundary they don't hold their
value, this boundary is called scope of the variable. For most of the cases its between the curly
braces,in which variable is declared that a variable exists, not outside it. We will study the
storage classes later, but as of now, we can broadly divide variables into two main types,
Global Variables
Local variables
Global variables
Global variables are those, which ar once declared and can be used throughout the lifetime of the
program by any class or any function. They must be declared outside the main() function. If only
declared, they can be assigned different values at different time in program lifetime. But even if
they are declared and initialized at the same time outside the main() function, then also they can
be assigned any value at any point in the program.
For example: Only declared, not initialized
include <iostream>
using namespace std;
int x; // Global variable declared
int main()
{
x=10; // Initialized once
cout <<"first value of x = "<< x;
x=20; // Initialized again
cout <<"Initialized again with value = "<< x;
}
Local Variables
Local variables are the variables which exist only between the curly braces, in which its
declared. Outside that they are unavailable and leads to compile time error.
Example :
include <iostream>
using namespace std;
int main()
{
int i=10;
if(i<20) // if condition scope starts
{
int n=100; // Local variable declared and initialized
} // if condition scope ends
cout << n; // Compile time error, n not available here
}
Overview of C++
Introduction to C++
OOPS concepts basic
Basic Syntax and Structure
Data types and Modifiers
Variables in C++
Operators in C++
sizeof and typedef in C++
Decision Making
Loop types
Storage Classes
Functions
Core C++ Concepts
Classes and Objects
Access Controls in classes
Defining class and object
Accessing Data Members
Member Functions in class
Types of Member Functions
Inline Functions
Function Overloading
Constructor and Destructor
Static Keyword
Const Keyword
Refrences
Copy Constructor
Pointer to Members
Inheritance
Introduction to Inheritance
Types of Inheritance
Order of Constructor Call
Upcasting
Polymorphism
Function Overriding
Virtual Functions
Abstract class and Pure Virtual Functions
Virtual Destructors
Operator Overloading
Operator Overloading
Operator Overloading Examples
C++ Miscellaneous
File Streams
Exception Handling
Memory Management
Multithreading
Initializer List
Defining Namespace
STL in C++ →
C++ Programs →
Operators in C++
Operators are special type of functions, that takes one or more arguments and produces a new
value. For example : addition (+), substraction (-), multiplication (*) etc, are all operators.
Operators are used to perform various operations on variables and constants.
Types of operators
1. Assignment Operator
2. Mathematical Operators
3. Relational Operators
4. Logical Operators
5. Bitwise Operators
6. Shift Operators
7. Unary Operators
8. Ternary Operator
9. Comma Operator
Functions in C++
Functions are used to provide modularity to a program. Creating an application using function
makes it easier to understand, edit, check errors etc.
int main()
{
int a = 10;
int b = 20;
int c = sum (a, b); //calling the function
cout << c;
}
Calling a Function
Functions are called by their names. If the function is without argument, it can be called directly
using its name. But for functions with arguments, we have two ways to call them,
1. Call by Value
2. Call by Reference
Call by Value
In this calling technique we pass the values of arguments which are stored or copied into the
formal parameters of functions. Hence, the original values are unchanged only the parameters
inside function changes.
void calc(int x);
int main()
{
int x = 10;
calc(x);
printf("%d", x);
}
void calc(int x)
{
x = x + 10 ;
}
10
In this case the actual variable x is not changed, because we pass argument by value, hence a
copy of x is passed, which is changed, and that copied value is destroyed as the function
ends(goes out of scope). So the variable x inside main() still has a value 10.
But we can change this program to modify the original x, by making the function calc() return a
value, and storing that value in x.
int calc(int x);
int main()
{
int x = 10;
x = calc(x);
printf("%d", x);
}
int calc(int x)
{
x = x + 10 ;
return x;
}
20
Call by Reference
In this we pass the address of the variable as arguments. In this case the formal parameter can be
taken as a reference or a pointer, in both the case they will change the values of the original
variable.
void calc(int *p);
int main()
{
int x = 10;
calc(&x); // passing address of x as argument
printf("%d", x);
}
20
Classes and Objects
The classes are the most important feature of C++ that leads to Object Oriented programming.
Class is a user defined data type, which holds its own data members and member functions,
which can be accessed and used by creating instance of that class.
The variables inside class definition are called as data members and the functions are called
member functions.
For example: Class of birds, all birds can fly and they all have wings and beaks. So here flying
is a behavior and wings and beaks are part of their characteristics. And there are many different
birds in this class with different names but they all posses this behavior and characteristics.
Similarly, class is just a blue print, which declares and defines characteristics and behavior,
namely data members and member functions respectively. And all objects of this class will share
these characteristics and behavior.
1. Class name must start with an uppercase letter(Although this is not mandatory). If class name
is made of more than one word, then first letter of each word must be in uppercase. Example,
class Study, class StudyTonight etc
2. Classes contain, data members and member functions, and the access of these data members
and variable depends on the access specifiers (discussed in next section).
3. Class's member functions can be defined inside the class definition or outside the class
definition.
4. Class in C++ are similar to structures in C, the only difference being, class defaults to private
access control, where as structure defaults to public.
5. All the features of OOPS, revolve around classes in C++. Inheritance, Encapsulation,
Abstraction etc.
6. Objects of class holds separate copies of data members. We can create as many objects of a
class as we need.
7. Classes do posses more characteristics, like we can create abstract classes, immutable classes,
all this we will study later.
class Abc
{
int x;
void display()
{
// some statement
}
};
void main()
{
Abc obj; // Object of class Abc created
}
Here is an example, we have made a simple class named Student with appropriate members,
class Student
{
public:
int rollno;
string name;
};
So its clear from the syntax and example, class definition starts with the keyword "class"
followed by the class name. Then inside the curly braces comes the class body, that is data
members and member functions, whose access is bounded by access specifier. A class definition
ends with a semicolon, or with a list of object declarations.
For example:
class Student
{
public:
int rollno;
string name;
}A,B;
Here A and B are the objects of class Student, declared with the class definition. We can also
declare objects separately, like we declare variable of primitive data types. In this case the data
type is the class name, and variable is the object.
int main()
{
// creating object of class Student
Student A;
Student B;
}
Both A and B will have their own copies of data members i.e. rollno and name and we can store
different values for them in these objects.
Member Functions of Classes in C++
Member functions are the functions, which have their declaration inside the class definition and
works on the data members of the class. The definition of member functions can be inside or
outside the definition of class.
If the member function is defined inside the class definition it can be defined directly, but if its
defined outside the class, then we have to use the scope resolution :: operator along with class
name alng with function name.
For example:
class Cube
{
public:
int side;
/*
Declaring function getVolume
with no argument and return type int.
*/
int getVolume();
};
If we define the function inside class then we don't not need to declare it first, we can directly
define the function.
class Cube
{
public:
int side;
int getVolume()
{
return side*side*side; //returns volume of cube
}
};
But if we plan to define the member function outside the class definition then we must declare
the function inside class definition and then define it outside.
class Cube
{
public:
int side;
int getVolume();
}
Volume of cube C1 = 16
Types of Class Member Functions in C++
We already know what member functions are, what they do, how to define member function and
how to call them using class objects. Now lets learn about some special member functions which
can be defined in C++ classes. Following are the different types of Member functions:
1. Simple functions
2. Static functions
3. Const functions
4. Inline functions
5. Friend functions
Inline Functions in C++
Inline functions are actual functions, which are copied everywhere during compilation, like
preprocessor macro, so the overhead of function calling is reduced. All the functions defined
inside class definition are by default inline, but you can also make any non-class function inline
by using keyword inline with them.
For an inline function, declaration and definition must be done together. For example,
inline void fun(int a)
{
return a++;
}
public:
// getter function for variable price
int getPrice()
{
return price;
}
// setter function for variable price
void setPrice(int x)
{
i=x;
}
};
Here getPrice() and setPrice() are inline functions, and are made to access the private data
members of the class Auto. The function getPrice(), in this case is called Getter or
Accessorfunction and the function setPrice() is a Setter or Mutator function.
There can be overlaoded Accessor and Mutator functions too. We will study overloading
functions in next topic.
Limitations of Inline Functions
1. Large Inline functions cause Cache misses and affect performance negatively.
2. Compilation overhead of copying the function body everywhere in the code on compilation,
which is negligible for small programs, but it makes a difference in large code bases.
3. Also, if we require address of the function in program, compiler cannot perform inlining on
such functions. Because for providing address to a function, compiler will have to allocate
storage to it. But inline functions doesn't get storage, they are kept in Symbol table.
Function Overloading in C++
If any class have multiple functions with same names but different parameters then they are said
to be overloaded. Function overloading allows you to use the same name for different functions,
to perform, either same or different functions in the same class.
Function overloading is usually used to enhance the readability of the program. If you have to
perform one single operation but with different number or types of arguments, then you can
simply overload the function.
Different ways to Overload a Function
1. By changing number of Arguments.
2. By having different types of argument.
Function Overloading: Different Number of Arguments
In this type of function overloading we define two functions with same names but different
number of parameters of the same type. For example, in the below mentioned program we have
made two sum() functions to return sum of two and three integers.
// first definition
int sum (int x, int y)
{
cout << x+y;
}
int main()
{
sum (10,20);
sum(10.5,20.5);
}
30
31.0
Functions with Default Arguments
When we mention a default value for a parameter while declaring the function, it is said to be as
default argument. In this case, even if we make a call to the function without passing any value
for that parameter, the function will take the default value specified.
sum(int x, int y=0)
{
cout << x+y;
}
Here we have provided a default value for y, during function definition.
int main()
{
sum(10);
sum(10,0);
sum(10,10);
}
10 10 20
First two function calls will produce the exact same value.
for the third function call, y will take 10 as value and output will become 20.
By setting default argument, we are also overloading the function. Default arguments also allow
you to use the same function in different situations just like function overloading.
Rules for using Default Arguments
1. Only the last argument must be given default value. You cannot have a default argument
followed by non-default argument.
2. sum (int x,int y);
3. sum (int x,int y=0);
4. sum (int x=0,int y); // This is Incorrect
5. If you default an argument, then you will have to default all the subsequent arguments after
that.
6.
7. sum (int x,int y=0);
8. sum (int x,int y=0,int z); // This is incorrect
9. sum (int x,int y=10,int z=10); // Correct
10. You can give any value a default value to argument, compatible with its datatype.
Function with Placeholder Arguments
When arguments in a function are declared without any identifier they are called placeholder
arguments.
void sum (int, int);
Such arguments can also be used with default arguments.
void sum (int, int=0);
// constructor definition
A::A()
{
i=1;
}
Default Constructors
Default constructor is the constructor which doesn't take any argument. It has no parameter.
Syntax:
class_name(parameter1, parameter2, ...)
{
// constructor Definition
}
For example:
class Cube
{
int side;
public:
Cube()
{
side=10;
}
};
int main()
{
Cube c;
cout << c.side;
}
10
In this case, as soon as the object is created the constructor is called which initializes its data
members.
A default constructor is so important for initialization of object members, that even if we do not
define a constructor explicitly, the compiler will provide a default constructor implicitly.
class Cube
{
public:
int side;
};
int main()
{
Cube c;
cout << c.side;
}
Parameterized Constructors
These are the constructors with parameter. Using this Constructor you can provide different
values to data members of different objects, by passing the appropriate values as argument.
For example:
class Cube
{
public:
int side;
Cube(int x)
{
side=x;
}
};
int main()
{
Cube c1(10);
Cube c2(20);
Cube c3(30);
cout << c1.side;
cout << c2.side;
cout << c3.side;
}
10
20
30
By using parameterized construcor in above case, we have initialized 3 objects with user defined
values. We can have any number of parameters in a constructor.
Copy Constructors
These are special type of Constructors which takes an object as argument, and is used to copy
values of data members of one object into other object. We will study copy constructors in detail
later.
int main()
{
// student A initialized with roll no 10 and name None
Student A(10);
Destructors in C++
Destructor is a special class function which destroys the object as soon as the scope of object
ends. The destructor is called automatically by the compiler when the object goes out of scope.
The syntax for destructor is same as that for the constructor, the class name is used for the name
of destructor, with a tilde ~ sign as prefix to it.
class A
{
public:
// defining destructor for class
~A()
{
// statement
}
};
Destructors will never have any arguments.
// destructor
~A()
{
cout << "Destructor called";
}
};
int main()
{
A obj1; // Constructor Called
int x=1
if(x)
{
A obj2; // Constructor Called
} // Destructor Called for obj2
} // Destructor called for obj1
Constructor called
Constructor called
Destructor called
Destructor called
When an object is created the constructor of that class is called. The object reference is destroyed
when its scope ends, which is generally after the closing curly bracket } for the code block in
which it is created.
The object obj2 is destroyed when the if block ends because it was created inside the if block.
And the object obj1 is destroyed when the main() function ends.
int main(0
{
for(int i=0;i<5;i++)
{
counter();
}
}
01234
Let's se the same program's output without using static variable.
void counter()
{
int count=0;
cout << count++;
}
int main(0
{
for(int i=0;i<5;i++)
{
counter();
}
}
00000
If we do not use static keyword, the variable count, is reinitialized everytime
when counter()function is called, and gets destroyed each time when counter() functions ends.
But, if we make it static, once initialized count will have a scope till the end of main() function
and it will carry its value through function calls too.
If you don't initialize a static variable, they are by default initialized to zero.
void f()
{
static Abc obj;
}
int main()
{
int x=0;
if(x==0)
{
f();
}
cout << "END";
}
constructor END destructor
You must be thinking, why was the destructor not called upon the end of the scope
of if condition, where the reference of object obj should get destroyed. This is because object
was static, which has scope till the program's lifetime, hence destructor for this object was called
when main() function exits.
int X::i=1;
int main()
{
X obj;
cout << obj.i; // prints value of i
}
1
Once the definition for static data member is made, user cannot redefine it. Though, arithmetic
operations can be performed on it.
int main()
{
X::f(); // calling member function directly with class name
}
These functions cannot access ordinary data members and member functions, but only static data
members and static member functions.
Pointers to Class Members in C++
Defining a Pointer of Class type
We can define pointer of class type, which can be used to point to class objects.
class Simple
{
public:
int a;
};
int main()
{
Simple obj;
Simple* ptr; // Pointer of class type
ptr = &obj;
int main()
{
Data d, *dp;
dp = &d; // pointer to object
d.*ptr=10;
d.print();
dp->*ptr=20;
dp->print();
}
a is 10
a is 20
The syntax is very tough, hence they are only used under special circumstances.
int main(0
{
fp2 = &Data::f; // Assignment inside main()
}
Inheritance in C++
Inheritance is the capability of one class to acquire properties and characteristics from another
class. The class whose properties are inherited by other class is called
the Parent or Base or Super class. And, the class which inherits properties of other class is
called Child or Derived or Sub class.
Inheritance makes the code reusable. When we inherit an existing class, all its methods and fields
become available in the new class, hence code is reused.
NOTE: All members of a class except Private, are inherited
Example of Inheritance
Whenever we want to use something from an existing class in a new class, we can use the
concept on Inheritace. Here is a simple example,
class Animal
{
public:
int legs = 4;
};
int main()
{
Dog d;
cout << d.legs;
cout << d.tail;
}
41
1) Public Inheritance
This is the most used inheritance mode. In this the protected member of super class becomes
protected members of sub class and public becomes public.
class Subclass : public Superclass
2) Private Inheritance
In private mode, the protected and public members of super class become private members of
derived class.
class Subclass : Superclass // By default its private inheritance
3) Protected Inheritance
In protected mode, the public and protected members of Super class becomes protected members
of Sub class.
class subclass : protected Superclass
int main()
{
Base b; //Base class object
Derived d; //Derived class object
b.show(); //Early Binding Ocuurs
d.show();
}
Base class
Derived class
In the above example, we are calling the overrided function using Base class and Derived class
object. Base class object will call base version of the function and derived class's object will call
the derived version of the function.
int main()
{
Base* b; //Base class pointer
Derived d; //Derived class object
b = &d;
b->show(); //Early Binding Occurs
}
Base class
In the above example, although, the object is of Derived class, still Base class's method is called.
This happens due to Early Binding.
Compiler on seeing Base class's pointer, set call to Base class's show() function, without
knowing the actual object type.
int main()
{
Base* b; //Base class pointer
Derived d; //Derived class object
b = &d;
b->show(); //Early Binding Ocuurs
}
Base class
When we use Base class's pointer to hold Derived class's object, base class pointer or reference
will always call the base version of the function
int main()
{
Base* b; //Base class pointer
Derived d; //Derived class object
b = &d;
b->show(); //Late Binding Ocuurs
}
Derived class
On using Virtual keyword with Base class's function, Late Binding takes place and the derived
version of function will be called, because base class pointer pointes to Derived class object.
class A
{
public:
virtual void show()
{
cout << "Base class\n";
}
};
class B: public A
{
private:
virtual void show()
{
cout << "Derived class\n";
}
};
int main()
{
A *a;
B b;
a = &b;
a->show();
}
Derived class
Mechanism of Late Binding in C++
To accomplich late binding, Compiler creates VTABLEs, for each class with virtual function.
The address of virtual functions is inserted into these tables. Whenever an object of such class is
created the compiler secretly inserts a pointer called vpointer, pointing to VTABLE for that
object. Hence when function is called, compiler is able to resovle the call by binding the correct
function using the vpointer.
int main()
{
Base obj; //Compile Time Error
Base *b;
Derived d;
b = &d;
b->show();
}
int main()
{
Base *b;
Derived d;
b = &d;
b->show();
}
void main()
{
Time t1,t2,t3;
1:20:30
2:15:25
3:35:55
First two are values of t1 and t2 and the third is the result of their addition.
// overloaded constructor
Time(int h, int m, int s)
{
hr=h, min=m; sec=s;
}
void main()
{
Time tm(3,15,45);
cout << tm;
}
// overloaded constructor
Time(int h, int m, int s)
{
hr=h, min=m; sec=s;
}
/*
Defining the overloading operator function
Here we are simply comparing the hour, minute and
second values of two different Time objects to compare
their values
*/
bool operator== (Time &t1, Time &t2)
{
return ( t1.hr == t2.hr && t1.min == t2.min && t1.sec == t2.sec );
}
void main()
{
Time t1(3,15,45);
Time t2(4,15,45);
if(t1 == t2)
{
cout << "Both the time values are equal";
}
else
{
cout << "Both the time values are not equal";
}
}
Creating/Opening a File
We create/open a file by specifying new path of the file and mode of operation. Operations can
be reading, writing, appending and truncating. Syntax for file
creation: FilePointer.open("Path",ios::mode);
Example of file opened for writing: st.open("E:\studytonight.txt",ios::out);
Example of file opened for reading: st.open("E:\studytonight.txt",ios::in);
Example of file opened for appending: st.open("E:\studytonight.txt",ios::app);
Example of file opened for truncating: st.open("E:\studytonight.txt",ios::trunc);
#include<iostream>
#include<conio>
#include <fstream>
int main()
{
fstream st; // Step 1: Creating object of fstream class
st.open("E:\studytonight.txt",ios::out); // Step 2: Creating new file
if(!st) // Step 3: Checking whether file exist
{
cout<<"File creation failed";
}
else
{
cout<<"New file created";
st.close(); // Step 4: Closing file
}
getch();
return 0;
}
Writing to a File
#include <iostream>
#include<conio>
#include <fstream>
int main()
{
fstream st; // Step 1: Creating object of fstream class
st.open("E:\studytonight.txt",ios::out); // Step 2: Creating new file
if(!st) // Step 3: Checking whether file exist
{
cout<<"File creation failed";
}
else
{
cout<<"New file created";
st<<"Hello"; // Step 4: Writing to file
st.close(); // Step 5: Closing file
}
getch();
return 0;
}
Here we are sending output to a file. So, we use ios::out. As given in the program, information
typed inside the quotes after "FilePointer <<" will be passed to output file.
int main()
{
fstream st; // step 1: Creating object of fstream class
st.open("E:\studytonight.txt",ios::in); // Step 2: Creating new file
if(!st) // Step 3: Checking whether file exist
{
cout<<"No such file";
}
else
{
char ch;
while (!st.eof())
{
st >>ch; // Step 4: Reading from file
cout << ch; // Message Read from file
}
st.close(); // Step 5: Closing file
}
getch();
return 0;
}
Here we are reading input from a file. So, we use ios::in. As given in the program, information
from the output file is obtained with the help of following syntax "FilePointer >>variable".
Close a File
It is done by FilePointer.close().
#include <iostream>
#include<conio>
#include <fstream>
int main()
{
fstream st; // Step 1: Creating object of fstream class
st.open("E:\studytonight.txt",ios::out); // Step 2: Creating new file
st.close(); // Step 4: Closing file
getch();
return 0;
}
int main()
{
fstream st; // Creating object of fstream class
st.open("E:\studytonight.txt",ios::out); // Creating new file
if(!st) // Checking whether file exist
{
cout<<"File creation failed";
}
else
{
cout<<"New file created"<<endl;
st<<"Hello Friends"; //Writing to file
try block
The code which can throw any exception is kept inside(or enclosed in) atry block. Then, when
the code will lead to any error, that error/exception will get caught inside the catch block.
catch block
catch block is intended to catch the error and handle the exception condition. We can have
multiple catch blocks to handle different types of exception and perform different actions when
the exceptions occur. For example, we can display descriptive messages to explain why any
particular excpetion occured.
throw statement
It is used to throw exceptions to exception handler i.e. it is used to communicate information
about error. A throw expression accepts one parameter and that parameter is passed to handler.
throw statement is used when we explicitly want an exception to occur, then we can
use throwstatement to throw or generate that exception.
int main()
{
int x[3] = {-1,2};
for(int i=0; i<2; i++)
{
int ex = x[i];
try
{
if (ex > 0)
// throwing numeric value as exception
throw ex;
else
// throwing a character as exception
throw 'ex';
}
catch (int ex) // to catch numeric exceptions
{
cout << "Integer exception\n";
}
catch (char ex) // to catch character/string exceptions
{
cout << "Character exception\n";
}
}
}
Integer exception
Character exception
The above program is self-explanatory, if the value of integer in the array x is less than 0, we are
throwing a numeric value as exception and if the value is greater than 0, then we are throwing a
character value as exception. And we have two different catch blocks to catch those exceptions.
Special exception
Special exception
In the case above, both the exceptions are being catched by a single catch block. We can even
have separate catch blocks to handle integer and character exception along with th
generalised catchblock.