Object Oriented Programming With C++ 18CS44
Object Oriented Programming With C++ 18CS44
Introduction
Ernest Tello, A well known writer in the field of artificial intelligence, compared the
evolution of software technology to the growth of the tree. Like a tree, the software
evolution has had distinct phases “layers” of growth. These layers were building up one
by one over the last five decades as shown in fig. with each layer representing and
improvement over the previous one.
1, 0
Machine Language
Assembly Language
Procedure- Oriented
Main Program
Function-4
Function-5
Procedure oriented programming basically consists of writing a list of instructions for the
computer to follow, and organizing these instructions into groups known as functions. We
normally use flowcharts to organize these actions and represent the flow of control from
one action to another.
In a multi-function program, many important data items are placed as global so that
they may be accessed by all the functions. Each function may have its own local data.
Global data are more vulnerable to an inadvertent change by a function. In a large
program it is very difficult to identify what data is used by which function. In case we
need to revise an external data structure, we also need to revise all functions that access
the data. This provides an opportunity for bugs to creep in.
Another serious drawback with the procedural approach is that we do not model real
world problems very well. This is because functions are action-oriented and do not really
corresponding to the element of the problem.
DATA DATA
Communication
FUNCTION FUNCTION
Object
DATA
FUNCTION
Objects
Objects are the basic run time entities in an object-oriented system. They may represent a
person, a place, a bank account, a table of data or any item that the program has to
handle. They may also represent user-defined data such as vectors, time and lists.
When a program is executed, the objects interact by sending messages to one another.
For example, if “customer” and “account” are to object in a program, then the customer
object may send a message to the count object requesting for the bank balance. Each
object contain data, and code to manipulate data.
fig shows two notations that are popularly used in object- oriented analysis and design.
OBJECTS: STUDENT
DATA
Name
Date-of-birth
Marks
FUNCTIONS
Total
Average
Display
………
Representing an object
Classes
We just mentioned that objects contain data, and code to manipulate that data. The entire
set of data and code of an object can be made a user-defined data type with the help of
class. In fact, objects are variables of the type class. Once a class has been defined, we
can create any number of objects belonging to that class. Each object is associated with
the data of type class with which they are created.
A class is thus a collection of objects similar types. For examples, Mango, Apple and
orange members of class fruit. Classes are user-defined that types and behave like the
built-in types of a programming language. The syntax used to create an object is not
different then the syntax used to create an integer object in C. If fruit has been defines as
a class, then the statement
Fruit Mango;
The wrapping up of data and function into a single unit (called class) is known as
encapsulation. Data and encapsulation is the most striking feature of a class. The data is
not accessible to the outside world, and only those functions which are wrapped in the
class can access it. These functions provide the interface between the object’s data and
the program. This insulation of the data from direct access by the program is called data
hiding or information hiding.
Abstraction refers to the act of representing essential features without including the
background details or explanation. Classes use the concept of abstraction and are defined
as a list of abstract attributes such as size, wait, and cost, and function operate on these
attributes. They encapsulate all the essential properties of the object that are to be created.
Inheritance
Inheritance is the process by which objects of one class acquired the properties of objects
of another classes. It supports the concept of hierarchical classification. For example,
the bird, ‘robin’ is a part of class ‘flying bird’ which is again a part of the class ‘bird’.
The principal behind this sort of division is that each derived class shares common
characteristics with the class from which it is derived as illustrated in fig .
In OOP, the concept of inheritance provides the idea of reusability. This means that we
can add additional features to an existing class without modifying it. This is possible by
deriving a new class from the existing one. The new class will have the combined feature
of both the classes. The real appeal and power of the inheritance mechanism is that it
BRD
Attributes
Features
Lay Eggs
Polymorphism
Fig. 1.7 illustrates that a single function name can be used to handle different number
and different types of argument. This is something similar to a particular word having
several different meanings depending upon the context. Using a single function name to
perform different type of task is known as function overloading.
Shape
Draw
Fig. Polymorphism
Binding refers to the linking of a procedure call to the code to be executed in response to
the call. Dynamic binding means that the code associated with a given procedure call is
not known until the time of the call at run time. It is associated with polymorphism and
inheritance. A function call associated with a polymorphic reference depends on the
dynamic type of that reference.
Message Passing
An object-oriented program consists of a set of objects that communicate with each other.
The process of programming in an object-oriented language, involves the following basic
steps:
1. Creating classes that define object and their behavior,
2. Creating objects from class definitions, and
3. Establishing communication among objects.
Objects communicate with one another by sending and receiving information much the
same way as people pass messages to one another. The concept of message passing
makes it easier to talk about building systems that directly model or simulate their real-
world counterparts.
Benefits of OOP
• Through inheritance, we can eliminate redundant code extend the use of existing
classes.
• We can build programs from the standard working modules that communicate
with one another, rather than having to start writing the code from scratch. This
leads to saving of development time and higher productivity.
• The principle of data hiding helps the programmer to build secure program that
cannot be invaded by code in other parts of a programs.
• It is possible to have multiple instances of an object to co-exist without any
interference.
• It is possible to map object in the problem domain to those in the program.
• It is easy to partition the work in a project based on objects.
• The data-centered design approach enables us to capture more detail of a model
can implemental form.
• Object-oriented system can be easily upgraded from small to large system.
• Message passing techniques for communication between objects makes to
interface descriptions with external systems much simpler.
• Software complexity can be easily managed.
Application of OOP
OOP has become one of the programming buzzwords today. There appears to be a great
deal of excitement and interest among software engineers in using OOP. Applications of
OOP are beginning to gain importance in many areas. The most popular application of
object-oriented programming, up to now, has been in the area of user interface design
such as window. Hundreds of windowing systems have been developed, using the OOP
techniques.
Real-business system are often much more complex and contain many more objects
with complicated attributes and method. OOP is useful in these types of application
because it can simplify a complex problem. The promising areas of application of OOP
include:
• Real-time system
• Simulation and modeling
• Object-oriented data bases
• Hypertext, Hypermedia, and expertext
• AI and expert systems
• Neural networks and parallel programming
• Decision support and office automation systems
• CIM/CAM/CAD systems
Introduction of C++
C++ is an object-oriented programming language. It was developed by Bjarne Stroustrup
at AT&T Bell Laboratories in Murray Hill, New Jersey, USA, in the early 1980’s.
Stroustrup, an admirer of Simula67 and a strong supporter of C, wanted to combine the
best of both the languages and create a more powerful language that could support object-
oriented programming features and still retain the power and elegance of C. The result
was C++. Therefore, C++ is an extension of C with a major addition of the class
construct feature of Simula67. Since the class was a major addition to the original C
language, Stroustrup initially called the new language ‘C with classes’. However, later in
1983, the name was changed to C++. The idea of C++ comes from the C increment
operator ++, thereby suggesting that C++ is an augmented version of C.
C+ + is a superset of C. Almost all c programs are also C++ programs. However, there
are a few minor differences that will prevent a c program to run under C++ compiler. We
shall see these differences later as and when they are encountered.
The most important facilities that C++ adds on to C care classes, inheritance, function
overloading and operator overloading. These features enable creating of abstract data
types, inherit properties from existing data types and support polymorphism, thereby
making C++ a truly object-oriented language.
Application of C++
C++ is a versatile language for handling very large programs; it is suitable for virtually
any programming task including development of editors, compilers, databases,
communication systems and any complex real life applications systems.
• Since C++ allow us to create hierarchy related objects, we can build special
object-oriented libraries which can be used later by many programmers.
• While C++ is able to map the real-world problem properly, the C part of C++
gives the language the ability to get closed to the machine-level details.
• C++ programs are easily maintainable and expandable. When a new feature needs
to be implemented, it is very easy to add to the existing structure of an object.
• It is expected that C++ will replace C as a general-purpose language in the near
future.
Simple C++ Program
Let us begin with a simple example of a C++ program that prints a string on the
screen.
Printing A String
#include<iostream>
Using namespace std;
int main()
{
cout<<” c++ is better than c \n”;
return 0;
}
Program feature
Like C, the C++ program is a collection of function. The above example contain only one
function main(). As usual execution begins at main(). Every C++ program must have a
main(). C++ is a free form language. With a few exception, the compiler ignore carriage
return and white spaces. Like C, the C++ statements terminate with semicolons.
Comments
C++ introduces a new comment symbol // (double slash). Comment start with a double
slash symbol and terminate at the end of the line. A comment may start anywhere in the
line, and whatever follows till the end of the line is ignored. Note that there is no closing
symbol.
The double slash comment is basically a single line comment. Multiline comments can
be written as follows:
// This is an example of
// C++ program to illustrate
// some of its features
The C comment symbols /*,*/ are still valid and are more suitable for multiline
comments. The following comment is allowed:
/* This is an example of
C++ program to illustrate
some of its features
*/
Output operator
Causes the string in quotation marks to be displayed on the screen. This statement
introduces two new C++ features, cout and <<. The identifier cout(pronounced as C out)
is a predefined object that represents the standard output stream in C++. Here, the
standard output stream represents the screen. It is also possible to redirect the output to
other output devices. The operator << is called the insertion or put to operator.
#include <iostream>
The #include directive instructs the compiler to include the contents of the file enclosed
within angular brackets into the source file. The header file iostream.h should be
included at the beginning of all programs that use input/output statements.
Namespace
Namespace is a new concept introduced by the ANSI C++ standards committee. This
defines a scope for the identifiers that are used in a program. For using the identifier
defined in the namespace scope we must include the using directive, like
Here, std is the namespace where ANSI C++ standard class libraries are defined. All
ANSI C++ programs must include this directive. This will bring all the identifiers defined
in std to the current global scope. Using and namespace are the new keyword of C++.
In C++, main () returns an integer value to the operating system. Therefore, every main ()
in C++ should end with a return (0) statement; otherwise a warning an error might occur.
Since main () returns an integer type for main () is explicitly specified as int. Note that
the default return type for all function in C++ is int. The following main without type and
return will run with a warning:
main ()
{
…………..
………….
}
More C++ Statements
Let us consider a slightly more complex C++ program. Assume that we should like to
read two numbers from the keyboard and display their average on the screen. C++
statements to accomplish this is shown in program .
Int main()
} //end
Returnof0;example
Variables
The program uses four variables number1, number2, sum and average. They are declared
as type float by the statement.
All variable must be declared before they are used in the program.
Input Operator
The statement
cin >> number1;
is an input statement and causes the program to wait for the user to type in a number. The
number keyed in is placed in the variable number1. The identifier cin (pronounced ‘C in’)
is a predefined object in C++ that corresponds to the standard input stream. Here, this
stream represents the keyboard.
The operator >> is known as extraction or get from operator. It extracts (or takes) the
value from the keyboard and assigns it to the variable on its right fig . This corresponds to
a familiar scanf() operation. Like <<, the operator >> can also be overloaded.
Cin >>
45.5
Keyboard
Fig
We have used the insertion operator << repeatedly in the last two statements for printing
results.
The statement
First sends the string “Sum = “ to cout and then sends the value of sum. Finally, it sends
the newline character so that the next output will be in the new line. The multiple use of
<< in one statement is called cascading. When cascading an output operator, we should
ensure necessary blank spaces between different items. Using the cascading technique,
the last two statements can be combined as follows:
STRUCTURE
INTRODUCTION
Functions are the building blocks of C++ programs where all the program activity
occurs. Function is a collection of declarations and statements.
#include<iostream.h>
include<conio.h> void
main()
}
//function definition void disp()
In C++, a function must be defined prior to it’s use in the program. The function definition contains the
code for the function. The function definition for display_message () in program 6.1 is given below the
main () function. The general syntax of a function definition in C++ is shown below:
Here, the type specifies the type of the value to be returned by the function. It may be any
valid C++ data type. When no type is given, then the compiler returns an integer value from the function.
Name_of_the_function is a valid C++ identifier (no reserved word allowed) defined by the
user and it can be used by other functions for calling this function.
Argument list is a comma separated list of variables of a function through which the
function may receive data or send data when called from other function. When no parameters,
the argument list is empty as you have already seen in program . The following function illustrates
the concept of function definition :
void add()
int a,b,sum;
sum=a+b;
}
The above function add ( ) can also be coded with the help of arguments of
parameters as shown below:
int sum;
sum=a+b;
ARGUMENTS TO A FUNCTION
Arguments(s) of a function is (are) the data that the function receives when
called/invoked from another function.
It is not always necessary for a function to have arguments or parameters. The functions
add ( ) and divide ( ) in program did not contain any arguments. The following example illustrates
the concept of passing arguments to function SUMFUN ( ):
void main()
Semicolon here
………………………….
………………………….
No semicolon here
………………………….
………………………….
No semicolon here
DEFAULT ARGUMENTS
int calc(int U)
if (U % 2 = = 0)
return U+10;
else
return U+2
cout<<calc(CNT) <<M;
cout<<endl;
void main ()
pattern(‘*’);
pattern (‘#’,4);
pattern (‘@’,3);
CONSTANT ARGUMENTS
A C++ function may have constant arguments(s). These arguments(s) are/are treated as
constant(s). These values cannot be modified by the function.
For making the arguments(s) constant to a function, we should use the keyword const
as given below in the function prototype :
(a) Value
(b) Reference
Call by Value: - In this method the values of the actual parameters (appearing in the function
call) are copied into the formal parameters (appearing in the function definition), i.e., the function
creates its own copy of argument values and operates on them. The following program illustrates this
concept :
//calculation of compound interest using a function
#include<iostream.h>
#include<conio.h>
void main()
clrscr();
cout<<”\nPrincipal:”;
cin>>principal;
cout<<”\nRate of interest:”;
cin>>rate;
cin>>time;
}
//function definition calculate()
interest = p* (pow((1+r/100.0),t))-p;
Call by Reference: - A reference provides an alias – an alternate name – for the variable, i.e., the
same variable’s value can be used by two different names : the original name and the alias name.
In call by reference method, a reference to the actual arguments(s) in the calling program is passed
(only variables). So the called function does not create its own copy of original value(s) but works with
the original value(s) with different name. Any change in the original data in the called function gets
reflected back to the calling function.
It is useful when you want to change the original variables in the calling function by the called
function.
#include<iostream.h>
#include<conio.h>
void main()
clrscr();
int num1,num2;
cout<<endl<<”num2: “<<num2;
cout<<endl<<”num2: “<<num2;
getch();
}
//function fefinition swap()
int temp=a;
a=b;
b=temp;
INLINE FUNCTIONS
These are the functions designed to speed up program execution. An inline function is
expanded (i.e. the function code is replaced when a call to the inline function is made) in the line where it
is invoked. You are familiar with the fact that in case of normal functions, the compiler have to jump to
another location for the execution of the function and then the control is returned back to the instruction
immediately after the function call statement. So execution time taken is more in case of normal
functions. There is a memory penalty in the case of an inline function.
inline function_header
{
body of the function
For example,
}
void main()
cin>>num1>>num2;
An inline function definition must be defined before being invoked as shown in the above example.
Here min ( ) being inline will not be called during execution, but its code would be inserted into
main ( ) as shown and then it would be compiled.
If the size of the inline function is large then heavy memory pentaly makes it not so useful
and in that case normal function use is more useful.
The inlining does not work for the following situations :
Note:
For data types, operators and expressions refer c notes.