You are on page 1of 304

M.Sc.

Information Technology
(DISTANCE MODE)

DCS 115
Object Oriented Programming

I SEMESTER
COURSE MATERIAL

Centre for Distance Education


Anna University Chennai
Chennai 600 025

Author

Mr. Ahamed Ali


Lecturer
Department of Information Technology
Velammal Engineering College
Chennai 600 066

Reviewer

Dr. Rhymend Utharayaraj


Professor
Ramanujan Computing Centre
Anna University Chennai
Chennai 600 025

Editorial Board

Dr. C. Chellappan

Dr. T.V. Geetha

Professor
Department of Computer Science
and Engineering
Anna University Chennai
Chennai 600 025

Professor
Department of Computer Science
and Engineering
Anna University Chennai
Chennai 600 025

Dr. H. Peeru Mohamed


Professor
Department of Management Studies
Anna University Chennai
Chennai 600 025

Copyrights Reserved
(For Private Circulation only)

ACKNOWLEDGEMENT
I would like to express my sincere thanks to Dr.C.Chellapppan, Professor and
Deputy Director, Centre for Distance Education, Anna University, Chennai for providing
me theme the opportunity to prepare this course material.

I am deeply Indebted to the course material reviewer Dr.V.Rhymend Uthariaraj


Director RCC, Anna University Chennai for giving valuable comments which have
resulted in a better presentation of the course material.

I would like to thank Prof. N. Duraipandian, HOD IT, Velammal Engineering


College for having suggested writing the course material and for the constant
encouragement throughout the preparation of the course material.

I also express my special debt of gratitude to all my colleagues of Velammal


Engineering College, family members and friends for their constant encouragement.

I am very much grateful to acknowledge the following sources from where the
inputs where drawn to prepare this course material, to meet the requirements of the
syllabus
H.Schildt, Teach yourself C++, Osborne 2000
E. Balagurusamy Object Oriented Progamming with c++, Tat Mcgraw till 2000
Walter Savitch, Problem Solving with c++, Addison Wesly 2002 (4th Edition) 1995
Rick Mercer, Computing fundamentals with c++, Object Oriented Programming &
design, Mac Millan Press IInd edition 1995
Stroustrup, B., The c++ Programming Language Addision-Wesley,1997
(3rd edition)
Bruce Eckel, Thinking in c++, 2000 prentice Hall.
Jamie Jaworski Java2 Certification guide ,2000, New Riders
http:// www. Sun.com
Brouce Eckel, Thinking in Java, 2000 prentice Hall
E. Balagurusamy, Programming with Java, Tata Mcgraw hill 2000.

Patrick Naughton & Herbert Schildt Java 2:

The Complete Reference, Tata

Mcgraw hill, 2000


David Flanagan, Java in a Nutshell, O.Rcilly 1999.
Mr. S. AHAMED ALI M.E.,
Senoir Lecturer,
Department Of Information Technology,
Velammal Engineering College,
Chennai 600 066.

DCS 115 OBJECT ORIENTED PROGRAMMING


UNIT I
C++ Programming: Introduction to C++ - Tokens, expressions and control structures
Functions in C++ - Classes and Objects Constructors Destructors Operator
Overloading and Type conversions.
UNIT II
Inheritance and Polymorphism and Files: Inheritance Multilevel inheritance Multiple
inheritance Hierarchical inheritance Hybrid inheritance Virtual base class
Abstract class Virtual functions pure virtual functions File stream operations
Sequential Input and Output operations Random Access Error handling during file
operation.
UNIT III
Templates and Exception Handling: Templates Function templates class Templates
Overloading of Template Functions Member function Templates Exception
handling basics Exception handing mechanism Throwing mechanism catching
mechanism Rethrowing an exception specifying exceptions.
UNIT IV
Introduction to JAVA:Overview of Java language Implementing a Java Program Java
virtual Machine Operators and expressions Classes, Objects and methods
Constructors Overriding methods Final class Finalizer methods Abstract classes
and methods Visibility controls Arrays Strings and vectors.
UNIT V
Interfaces, Packages and Threads: Interface Extending Interface Implementation
Interfaces Accessing Interface variables Java API packages creating packages
Accessing and using packages Adding and Hiding classes creating threads
Extending the Thread class Stopping and Blocking a Thread Life cycle of a thread
Thread priority Synchronization.
TEXT BOOKS
1. E. Balagurusamy, Object Oriented Programming, 2nd Edition, Tata McGraw Hill
Pub. Co., Delhi, 2001.
2. E. Balagurusamy, Programming with Java, A Primer, Tata McGraw Hill Pub. Co.,
Delhi, 2000.
REFERENCES
1. Herbert Schildt, C++ : The Complete Reference, Tata McGraw Hill, 1999.
2. Herbert Schildt, Java 2 : The Complete Reference, Fourth Edition, Tata McGraw
Hill, 2001.
3. Kamthane, A.N., Object Oriented Programming with ANSI and Turbo C++, Pearson
Education, Delhi, 2003.

DCS 115

OBJECT ORIENTED PROGRAMMING

Page Nos.

CHAPTER 1 - INTRODUCTION TO C++ PROGRAMMING

CHAPTER 2 - FUNCTIONS

21

CHAPTER 3 - CLASSES AND OBJECTS IN C++

37

CHAPTER 4 - OPERATOR OVERLOADING AND TYPE


CONVERSIONS

65

CHAPTER 5 - INHERITANCE

83

CHAPTER 6 - POLYMORPHISM

113

CHAPTER 7 - FILES

123

CHAPTER 8 - TEMPLATES

143

CHAPTER 9 - EXCEPTION HANDLING

159

CHAPTER 10 - INTRODUCTION TO JAVA PROGRAMMING

175

CHAPTER11 - OBJECT OREINTED CONCEPTS IN JAVA

197

CHAPTER 12 - ARRAYS AND VECTORS

224

CHAPTER 13 - STRING HANDLING

235

CHAPTER 14 - INTERFACES

249

CHAPTER 15 -PACKAGES

260

CHAPTER 16 - MULTITHREADED PROGRAMMING

273

DCS 116

DATA STRUCTURES
Page Nos.

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 1

INTRODUCTION TO C++
PROGRAMMING
Structure of the Unit

Basic C++ I/O statements


Basic I/O Manipulators
C++ Tokens
Keywords
Identifiers
Constants
Operators

Data Types
Built in Data Types
User Defined Data Types
Derived Data Types
Control Structures
Expressions
Conditional Expressions

1.1. Introduction
C++ is an object oriented language. It is an expanded version of C
language.C++ was invented by Bjarne Stroustrup in 1979 at Bell laboratories in
Murray Hill, New Jersy. C++ was originally called as C with classes , however
the name was changed to C++ in 1983.
C++ is a superset of C, hence almost all concepts available in C is also
available in C++.This chapter discuss about all the fundamental concepts of this
programming language. This chapter introduces basic console I/O statements and
manipulators. This chapter then discusses all C++ tokens, data types and control
structures. This chapter provides the necessary background to understand the C++
concepts presented in the subsequent chapters.
1.2 Learning Objectives

To introduce the basic console I/O statements


To write simple C++ programs
To write programs using I/O manipulators
To understand the various C++ tokens
To discuss the three categories of data types
To understand the various control structures
To show how expressions can be used in C++ programs.
1

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

1.3 Basic Console I/O Statements in C++


Since C++ is a superset of C, all elements of the C language are also contained
in the C++ language. Therefore, it is possible to write C++ programs that look just like
C programs. You can still use functions such as printf( ) and scanf( ), C++ I/O is
performed using I/O operators instead of I/O functions.
The output operator is <<. To output to the console, we write
cout << expression;
Where expression can be any valid C++ expression, including another output expression.
cout << Hello World .\n;
cout << 236.99;
The input operator is >>. To input values from keyboard, use
cin >> variables;
For example:
cin>>a>>b.
Example 1:
The following C++ program makes use of the basic Console I/O statements to read
and print two integer variables.
#include < iostream.h>
int main( )
{
// variables declaration
int i,j;
cout << Enter two integers \n ;
// input two integers
cin >> i ;
cin>>j;
// output i then j and newline
cout << i= << i
cout<< j= << j << \n;
return 0;
}

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Output of the Program


Enter two integers
10 20
i=10 j=20

You can input any items as you like in one input statement. As in C,
individual data items must be separated by whitespace characters (spaces, tabs,
or newlines). When a string is read, input will stop when the first whitespace
character is encountered.
NOTE :
A comment in C++ can be given in a same way as we give in C. /* .... */ is a
multline comment and // is a single line comment. For Example
/* This is a multiline comment and can
Span for multilines.This comment
is similar to C */
// This is a singleline comment

Have you Understood Questions?


1. Write the two basic C++ I/O statements.
2. How will you write multiple line comment in C++?
1.4 Basic I/O Manipulators
C++ supports some I/O manipulators to format the display.The most
frequently used manipulators are endl and setw.To use these functions you have
to include iomanip.h header file.
The end manipulator is similar to the newline character \n.Thus the statement
cout<<a<<endl<<b<<c<<,endl;
will print the value of a,b and c in newline.
The setw manipulator is used to specify the width of the data to be
displayed.Note that in C++ characters are left justified and numbers are right
justified.Example
cout<<setw(5)<<123;willoutput
1 2 3
Here we have set the width as 5; since numbers are right justified the first two
columns appear blank. Now consider this example
cout<<setw(10)<<Hello,thentheoutputwillbe
H E l l o
Apart from these manipulators C++ allows us to create our own manipulators.
3

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Have you Understood Questions?


1. The width of an integer variable has to bet set to 5.How will you set it?
2. Write the manipulator that will cause a line break.
1.5 C++ Tokens
In C++ every statement is made up of smallest individual elements called tokens.
Tokens are the basic lexical elements. Tokens in C++ include the following

Keywords
Identifiers
Constants
Operators

1.5.1 Keywords
The list given below contains all the C++ keywords. Every keyword will perform a
specific operation in C++. Keywords in C++ cannot be redefined by a programmer;
further keywords cannot be used as identifier name.
and
bool
compl
do
export
goto
namespace
or_eq
return
struct
try
using
xor

Anna University Chennai

and_eq
break
const
double
extern
if
new
private
short
switch
typedef
virtual
xor eq

asm
case
const_cast
dynamic_cast
false
inline
not
protected
signed
template
typeid
void

auto
catch
continue
else
float
int
not_eq
public
sizeof
this
typename
volatile

bitand
char
default
enum
for
long
operator
register
static
throw
union
wchar t

bitor
class
delete
explicit
friend
mutable
or
reinterpret_cast
static_cast
true
unsigned
while

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

1.5.2 Identifiers
Every named program component in C++ like variables, functions, arrays, classes
etc. must have legal identifier (name) .In C++ all variables must be declared before
they are used. Furthermore, variables must be used in a manner consistent with
their associated type.
An identifier is formed with a sequence of letters (including _ ) and digits. The
first character must be a letter. Identifiers are case sensitive, i.e., first_name is
different from First_name.
Examples of valid variable names are
myname, jj, name123
Examples of invalid variables

12B
Basic pay
ABC,1

Invalid variable name since its starts with a number.


Invalid variable name since it has a space
Invalid variable name since , is a special character

1.5.3 Constants
Constants refer to values that do not change during the execution of the program.
Examples for constants are
1998
25.789
Hello World
a

Integer constant
Floating point constant
String constant
Character constant

1.5.4 Operators
The various operators in C++ and their associatively are listed below in the
Table 1.1. The Operators are listed according to their precedence
Associativity

Operator

left to right

::

left to right

() [], ->, ., typeid, casts,

Right to left

! (negation), ~ (bit-not)

Right to left

new, delete ++, , - (unary) , * (unary), &


(unary), sizeof

Left to right

*, /, % (modulus)
5

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Left to right

-+

Left to right

<<, >>

Left to right

<, <=, >, >=

Left to right

= =, !=

Left to right

& (bit-and), | (bit-or)

Left to right

^ (bit-xor)

Left to right

&& (logical and)

Left to right

|| (logical or)

Right to left

?:

Left to right

throw

Left to right

Right to left

=, +=, -=, /=, %=, >>=, &=

Table 1.1 Operator Precedence


Have you Understood Questions?
1. Write the four basic C++ tokens.
2. How does a constant differ from a variable
1.6
Data Types
C++ supports three categories of data types.They are

Built in Data types


User Defined Data types
Derived Data types

1.6.1 Built in Data Types


C++ supports the following built in data types. They are
Signed integer:
The signed integer types are short int (abbreviation short), int and long int
(abbreviation long). Optionally the keyword signed can be used in front of these
definitions, e.g. signed int. The size of these variables depends on the
implementation of the compiler. The only rule for the length of short, int, long is:
short<= int<=long, i. e. they may have all the same size. Examples for signed
integer variable declarations are listed below.

int x,y
long int a;

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

Unsigned integer:
The unsigned integer types are unsigned short int (abbreviation unsigned
short), unsigned int and unsigned long int (abbreviation unsigned long). The sizes
follow the same rules as for singed integers. Examples for unsigned integer variable
declarations are listed below.

NOTES

unsigned short a;
unsigned long x;

Character type:
Character type variables can hold a single character. The character types
are char, signed char and unsigned char. Note that a simple char can mean either
signed or unsigned, as this is not defined in ANSI C. It depends therefore only on
the implementation of the compiler. A variable can be declared as character type
as given below.

char x

Floating point types:


The floating point types are float, double and long double. A float variable
has a single precision value. A double or long double variable has at least single
precision, but often has double precision (however, this depends on the
implementation). The rule for the size of floating point types is: float <=
double<=long double. Examples for floating point variable declarations are listed
below.

double m
float f

Boolean type:
Standard C++ has an explicit boolean type bool. (C only has an implicit
boolean type: 0 = logical false, nonzero = logical true). This type is used to express
results of logical operations. The value of the Boolean type is symbolic, either
false or true. To ensure compatibility with C and older C++ compiler, the boolean
type is automatically converted to/from integer values. In these cases an integer
value of 0 indicates false and a non-zero value indicates true. A variable can be
declared as boolean type as given below.

bool logic

Empty type:
The special type void is used for three occasions: defining a function
without parameters, defining a function that has no return value and for generic
pointers. Example
7

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

void func()
The following Table 1.2 with sizes of data types has been generated on a
Windows NT and Linux system
Data Type

Size in Bytes for


Windows NT

Size in Bytes for


Linux System

Char
Short int
Int
Float
Double
long double

1
2
4
4
8
8

1
2
4
4
8
12

Table 1.2 Data Types and their Size


1.6.2 User Defined Data Types
Structures, Unions and Classes
A structure is a collection of one or more variables; the variables may belong to
different types, grouped together under a single name for easy handling.
A structure in C++ can be declared as
struct point
{
int x;
int y;
};
The keyword struct introduces a structure declaration, which is a list of declarations
enclosed in braces. A struct declaration defines a user defined type. The close
brace that terminates the list of members may be followed by a list of variables,
just as for any basic type. For example the variables of the struct point can be
declared as
struct point a,b,c ;
The members of the structures are accessed using dot operator. Example
a.x=10, b.x=20.
If a structure pointer is created then the members are accessed using -> operator.
For example
a->x=10 ,b->x=20.
A union is a user defined data type that may hold (at different times) objects of
different types and sizes, with the compiler keeping track of size and alignment
requirements. Unions provide a way to manipulate different kinds of data in a
Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

single area of storage, without embedding any machine-dependent information in the


program.The syntax is based on structures:

NOTES

union u1
{
int i;
float f;
char c;
} u;
The variable u will be large enough to hold the largest of the three types; the
specific size is implementation-dependent. In this example the size of the union
variable will be 4 bytes (since the float variable occupies 4 bytes). Unions allow
only one variable to refer at a time; all union variables cannot be accessed
simultaneously.
Syntactically, members of a union are accessed as
union-name.member
or
union-pointer->member.
Classes are discussed in detail in chapter 3
Enumeration Data Type
An enumeration is a set of named integer constants that specify all the allowable
set of values a variable of that type may have.The general syntax of enumeration
data type is
enum enum-name{enumeration values} ;
Example
enum states{Andhara,Karnataka,Kerala,Tamilnadu} ;
enum currency { dollar,euro,rupees}
Once the enumeration is created, we can declare variables of that type. Example
coin money;
states s;
Given these declarations the following statements are valid. The statements
if(s= =kerala)
cout<<Welcome to Gods Own Country;
and
cin>>money;
if(money==rupees)
{
//do this
9

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

}
are perfectly valid.
1.6.3 Derived Data Type
Arrays
In C++ arrays are handled in the same way as of C. For example the declaration
int a[10];
defines an array of size 10, that is, a block of 10 consecutive objects named a[0], a[1],
...,a[9].

The notation a[i] refers to the i-th element of the array.


Pointers
A pointer is a variable that contains the address of a variable. Pointers in C++ are
declared and initialized as in C.
Examples
int a= 1, b= 2
int *ip;
/* ip is a pointer to int */
ip = &a
/* ip now points to a*/
b= *ip;
/* bis now 1 */
*ip = 0;
/* a is now 0 */
From these examples you can see that the declaration and usage of pointer in C and
C++ are similar. Pointers are extensively used in C++ for dynamic memory management
and to achieve run time polymorphism.
Functions
Functions provide modular structure to the programming. Functions in C++ were
discussed in detail in chapter 2.
Have you Understood Questions?
1.
2.
3.
4.

Mention the three categories of data types available in C++


How a structure does differ from union?
What do you mean by enumeration data type?
What is a pointer variable?

Anna University Chennai

10

DCS 115

OBJECT ORIENTED PROGRAMMING

1.7 Control Structures

NOTES

The control-flow of a language specifies the order in which computations are performed.
The various control structures supported by C++ is discussed below.
If-Else
The if-else statement is used for making decisions. The syntax is
if (expression)
statement1
else
statement2
The flow chart for if else is given below.

True

False
Expression

Statements

Statements

Where the else part is optional. The expression is evaluated; if it is true


(that is, if expression has a non-zero value), statement1 is executed. If it is false
(expression is zero) and if there is an else part, statement2 is executed instead.
Example
if(a>b)
c=a;
else
c=b;
Flow Chart

True

False
a>b

C=a

C=b
11

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

In this example the value of a will be assigned c if a is greater than b else the value of b
will be assigned to c.
Else if
The syntax for else-if ladder structure is given below
if (expression)
statement
else if (expression)
statement
else if (expression)
statement
else if (expression)
statement
else
statement
This sequence of if statements is the most general way of writing a multi-way
decision. The expressions are evaluated in order; if an expression is true, the
statement associated with it is executed, and this terminates the whole chain.
The last else part handles the default case where none of the other conditions is
satisfied.
An example for this construct is given below.
if (( a>b) && (a>c))
cout<<A is big;
else if ((b>a) && (b>c))
cout<<B is big;
else if ((c>a) && (c>b))
cout<<C is big;
Switch Statement
The switch statement is a multi-way decision that tests whether an expression
matches one of a number of constant integer values, and branches accordingly.
The syntax of switch statement is given below.
switch (expression)
{
case const-expr:
statements

Anna University Chennai

12

DCS 115

OBJECT ORIENTED PROGRAMMING

case const-expr:
statements
default:
statements
}

NOTES

Each case is labeled by one or more integer-valued constants or constant


expressions. If a case matches the expression value, execution starts at that case.
A default is optional; it gets executed if none of the cases is matched. Cases and
the default clause can occur in any order. An example for switch case construct is
given below.
switch(k)
{
case 1:
cout<< The value of k is 1 ;
break;
case 2:
cout<< The value of k is 1 ;
break;
case 3:
cout<< The value of k is 1 ;
break;
default:
cout<< The value of k is other than 1,2,3 ;
}
Here based on the value of k case 1, case 2 or case 3 will be executed .I f the value
of k is other than 1, 2 and 3 then default case will be executed. The break statement

causes an immediate exit from the switch after the code for one case is done,
execution falls through to the next case unless you leave the switch .You can use
break statement to explicitly come out of the switch.
Looping Statements
C++ supports three type of looping statements as C language .They are

While Loop
DoWhile Loop
For Loop

While Loop
The Syntax of while loop is
while (expression)
{
13

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

statements;

NOTES

}
the expression is evaluated. If it is non-zero(i.e. if the condition given in the
expression is true) , statements is executed and expression is re-evaluated. This
cycle continues until expression becomes zero (false).
Example
i=0; //initial value
while(i<100) //condition
{
cout<<i;
i=i+2 //increment
}
Here in this example the while loop prints all the even numbers between 0 and
100.Note the while loop checks for the condition i<100 every time when the loop
iterates.
For Loop
The for statement is given below

for (expr1; expr2; expr3)


{
statements ;
}
is equivalent to the while statement given in the previous example
expr1
while (expr2)
{
statement
expr3 ;
}

Most commonly, expr1 and expr3 are assignments or function calls and expr2 is a
relational expression. Any of the three parts can be omitted, although the
semicolons must remain. If expr1 or expr3 is omitted, it is simply dropped from
the expansion. If the test, expr2, is not present, it is taken as permanently true.
Anna University Chennai

14

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Example
for (i=0 ;i<100 ;i=i+2)
cout<<i;
This is the for loop version of the previous program for printing even numbers
between 0 and 100.Here we can note that in for loop the initilaization,condition
and increment statements are kept together in the for statement.
Do...while Loop
The while and for loops test the termination condition at the top. But the dowhile, tests at the bottom after making each pass through the loop body; the body
is always executed at least once. The Syntax of do while statement is
do
{
Statements;
}while (expression);
The statement is executed, and then expression is evaluated. If it is true, statement
is evaluated again, and so on. When the expression becomes false, the loop
terminates. do...while loop is essential when we expect the loop to be executed at
least once irrespective of the condition.
Example
i=0; //initialization
do
{
cout<<i;
i+=2; //increment
}while(i<100); //condition.
Break and Continue Statements
Sometimes it will require exiting from a loop other than by testing at the top or
bottom. The break statement provides an early exit from for, while, and do, just as
from switch. A break causes the innermost enclosing loop or switch to be exited
immediately. The example given below helps a better understanding about break
statement.
15

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

while (i<100)
{
cout<<ENTER NEGATIVE NUMBER TO EXIT;
cin>>a;
if(a < 0)
break;
sum+=a;
}
In this example the while loop is writtern to execute 100 times but however when
the user gives a negative input the break statement causes the loop to make an
early exit
The continue statement is related to break, it causes the next iteration of the enclosing
for, while, or do loop to begin. In the while and do, this means that the test part is
executed immediately; in the for, control passes to the increment step. The continue
statement applies only to loops, not to switch. Consider the example
for (i = 0; i < 100; i++)
{
cin>>c;
if (c <= 0) /* skip the remaining part of the loop */
continue;
no_of_positive++;
}
The continue statement is used here to skip the remaining part of the loop when a
negative number is given as input.
Have you Understood Questions?
1. Mention the control structures that is used for multi way decisions
2. How does a while loop differs from do while loop
3. In which situations we will use break and continue statements
1.8 Expressions
An expression is a combination of operands (both variables and constants),
operators arranged as per the syntax of the language.An expression may be an
simple expression such as
i=i+2
An expression may also use combination of simple expressions such as
i=i * 2 + (m +1)/2

Anna University Chennai

16

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

An expression such as
a=a+2
in which the variable on the left side is repeated immediately on the right, can be
written in the compressed form
a+= 2
The operator += is called an assignment operator.
Most binary operators (operators like + that have a left and right operand) have a
corresponding assignment operator op=, where op is one of
+ - * / % << >> & ^ |
k += m*5 is equivalent to
k=k+m*5
Conditional Expressions
The statements
if (a > b)
c = a;
else
c = b;
Assign c the maximum of a and b. The conditional expression, written with the ternary
operator ?:, provides an alternate way to write this and similar constructions. In the
expression
expr1 ? expr2 : expr3
the expression expr1 is evaluated first. If it is non-zero (true), then the expression expr2
is evaluated, and that is the value of the conditional expression. Otherwise expr3 is
evaluated, and that is the value. Only one of expr2 and expr3 is evaluated. Thus to set
c to the maximum of a and b.

17

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Have you Understood Questions?


1. Write the expression in short form a=a+b
2. What is a conditional expression?
Summary

C++ is an object oriented language. It is an expanded version of C language.


C++ I/O is performed using I/O operators instead of I/O functions,C++
uses cin and cout statements for performing I/O operations
C++ supports some I/O manipulators to format the display. The most
frequently used manipulators are endl and setw.
C++ tokens include keywords, operators, identifiers and constants
Every named program component in C++ like variables, functions, arrays,
classes etc. must have legal identifier (name)
Constants refer to values that do not change during the execution of the
program.
C++ supports three categories of data types, they are built in, user defined
and derived data types.
A structure is a collection of one or more variables, possibly of different
types, grouped together under a single name for convenient handling.
A union is a variable that may hold (at different times) objects of
different types and sizes, with the compiler keeping track of size and
alignment requirements.
An enumeration is a set of named integer constants that specify all the
allowable set of values a variable of that type may have
A pointer is a variable that contains the address of a variable
All basic control structures that are present in C language like if..else,while
loop,for loop,break and continue statements are also found in C++ all of
them perform the same task as in the C language.

Exercises
Short Questions
1. Write any two differences between C and C++.
2. cout is an input statement(TRUE/FALSE)
3. A logical AND we have___________ associativity.
4. ___________ operator is used to access a structure variables.
5. Write the significance of void datatype.
6. List out the various user defined datatypes available in C++.

Anna University Chennai

18

DCS 115

OBJECT ORIENTED PROGRAMMING

Long Questions

NOTES

1. Explain the various data types available in C++


2. Explain how structures are created and processed in C++
3. Discuss pointers in detail
Programming Exercises
1. Write a program to read a set of integers from the keyboard and determine
whether they are ODD or EVEN
2. Write a program to find the sum of the digits of an number
3. Write a program to generate prime numbers in the range 200-999
4. Write a program to count the number of negative numbers in an array
Answers to Have you Understood Questions
Section 1.3
1. cin and cout
2. /*
comment lines

*/

Section 1.4
1. setw(5)
2. endl
Section 1.5
1. Keywords,Identifiers,Constants,Operators
2. A constant will not change its value during program execution, but a
variable does.
Section 1.6
1. Built in data type, User defined datatpe and derived data type.
2. A structure is a collection of one or more variables, possibly of different
types, grouped together under a single name for convenient handling.
3. An enumeration is a set of named integer constants that specify all the
allowable set of values a variable of that type may have.
4. A pointer is a variable that contains the address of a variable.
Section 1.7
1. else.. if ladder structure and switch statement.
19

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

2. While loop checks the condition first and then executes the loop on the other
hand do while loop checks that condition at the last. We can guarantee that a
do while loop will at least once but such guarantee cannot be given for while
loop.

NOTES

3. The break statement provides an early exit from for, while, and do, just as
from switch.

Section 1.8
1. a+=b.
2. The conditional expression, written with the ternary operator ?:, provides
an alternate way to write simple if statement.
References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & design


(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

Anna University Chennai

20

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 2
FUNCTIONS
Function Prototypes
Functions with Return Values
Call by Value
Call by Reference
2.1

Return by Reference
Inline Functions
Functions with Default Arguments
Function Overloading

Introduction

Functions are one of the most important features of program development.


Functions are the basic building blocks of C++. Functions provide modular
structure to a program Functions help to divide a larger program into number of
smaller units which is the basis of top down approach. Functions also provide
programmers a easy and convenient way of designing programs in which complex
computations can be built into functions. To re-use the same part of a program,
we can define a function, which takes parameters, and returns a result of various
types. This chapter introduces you to create and use your own function. This
chapter also discusses various important concepts of functions like call by value
and reference, Inline functions and function overloading.
2.2

Learning Objectives

2.3

To introduce the functions and its advantages


To present the concepts of call by value, call by reference and return by
reference
To discuss about inline functions
To show how to use default arguments
To present the concept of function overloading
Advantages of Functions
The advantages of writing functions are

Functions provides Reusability


Functions give modular structure to a program
Writing functions make programming easy
21

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

2.3.1

Function Prototypes

Typical definition or prototype for a function contains

The type of the value it returns


An identifier for its name and
The list of parameters with their types.

The syntax to write a function is.


<return type> function name(argument list)
{
//Body of the Function.
}
Example 1:
The program given below is a makes use of a simple function that takes a integer
parameter.

#include <iostream.h>
void show(int);
// FUNCTION PROTOTYPE
void main()
{
int a;
cout<<Enter the value for A;
cin>>a
show(a);
}
void show(int x)
{
cout<<The value passed to function is << x;
}
Output of the Program
Enter the value for A 20
The value passed to function is 20

Anna University Chennai

22

DCS 115

OBJECT ORIENTED PROGRAMMING

This program make use of a function called show( ) with an integer parameter .The
function just displays the value of x. Since the function is not returning anything its
return type is made void.
2.3.2

NOTES

Functions with Return Values.

As mentioned earlier a function can take parameters and also can return value.
Example 2:
This function show() used in this program takes two parameters and returns the
sum of the parameters
#include <iostream.h>
int mul(int,int);
// FUNCTION PROTOTYPE
void main()
{
int a,b,c;
cout<<Enter two values <<endl;
cin>>a>>b;
c=mul(a,b);
cout<<The Product is <<c;
}
int show(int x,int y)
{
int z;
z=x * y;
return z;
}
Output of the Program
Enter two values
5
6
The Product is 30
The variable a,b are known as actual parameters whose values are copied
to the dummy variables x and y. The result of the multiplication is stored in z and
this value is copied to c.
2.3.3

Call by Value

By default, functions pass arguments by value, which means that when


the function is used, the actual values of arguments are copied into the dummy
23

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

parameters. The main effect is that even if the dummy parameters are modified the
corresponding parameter will not change the arguments value.
Example 3:
The following program makes use of call by value concept to swap the values of
two variables.
#include<iostream.h>
void swap(int,int);
void main()
{
int a,b;
cout<<enter two values <<endl;
cin>>a>>b;
swap(a,b);
cout<<Values in the main program\n;
cout<<a<<\t<<b;
}
void swap(int x,int y)
{
int t;
t=x;
x=y;
y=t;
cout<<The values after swapping in swap() function \n <<x<<\t<<y;
}
Output of the Program
enter two values
10
20
The values after swapping in swap() function
20
10
Values in the main program
10
20
If suppose you give 5 and 6 as input to a and b which are copied x and y parameters
of the swap function(which swaps the value of x and y).The swapped values will
not affect the actual parameters a and b thus the cout statement in the main
program will print only 5 and 6

Anna University Chennai

24

DCS 115

2.3.4

OBJECT ORIENTED PROGRAMMING

Call by Reference

NOTES

In certain situations, it is more efficient or convenient to be able to modify the argument(s).


To do that, the & symbol specifies that the actual parameter and dummy the argument
correspond to the same value. This is called passing an argument by reference.
Example 4:
The following program makes use of call by reference concept to swap the values
of two variables.
#include <iostream.h>
#include <math.h>
void swap(int &x,int &y)
{
int t;
t=x;
x=y;
y=t;
cout<<The values after swapping in swap() function \n <<x<<\t<<y;
}
void main( )
{
int a,b;
cout<<enter two values <<endl;
cin>>a>>b;
swap(a,b);
cout<<Values in the main program\n;
cout<<a<<b;
}
Output of the Program
enter two values
10
20
The values after swapping in swap() function
20
11
Values in the main program
20
11
In this example the variables x and y will act as alias names for a and b thus any
change in x and y will be reflected in a and b.

25

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

2.3.5

Return by Reference

A function can also return by reference.


Example 5:
The program given below illustrates the return by reference concept.
#include<iostream.h>
#include<iomanip.h>
int & check(int & a,int &b)
{
if(a>b)
return a;
else
return b;
}
void main( )
{
int x,y;
cout<<enter two values <<endl;
cin>>x>>y;
check(x,y)=0;
cout<<After executing check function <<endl;
cout<<x <<\t<<y;
}
Output of the Program
enter two values
10
20
After executing check function
10
0
This function returns reference to a or b.The function check returns reference to
either x or y based on the condition. Thus whatever value is given as input for x
and y the function call assigns the value of x to the reference that is returned thus
the cout statement displays the value of x twice.
Have you Understood Questions?
1. Mention the advantages of writing functions.
2 Give the syntax to write functions.
3 What do you mean by Call by reference?
4 How will you declare a reference variable in C++?
Anna University Chennai

26

DCS 115

2.4

OBJECT ORIENTED PROGRAMMING

Inline Functions

NOTES

Inline functions are like macros. Inline functions will avoid the time complexity that
arises due to context switch over head in a function call. A context switch involves
locating the function, moving to it, saving the register status, pushing the arguments in
the stack and returning to the calling function. All these overheads can be avoided by
making a function inline. Inline functions have some restrictions.

Function containing looping structure cannot be made inline.


Recursive functions cannot be made inline.
A function with many lines of coding cannot be made inline.

The disadvantage of in-line functions is that if they are too large and called to
often, the program grows larger. For this reason, in general only short functions
are declared as in-line functions.
A Function can be made inline by prefixing it with the keyword inline. The Syntax
for writing Inline function is given below.
inline function-prototype
{
function body
}
Example 6:
This example program makes use of inline function to determine whether the
given number is Odd/Even.
#include < iostream.h >
#include<iomanip.h>
inline int even(int x)
{
if (x %2==0)
return 1;
else
return 0;
}
int main( )
{
int a;
cout<<Enter any number<<endl;
27

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

cin>>a;
if(even(a))
cout<<EVEN NUMBER;
else
cout<<ODD NUMBER;

NOTES

}
Output of the Program
Enter any number
20
EVEN NUMBER
Have you Understood Questions?
1. What do you mean by Inline functions?
2. How will you make a function Inline?
2.5

Functions with Default Arguments

In C++ it is possible to call functions without passing all its arguments. This can
be made possible by specifying the default arguments. The default arguments
will be specified with some default values. Default parameters will be used when
there is a missing parameter in the function call.
For Example consider the following function declaration.
int add(int x , int y=100,int z=200);
Here we can note that the default value to the parameter is assigned as an ordinary
variable initialization. Thus all the function calls given below are valid.
m=add(15);
m=add(10,20);
m=add(10,20,30)

//two argument missing


//one argument missing

The following point has to be noted while writing functions with default arguments.

A function can take default arguments only as indicated in the previous


example (int y =100 is a default parameter)
A default parameter is used only when a parameter is missing.
Default parameters should be assigned from right to left.

The following function declarations are wrong


Anna University Chennai

28

DCS 115

OBJECT ORIENTED PROGRAMMING

int add(int x=100,int y,int z) //default parameters should be assigned from left to
right
int add(int x,int y=100,int z) //default parameters should be assigned from left to
right

NOTES

Example 7:
The following example illustrates the concept of default arguments in a function
#include<iostream.h>
#include<iomanip.h>
void add(int ,int=5,int=7); // DEFAULT VALUE DECLARED
void main()
{
int a,b,c;
cout<<enter three values<<endl;
cin>>a>>b>>c;
cout<<Output with only 2 parameters <<endl;
add(a,b); \\ Third parameter missing hence default parameter used
cout<<Output with all 3 parameters <<endl;
add(a,b,c);
}
void add( int x, int y, int z)
{
int t;
t=x+y+z;
cout<<t;
}
Output of the Program
enter three values
10
20
30
Output with only 2 parameters
37
Output with all 3 parameters
60
Example 8:
The following example makes use of the function called simpleinterest with default
arguments
29

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

#include<iostream.h>
#include<iomanip.h>
float simpleinterset(int ,int=5,float=3.5); // DEFAULT VALUE DECLARED

void main()
{
int p,n;
float r,si;
cout<<enter the principal amount<<endl;
cin>>p;
cout<<enter the number of years<<endl;
cin>>n;
cout<<enter the rate of interest<<endl;
cin>>r;
cout<<Output with only 2 parameters <<endl;
simpleinterest(p,n); \\Third parameter missing hence default parameter used(i.e
float=3.5)
cout<<Output with all 3 parameters <<endl;
simpleinterest (p,n,r);
}
float simpleinterest( int x, int y, float z)
{
float ans;
ans=(x*y*z)/100;
return ans;
}
Have you Understood Questions?
1. Default parameters are assigned from ________ to ___________ .
2.6

Function Overloading

Function overloading is one of the most important features available in C++ two
or more functions can share the same name as long as either the type of their
arguments differs or the number of their arguments differs - or both. When two or
more functions share the same name, they are said overloaded.
Overloaded functions can help reduce the complexity of a program by allowing
related operations to be referred to by the same name. To overload a function,
Anna University Chennai

30

DCS 115

OBJECT ORIENTED PROGRAMMING

simply declare and define all required versions. The compiler will automatically select
the correct version based upon the number and/or type of the arguments used to call
the function. Function overloading provides the compile time polymorphism feature of
OOPS.

NOTES

The Following set of functions are overloaded.


(i)

float volume(int x);


float volume(int x,int y);

(ii)

int interest (int p);


int interest (float p);
float interest (int p,float r);
float interest (int p ,float r,int n);

(iii)

float area(int x,float y);


float area(float m,float n);

The following sets of functions are not overloaded.


(i)

float mul(int x,int y)


int mul(int x,int y)

(ii)

int convert(int x)
float convert (int j);

Remember that the return type alone is not sufficient to allow function overloading.
If two functions differ only in the type of data they return, the compiler will not
always be able to select the proper one to call.
Example 9:
The following example illustrates the overloading of sum( ) function.
#include<iostream.h>
#include<iomanip.h>
void sum(int,int);
void sum(int,int,int);
void main()
{
int a ,b, c ;
cout<<Enter three values <<endl;
cin>>a>>b>>c;
cout<<Calling the function with two parameters<<endl;
31

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

sum(a,b);
cout<<Calling the function with three parameters<<endl;
sum(a,b,c);
}
void sum(int x,int y)
{
int z;
z=x+y;
cout<<z;
}
void sum(int x,int y,int z)
{
int r;
r=x+y+z;
cout<<r;
}
Output of the Program
enter three values
10
20
30
Calling the function with two parameters
30
Calling the function with three parameters
60
The compiler automatically calls the correct version of the function based
upon the type of data used as an argument. Overloaded functions can also differ
in the number of arguments.
Example 10:
This example overloads the function called area.
#include<iostream.h>
#include<iomanip.h>
int area(int side);
float area(float radius);
int area(int l,int b)
void main()
{
int s;
float r,

Anna University Chennai

32

DCS 115

OBJECT ORIENTED PROGRAMMING

int len,bre;

NOTES

cout<<Calculating Area of Square<<endl;


cout<<Enter side<<endl;
cin>>s;
area(s);
cout<<Calculating Area of Circle<<endl;.
cout<<Enter Radius<<endl;
cin>>r;
area(r)
cout<<Calculating Area of Rectangle<<endl;
cout<<Enter Length and Breath<<endl;
cin>>len>>bre;
area(len,bre);
}
int area(int side);
{
cout<<Area of Square is <<side * side;
}
int area(float radius);
{
cout<<Area of Circle is <<3.14 * radius*radius;
}
int area(int l,int b);
{
cout<<Area of Rectangle is <<l *b;
}
Have you Understood Questions?
1. What do you mean by function overloading?
2. Is the following set of function overloaded
int mul(int m,int n)
float mul(int k,int j)

33

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Summary
1. Functions provide modular structure to C++ program Functions help to divide
a larger program into number of smaller units which is the basis of top down
approach.
2. In C++ functions can be called by value, called by reference and can return
by reference
3. By default, functions pass arguments by value, which means that when
the function is used, the actual values of arguments are copied into the
dummy parameters.
4. In call by reference, the & symbol specifies that the actual parameter
and dummy the argument correspond to the same value.
5. Inline functions are like macros. Inline functions will avoid the time
complexity that arises due to context switch over head in a function call.
6. In C++ it is possible to call functions without passing all its arguments.
This can be made possible by specifying the default arguments
7. In C++ two or more functions can share the same name as long as either
the type of their arguments differs or the number of their arguments differs
- or both. When two or more functions share the same name, they are said
overloaded.
Exercises
Short Questions
1.
2.
3.
4.
5.

How does functions reduce complexity of a program


What do you mean by function overloading? Explain its advantages.
List some advantages of Inline functions
In call by reference you use ___________ symbol
Inline functions in C++ are similar to _________ of C.

Long Questions
1. Explain the concept of call by value, call by reference and return by
reference in detail.
2. Mention the rules associated with passing of default arguments. Give
example
3. Explain function overloading with examples.
Programming Exercises
1. Create a function to compute simple interest. Supply default arguments to
the function
2. Create an overloaded function called myabs() to find absolute value for
a number.( absolute value for a number is the positive value of that number)
Anna University Chennai

34

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Answers to Have you Understood Questions


Section 2.3
1. The advantages of writing functions are (1) Functions provides Reusability (2)
Functions give modular structure to a program (3) Writing functions make
programming easy
2. The syntax to write a function is.
<return type> function name(argument list)
{
//BODY OF THE FUNTION.
}
3. In certain situations, it is more effcient or convenient to be able to modify
the argument(s). To do that, the & symbol specifies that the actual parameter
and dummy the argument correspond to the same value. This is called
passing an argument by reference.
4. By referencing the & symbol before the variable declaration.
Section 2.4
1. Inline functions are like macros. Inline functions will avoid the time
complexity that arises due to context switch over head in a function
call.
2. By prefixing the function declaration with inline keyword
Section 2.5
1. Right to left
Section 2.6
1. In C++ two or more functions can share the same
name as long as either the type of their arguments
differs or the number of their arguments differs or both. When two or more functions share the same
name, they are said overloaded.
2. No

35

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & design


(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

Anna University Chennai

36

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 3
CLASSES AND OBJECTS IN C++
Structure of the Unit

Structures and Classes


Copy Constructers
Destructors
Passing Objects to Functions
Returning Objects from Functions
Static Data Members
Static Member Functions
Const Members Functions
Friend Functions
Friendly Function for Two Classes

Classes and Objects


Defining the Member Functions
Creating Objects
Accessing Class Members.
Member Functions with Parameters
Inline Functions outside Classes.
Constructors
Constructors That Take Parameters
Constructer Overloading

3.1

Introduction
In the previous chapters, you have followed the modular approach to C++
programming. The power of C++ lies in writing object oriented programs. In
object oriented programming the data members and the functions which act upon
those data are combined into a single entity called Object. Object provides a
systematic way of accessing the data members. This chapter introduces you to
write object oriented C++ programs using classes and objects. This chapter then
discusses details regarding Constructers and Destructors. Further this chapter
introduces static data members, static functions and const functions. At the end
this chapter provides necessary details regarding friend functions and classes.
3.2

Learning Objectives

To introduce the Classes and Objects


To discuss creating member function inside and outside class definitions
To present the concept of Constructors, Copy Constructors and Constructor
Overloading
To present the concept of Destructors
37

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

3.3

To show how to pass and return objects from function


To discuss Static data members and Static functions
To introduce Constant member functions
To introduce Friend functions and Friendly classes
Structures and Classes

Classes and structures are syntactically and functionally identical, C++ structures and
classes have their own members. These members include variables (including other
structures and classes), functions (specific identifiers or overloaded operators) known
as methods, constructors and destructors. Classes and Structures are declared with
class and struct keywords respectively. Declaration of the members are done within
the definition of classes and structures. For example
struct book
{
int pages;
char *author;
float price
};
class book
{
public:
int pages;
char *author;
float price
};
From these declarations you can note that except the public keyword in class, both
the declarations are identical.
Till this point structures and classes are identical. But class is superior user defined data
type that incorporates some additional features than structures. Classes and structures
differ in the following aspects.

By default, the members of structures are public while that for class is private
Structures doesnt provide something like data hiding which is provided by
the classes

Classes have the following advantages when compared to structures

Classes supports data hiding but Structures doesnt provide data hiding
Structures contains only data while class bind both data and member functions

Anna University Chennai

38

DCS 115

OBJECT ORIENTED PROGRAMMING

Since class is specially designed user defined data type in C++ to bind data and code,
this book focus only on classes.

NOTES

3.4 Classes and Objects


Class is another user defined data type in C++. A class is the definition of a data
structure and the associated operations that can be done on it .Classes in C++ are also
called as Abstract Data Type (ADT) .Classes bind the data with its associated code. In
C++, a class is declared using the class keyword. The syntax of a class declaration is
similar to that of a structure. Its general form is,
class class-name
{
// private functions and variables
public:
// public functions and variables
} object-list;
In a class declaration the object-list is optional. Functions and variables declared inside
the class declaration are said to be members of the class. By default, all member
functions and variables are private to that class. This means that they are accessible
only by the members of that class. To declare public class members, the public keyword
is used, followed by a colon. All functions and variables declared after the public specifier
are accessible both by other members of the class and by any part of the program that
contains the class. For Example consider the class given below
class number
{
int a,b;
public:
void get_ab();
void put_ab()
};
This class has two private variable, called a and b, and two public functions get_ab( )
and put_ab( ). Notice that the functions are declared within a class using their prototype
forms. The functions that are declared to be part of a class are called member functions.

39

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

3.4.1

Defining the Member Functions

Member functions can be declared either inside/outside the class. If the member function
is declared inside the class it is said to be inline functions. When the function is declared
outside the class it should follow the syntax given below.
<return type> classname :: functionname(argument list)
{
//body of the function.
}
For example the function get_ab(),put_ab() of the number class can be written as.
void number :: get_ab()
{
cin>>a;
cin>>b;
}
void number :: put_ab()
{
cout<<a;
cout<<b;
}
3.4.2

Creating Objects

The declaration of object in C++ is similar to declaration of variables .To create


an object, use the class name as type specifier.The Syntax is
<class name> objectname . For example,
void main( )
{
number ob1, ob2;//these are object of type number
// ... program code
}
Remember that an object declaration creates a physical entity of that type. That
is, an object occupies memory space, but a type definition does not.
3.4.3

Accessing Class Members.

Once an object of a class has been created, the program can reference its public
Anna University Chennai

40

DCS 115

OBJECT ORIENTED PROGRAMMING

members by using the dot operator in much the same way that structure members are
accessed. The syntax for accessing the object is given below.

NOTES

<object name>.functionname(arguments);
The statement given below invokes the get_ab() and put_ab() member functions
of the number class.
ob1.get_ab();
ob1.put_ab();
Example 1:
The following code creates a class called number with member functions
get_ab(),add() and mul().
#include<iostream.h>
class number
{
private:
int a,b;
public:
void get_ab()
{
cout<<Enter values for a and b \n;
cin>>a;
cin>>b;
}
void add();
void mul();
};
void number :: add()
{
int c;
c=a+b;
cout<<THE SUM IS <<c;
}
void number :: mul()
{
int d;
d=a*b;
cout<<THE PRODUCT IS <<d;
}

41

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

void main()
{
number ob1;
ob1.get_ab();
ob1.add();
ob1.mul();
}

Output of the Program


Enter values for a and b
5
6
THE SUM IS 11
THE PRODUCT IS 30
This program creates a class called number with two private data members
and three public member functions. The function get_ab() is an inline function.The
functions add() and mul() are written outside the class. The Program creates one
object called ob1 through which the member functions are accessed.
3.4.4

Member Functions with Parameters

It is possible to pass one or more arguments to a member function. Simply add


the appropriate parameters to the member functions declaration and definition.
Then, when you declare an object, specify the arguments. The program given
below makes use of parameterized member functions.
Example 2:
This program is the modified version of example 1,the function get_ab() is
modified by adding two parameters.
#include<iostream.h>
#include<iomanip.h>
class number
{
private:
int a,b;
public:
void get_ab(int x ,int y) // member function with parameters
{
a=x;
b=y;
Anna University Chennai

42

DCS 115

OBJECT ORIENTED PROGRAMMING

}
void add()
{
int c;
c=a+b;
cout<<THE SUM IS <<c<<endl;
}
void mul()
{
int c;
c=a*b;
cout<<THE PRODUCT IS <<c;
}

NOTES

};
void main()
{
number ob1;
int d1,d2;
cout<<ENTER TWO DATA<<endl;
cin>>d1>>d2;
ob1.get_ab(d1,d2); // d1 value is copied to x and d2 value is copied to y
ob1.add();
ob1.mul();
}
Output of the Program
ENTER TWO DATA
10
20
THE SUM IS 30
THE PRODUCT IS 200
3.4.5 Inline Functions outside Classes.
A member function that is declared outside can be made inline just by prefixing it
with the keyword inline.
Example 3:
The following is an example for an inline function written outside the class.
#include<iostream.h>
class point
{
private:
int x,y;
43

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

public:
void getpoints();
void putpoints();
};
inline void point :: getpoints()
{
cout<<Enter 2 points\n
cin>>x>>y;
}
inline void point :: putpoints()
{
cout<<The points are\n;
cout<<x<<\t<<y;
}
void main()
{
point p;
p.getpoints();
p.putpoints();
}
Output of the Program
Enter 2 points
10
20
The points are
11
20
Have you Understood Questions?
1.
2.
3.
3.5

What is a class and what is an object?


How will you make function written outside the class as inline.
Write the syntax to create an object for the class
Constructors

Generally every object we create will require some sort of initialization. C++
allows a constructor function to be included in a class declaration. A classs
constructor is called each time an object of that class is created. Thus, any
initialization to be performed on an object can be done automatically by the
constructor function. A constructor function has the following characteristics.

It should have the same name as that of the class.


It should not have any return type even void however they can take

Anna University Chennai

44

DCS 115

OBJECT ORIENTED PROGRAMMING

arguments.
Constructers can take default arguments
Constructers can be dynamically initialized.
Constructer function cannot be made virtual
It should be always declared in the public section of the class.

NOTES

Example 4:
The following program makes use of a constructor.
#include <iostream.h >
class number
{
int a;
public:
number( ); //constructor
void show( );
};
number::number( )
{
cout << In constructor\n;
a=100;
}
void number::show( )
{
cout << a;
}
void main( )
{
number ob; // automatic call to constructor
ob.show( );
}
Output of the Program
In constructor
100
In this simple example the constructor is called when the object is created, and
the constructor initializes the private variable a to 100 .For a global object, its
constructor is called once, when the program first begins execution. For local
objects, the constructor is called each time the declaration statement is executed.
45

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

3.5.1 Constructors That Take Parameters


It is possible to pass one or more arguments to a constructor function. Simply add
the appropriate parameters to the constructor functions declaration and definition.
Then, when you declare an object, specify the arguments.
Example 5:
The following program makes use of a parameterized constructor.
# include < iostream.h >
class number
{
int a;
public:
number(int x); //constructor

void show( );
};
number::number(int x)
{
cout << In constructor\n;
a=x;
}
void number::show( )
{
cout <<Value of a is << a<<\n;
}
int main( )
{
number ob(4);
ob.show( );
return 0;
}
Output of the Program
In constructor
Value of a is 4
In this example the object ob is parameterized. The value 4, specified in the
parentheses following ob, is the argument that is passed to number( )s parameter
x that is used to initialise a. Actually, the syntax is shorthand for this longer form:
number ob = number(4);
Anna University Chennai

46

DCS 115

OBJECT ORIENTED PROGRAMMING

Although the previous example has used a constant value, you can pass an objects
constructor any valid expression, including variables.
3.5.2

NOTES

Constructer Overloading

Similar to the function overloading concept in C++, you can also overload
constructers. Constructer overloading helps us to keep multiple constructers in
the class, such that each constructer can perform different methods of initialization.
Here is an example for constructer overloading.
Example 6:
The following program illustrates the constructor overloading concept. The
constructor function number () is overloaded with two, one and no parameters
# include < iostream.h >
class number
{
int a,b;
public:
number()
{
cout<<Default constructer;
x=y=0;
}
number(int x);
number(int x,int y);
void show( );
};
number::number(int x)
{
cout << In one parameter constructor\n;
a=x;
b=0;
}
number::number(int x,int y)
{
cout << In two parameter constructor\n;
a=x;
b=y;
}

47

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

void number::show( )
{
cout << a<<\n<<b;
}
int main( )
{
number ob(); //invokes default constructer
ob.show( );
number ob1(5); //invokes constructer with one parameter
ob1.show( );
number ob2(5,10); //invokes constructer with two parameters
ob2.show( );
return 0;
}
Output of the Program
Default constructer
0
0
In one parameter constructor
5
0
In two parameter constructor
5
10
3.5.3

Copy Constructers

Copy constructer is used to copy the value of one object to another. The copy
constructor takes a single argument of the same type as the class. It creates a new
object, which is an (exact) copy of the passed object. This is done by copying all
member variables from the passed object into the new object.
As mentioned earlier the purpose of copy constructer is to declare and initialize
an object from another object. An example for copy constructer is given below.
Example 7:
The following program makes use of copy constructors
# include < iostream.h >
class number
Anna University Chennai

48

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

int a;
public:
number(int x); //constructor
number(number & x) //copy constructer
void show( );
};
number::number(int x)
{
cout << In constructor\n;
a=x;
}
number :: number(number& x)
{
cout<<Copy Constructor\n;
a=x.a
}
void number::show( )
{
cout <<Value of a is << a<<\n;
}
int main( )
{
number ob(4);
ob.show( );
//displays 4
number ob1(ob); //invokes copy constructer
ob1.show();
//displays 4
return 0;
}
Output of the Program
In constructor
Value of a is 4
Copy Constructor
Value of a is 4
Always the Copy constructer takes reference variable as a parameter. In this
example the copy constructer copies the value of the object ob to object ob1.
Have you Understood Questions?
1.
2.

What is a constructer?
Is it possible to overload constructer?
49

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

3.
3.6

What is purpose of copy constructer?


Destructors

The complement of a constructor is the destructor. This function is called when


an object is destroyed. For example, an object that allocates memory when it is
created will want to free that memory when it is destroyed. The name of a destructor
is the name of its class preceded by a ~. The destructor function has the following
characteristics.

A destructor function never takes any arguments.


A destructor function will not return any values.
Destructors cannot be overloaded
Destructors can be made virtual.

The following is the example of a destructor.


Example 8:
The following program illustrates the use of destructors.
# include <iostream.h >
class number
{
int a;
public:
number( ); // constructor
~number( ); //destructor
void show( );
};
number::number( )
{
cout << In constructor\n;
a=100;
}
number::~number( )
{
cout << In Destructor...\n;
}
void number :: show()
{
cout<<a is <<a<<\n;
}
void main()
Anna University Chennai

50

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

number ob;
ob.show();
}
Output of the Program
In constructor
A is 100
In Destructor...
A classs destructor is called when an object is destroyed. Local objects are
destroyed when they go out of scope. Global objects are destroyed when the
program ends.
Have you Understood Questions?
1.
2.

What is a destructor?
Is it possible to overload destructor?

3.7

MORE ABOUT CLASSES

3.7.1

Passing Objects to Functions

Objects can be passed to functions as arguments in just the same way that other
types of data are passed. Simply declare the functions parameter as a class type
and then use an object of that class as an argument when calling the function. As
with other types of data, by default all objects are passed by value to a function.

Example 9:
In the following program an object is passed as parameter to the member function
product.
class number
{
int i;
public:
number(int n) { i = n; }
int product(number o1,number o2);
};
int number :: product(number o1,number o2)
{
51

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

return o1.i( )* o2.i( );


}

int main( )
{
number a(5), b(2);
cout << a.product(a,b)<< \n; //OUTPUT 10
cout << b.product(a,b) << \n; //OUTPUT 10
return 0;
}
Output of the Program
10
10
The default method of passing of parameters in C++ is pass by value (including
objects).In this example the function product takes two objects as arguments and
return their product.
3.7.2

Returning Objects from Functions

Functions can return objects. First, declare the function as returning a class type.
Second, return an object of that type using the normal return statement. Remember
that when an object is returned by a function, a temporary object is automatically
created which holds the return value. It is this object that is actually returned by
the function. After the value is returned, this object is destroyed.
Example 10:
The following program illustrates the concept of returning an object from a
function. This example add objects of the class money.
#include<iostream.h>
class money
{
int rs;
int ps;
money()
{
rs=0;
ps=0;
}
Anna University Chennai

52

DCS 115

OBJECT ORIENTED PROGRAMMING

money(int r,int p)
{
rs=r;
ps=p;
}
money add(money m1,money m2);
void display();

NOTES

}
money money :: add(money m1,money m2)
{
money temp;
temp.ps=m1.ps+m2.ps;
if(temp.ps>99)
{
temp.rs++;
temp.ps-=99
}
temp.rs+=m1.rs+m2.rs;
return temp;
}
void money :: display()
{
cout<<Total Rupees <<rs;
cout<<\n Total Paise <<ps;
}
void main()
{
money m1(10,55);
money m2(11,55);
money m3;
m3.add(m1,m2);
m3.display();
}
Output of the Program
Total Rupees 22
Total Paise 10
Have you Understood Questions?
1.

Objects are passed in call by __________ method

53

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

3.8

Static Data Members

A variable can be declared as static by prefixing it with a key word static. A


static variable in C++ will work in the same way as the C language static variable.
The other name for static variable is class variable. A static member is part of a
class, but not part of an object of a class, so theres only one instance of them
however many objects of that class are created. This is useful if, for instance, you
want to keep a count of how many objects are created. A static data member must
be defined outside the class definition. Static variable will have the following
properties:

It is always initialized to a default value.


A static variable is common to the entire class, that is, only one copy of
the static variable exists.
All the objects will share the static variable.

Example 11:
The example given below will count the number of objects created for the class
one.
#include<iostream.h>
class one
{
private:
static int count;
public:
void incr()
{
count ++;
}
void display( )
{
cout <<count<< objects;
}
};
int one :: count ; //Static data member definition
void main()
{
one 01, 02, 03;
01. incr ();
02. incr ();
Anna University Chennai

54

DCS 115

OBJECT ORIENTED PROGRAMMING

03. incr ();


03. display ();

NOTES

}
Output of the Program
3 objects
In this example a variable count is declared as a static data member. It will be
initialized to zero. Every time when the function incr( ) is called the variable is
incremented by one irrespective of the object.
3.8.1

Static Member Functions

A member function can be declared as static by prefixing it with the keyword


static. A static function will have the following rules.

A static function can access only static variables.


A static function will be called using the class name.
A static function cannot access non-static variables.
A static function cannot call non static functions.
A static function is common to the entire class.

Example 12:
The following program illustrates the concept of static member functions.
#include<iostream.h>
class one
{
private:
int a;
static int count;
public:
void set()
{
a=5;
count=5;
}
static void incr()
{
a++;
//ERROR a is non static variable
count++;
cout<<a;
55

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

cout<<count;

NOTES

}
int one :: count;
void main()
{
one obj1, obj2, obj3;
obj1.set ();
obj2.set ();
obj3.set ();
one::incr(); // calling a static function.
}
Note:
The program has some compilation errors hence it will not run
Have you Understood Questions?
1.
2.
3.
4.

3.9

What is the default value for static integer value?


How will you make a variable static?
A static function can access only static variables (TRUE/FALSE)
Assume that c1 is a class and fn() is a static function then how will you
call the function f1()
Const Members Functions

Class member functions may be declared as const. When this is done, that method
cannot modify the object that invokes it. Also, a const function/method may not
invoke a non-const member function of the same object. However a const method
might call non-const methods of other classes or of other objects of the same
class as itself. Further, a const class can be called from either const or non-const
objects. To specify a member function as const, use the form shown in the following
example:
class ex1
{
private:
int x;
public:
int fun() const; // const member function
};
The purpose of declaring a member functions as const is to prevent it from
Anna University Chennai

56

DCS 115

OBJECT ORIENTED PROGRAMMING

modifying the object that invokes it.


Have you Understood Questions?
1.
3.10

NOTES

A constant object is required to invoke a constant class (TRUE/FALSE)


Friend Functions

There will be time when you want a function to have access to the private members
of a class without that function actually being a member of that class.C++ supports
friend functions to achieve this purpose. A friend function is not a member of a
class but still has access to its private elements. Friend functions are useful with
operator overloading and the creation of certain types of I/O functions. Friend
Functions posses the following features.

The function that is declared as friend will not fall in the scope of the class
it was declared.
A friend declaration can be placed in either the private or the public part
of a class declaration
Like a member function, a friend function is explicitly declared in the
declaration of the class of which it is a friend
A friend function can access private data members of that class.
A friend function will be called without the object.
Usually friend function takes object as an argument.

The Syntax for creating a friend function is given below.


class sample
{
private:

public:

friend void callme( );


};
In the main program the friend function can be called as a ordinary function without
any objects.
void main()
{
sample s;
57

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

callme( );

NOTES
}
Example 13:

The following is an example for friend function


#include<iostream.h>
class one
{
private:
int a,b;
public:
one()
{
a=20;
b=30;
}
friend float avg(one obj);
};
float avg(one obj)
{
float r;
r=(obj.a+obj.b)/2;
return r;
}
void main()
{
one e;
float m;
m=avg(e);
cout<< The Average is <<m;
}
Output of the Program
The Average is 25.0
In this example the function avg( ) is declared as friend to the class one. As
mentioned earlier this friend function takes object as a parameter of type the class
one. Note that the definition of the function avg( ) is written like a ordinary
function this is because the friend function will not fall in the scope of the class
where it is defined. Finally the function is invoked without the help of the object.
Anna University Chennai

58

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

3.10.1 Friendly Function for Two Classes


In C++ it is possible to declare member function of one class as a friend function
of other class in this case we say that the two classes are friendly to each other and
this concept is called as friend class.
To create friendly classes you need to create a function that is friend to both the
classes. Further you need to do forward declaration of the class that you are going
to define later.
Forward declaration is a concept in which we declare a class before defining it.
Forward declaration intimates the compiler that the class declared is defined in
the later part of the program. Here is an example for forward declaration.
class test2; //Forward Declaration
class test1
{

};
class test2 //Definition of the class that has the forward declaration.
{

}
Example 14:
The following example creates two friendly classes.

class c2; //Forward Declaration


class c1
{
private:
int x;
public:
c1()
{
cin>>x;
59

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

}
friend float avg(c1 01,c2 02);
};
class c2
{
private:
int y;
public:
c2()
{
cin>>y;
}
friend float avg(ci 01,c2 02);
};

float avg (c1 01,c2 02)


{
int ans;
ans= (01.x +02.y) / 2;
return ans;
}
void main()
{
c1 a;
c2 b;
float xyz;
xyz= avg(a,b);
cout<<xyz;
}
In this example the function avg( ) is declared as friend to the classes c1 and c2.
Since the class c2 is written after class c1 we have to forward declaration for c1.
The friend function avg( ) computes the average of the variables x and y declared
in classes c1 and c2 respectively. Since avg( ) is a friend function it is called
without the help of the object
Have you Understood Questions?
1.
2.
3.

In which situation you will declare a function as friend ?


How will you call a friend function ?
What is forward declaration?

Anna University Chennai

60

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES
Summary

Class is an user defined data type in C++. Classes in C++ are also called
as Abstract Data Type (ADT) .Classes bind the data with its associated
code.
Member functions can be declared either inside/outside the class. If the
member function is declared inside the class it is said to be inline functions.
In C++ class variables are called as objects. Objects are run time entities
of an object oriented system.
A constructer is a special member function that has the same name as the
class. A classs constructor is called each time an object of that class is
created.
Constructers will not have return type but can take parameters, hence
constructers can be overloaded.
Copy constructer is used to copy the value of one object to another.
The complement of a constructor is the destructor. This function is called
when an object is destroyed.
A static member is part of a class, but not part of an object of a class, so
theres only one instance of them however many objects of that class are
created.
A static member function can access only static variables and they are
called using the class name.
Class member functions may be declared as const. When this is done, that
method cannot modify the object that invokes it.
A friend function is not a member of a class but still has access to its
private elements.
Forward declaration is a concept in which we declare a class before defining
it. Forward declaration intimates the compiler that the class declared is
defined in the later part of the program

Exercises
Short Questions
1.
2.
3.
4.
5.
6.

List out the advantages of classes over structures


When we create a new class a new built in data type is created (TRUE/
FALSE)
Mention the properties of constructers and destructors.
Destructors can be made virtual TRUE/FALSE.
Explain Copy constructers with example
A constructer can take parameter but it cannot have______________
61

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

7.
8.
9.
10.
11.

List out any three properties of static member functions.


A static member function can access only_________ data members
In which situation you will declare a member function as constant member
function.
Is friend function violating OOPS principle of data hiding? Discuss.
By default friend functions will have this pointer (TRUE/FALSE)

Long Questions
1.
2.
3.
4.

Explain how objects can be passed and returned from a function with
an example
Explain the concept of constructer overloaing
Explain the concept of Friend functions with example.
Explain briefly regarding static data members and static functions.

Programming Exercises
1.
2.

3.
4.

Create a class called calculator and implement all basic functions of


the calculator as member functions.
Create a class called Product with prod_name, prod_id, cost, quantity
as data members create necessary members functions constructers and
destructors for the class
Write a program to add two weights (Weights are represented in
Kilograms and Grams) use passing and returning objects concept.
Write a friend function to add objects of two complex numbers.

Answers to Have you Understood Questions


Section 3.4
1.

2.
3.

Class is another user defined data type in C++. Classes in C++ are also
called as Abstract Data Type (ADT) .Classes binds the data with its
associated code. Objects are run time entities of a class
Just by prefixing the keyword inline before the function prototype.
<class name> object;
Eg. number obj

Section 3.5
1.

Constructers are special member functions that have the same as the
class. They are called when we create an object for a class.

Anna University Chennai

62

DCS 115

OBJECT ORIENTED PROGRAMMING

2.
Yes
3.
Copy constructer is used to copy the value of one object to another.
Section 3.6

NOTES

1. The complement of a constructor is the destructor. This function is called


when an object is destroyed.
2. No.
Section 3.7
1. Value
Section 3.8
1.
2.
3.
4.

0
Just by prefixing with the keyword static before variable declaration
True.
c1::fn()

Section 3.9
1.
False
Section 3.10
1.
2.
3.

When we want a function to have access to the private members of a


class without that function actually being a member of that class.
Friend functions are called like an ordinary member function without
the help of the object.
Forward declaration is a concept in which we declare a class before
defining it. Forward declaration intimates the compiler that the class
declared is defined in the later part of the program.

References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


63

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES
3.

Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000
Problem Solving with C++ (4th edition)
Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & design


(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

5.

The C++ Programming Language


(3rd. edition)
Author : Stroustrup, B.,
Publisher : Addison- Wesley, 1997.

Anna University Chennai

64

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 4
OPERATOR OVERLOADING AND TYPE
CONVERSIONS

4.1

Operator Overloading
Type Conversions
Defining Operator Overloading
Implicit Type Conversion
Overloading Binary Operator
Explicit Type Conversion
Overloading Unary Operator
Basic to Class Type
Overloading Prefix and Postfix Increment/Decrement Operators
Class to Basic Type
Overloading new and delete Operators
One Class to another Class Type
Operator Overloading Using Friend Functions
Introduction

Operator overloading refers giving special meaning to an existing operator.


Operator overloading is similar to function overloading. In fact, operator
overloading is really just a type of function overloading. However, some additional
rules apply. This chapter introduces you to operator overloading that deals with
overloading of both unary and binary operators. The second part of the chapter
provides necessary details regarding type conversions or type casting. Type
conversion or typecasting refers to changing an entity of one data type into another.
This chapter focuses on implicit and explicit type conversions.
4.2

Learning Objectives

To introduce the concept of Operator overloading


To define operator overloading function
To understand the steps involved in overloading binary operators
65

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

4.3

To understand the steps involved in overloading unary operators


To show how to overload unary prefix and postfix operators
To discuss overloading operators using friend functions
To present the concept of Type casting
To discuss implicit and explicit type casting.
Operator Overloading

As mentioned earlier operator overloading refers giving special meaning to an


existing operator. When an operator is overloaded, that operator loses none of its
original meaning. Instead, it gains additional meaning relative to the class for
which it is defined. An operator is always overloaded relatively to a user defined
type, such as a class. To overload an operator, you create an operator function.
Most often an operator function is a member or a friend of the class for which it is
defined.
Almost all operators in C++ can be overloaded, except the following few operators.

4.3.1

Class member access operators (. , .*)


Scope Resolution operator ( :: )
Size operator( sizeof)
Conditional operator ( ? :).
Defining Operator Overloading

The general form of a member operator function is shown here:


return-type class-name::operator#(arg-list)
{
// operation to be performed
}
The return type of an operator function is often the class for which it is
defined
( however, operator function is free to return any type).
The operator being overloaded is substituted for #. For example, if the
operator + is being overloaded, the operator function name would be
operator +.
The contents of arg-list vary depending upon how the operator function is
implemented and the type of operator being overloaded.
There are two important restrictions to remember when you are overloading an
operator:

The precedence of the operator cannot be change.

Anna University Chennai

66

DCS 115

4.3.2

OBJECT ORIENTED PROGRAMMING

The number of operands that an operator takes cannot be altered.

NOTES

Overloading Binary Operator

When a member operator function overloads a binary operator, the function will
have only one parameter. This parameter will receive the object that is on the
right side of the operator. The object on the left side is the object that generates
the call to the operator function and is passed implicitly by this pointer.
Example 1:
The following program overloads the + operator such that it adds two objects
of the type complex.
#include <iostream.h>
class complex
{
int real;
float imag;
public:
complex()
{
real=imag=0;
}
complex (int r,float i)
{
real = r; imag=i;
}
//overload + operator for complex class
complex operator +(complex);
void display()
{
cout<<The Result is ;
cout<<real << +j <<imag ;
}
};
complex complex :: operator + (complex c1)
{
complex temp;
temp.real=real +c1.real;
temp.imag=imag + c1.imag;
return temp;
}
67

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

void main()
{
complex c1,c2,c3;
int a; float b;
cout<<ENTER REAL AND IMAG PART OF COMPLEX
NUMBER1<<endl;
cin>>a>>b;
c1=complex(a,b);
cout<<ENTER REAL AND IMAG PART OF COMPLEX
NUMBER2<<endl;
cin>>a>>b;
c2=complex(a,b);
//adds two complex objects invokes operator + (complex) function
c3=c1 + c2 ;
c3.display();
}
Output of the Program
ENTER REAL AND IMAG PART OF COMPLEX NUMBER1
5
7.1
ENTER REAL AND IMAG PART OF COMPLEX NUMBER2
3
8.3
The Result is 8 + j 15.3
Example 2:
The program given below is the modified version of the example 10 program in
Chapter3. The member function add() present in that program is replaced by the
operator overloading function.
#include<iostream.h>
class money
{
int rs;
int ps;
money()
{
rs=0;
ps=0;
}
money(int r,int p)

Anna University Chennai

68

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

rs=r;
ps=p;
}
money operator +(money);
void display();
}
money money :: operator +(money m1)
{
money temp;
temp.ps=m1.ps+ps;
if(temp.ps>99)
{
temp.rs++;
temp.ps-=99
}
temp.rs+=m1.rs+rs;
return temp;
}
void money :: display()
{
cout<<Total Rupees <<rs;
cout<<\n Total Paise <<ps;
}
void main()
{
money m1(10,55);
money m2(11,55);
money m3;
m3=m1+m2;
m3.display();
}
Output of the Program
Total Rupees 22
Total Paise 10
4.3.3

Overloading Unary Operator

Overloading a unary operator is similar to overloading a binary operator except


that there is one operand to deal with. When you overload a unary operator using
a member function, the function has no parameters. Since, there is only one
69

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

operand, it is this operand that generates the call to the operator function. There is
no need for another parameter.
Example 3:
The following program overloads the unary operator that negates the object of
point class
#include <iostream.h>
class point
{
int x, y;
public:
point( )
{
x = 0; y = 0;
}
point(int i, int j)
{
x = i; y = j;
}
point operator-( );
void display()
{
cout<<x <<\t<<y;
}
};
// Overload - operator for point class
point point::operator-( )
{
x=-x;
y=-y;
}
int main( )
{
point o1(10, 10);
int x, y;
-o1; //Negate the object
o1.display();
}
Output of the Program
-10

-10

Anna University Chennai

70

DCS 115

4.3.4

OBJECT ORIENTED PROGRAMMING

Overloading Prefix and Postfix Increment/Decrement Operators

NOTES

When overloading the prefix ++ operator you write the member function as
void operator ++( )
Similarly when overloading the postfix ++ operator we will write the member
function as
void operator ++( )
Hence there is an ambiguity because both the member function takes the same
form the same problem exist for the pre and post fix decrement operators. To
resolve this you have to pass a dummy integer argument for the postfix operator.
void operator ++( );
void operator ( ) ;
void operator ++(int);
void operator ( int ) ;

//UNARY PREFIX INCREMENT


//UNARY PREFIX DECREMENT
//UNARY POSTFIX INCREMENT
//UNARY POSTFIX DECREMENT

Note:
The int parameter in the postfix operator is a dummy variable
Example 4:
The program given below overloads unary prefix ++ operator to increment the
object of type point class
#include <iostream.h>
class point
{
int x, y;
public:
point( )
{
x = 0; y = 0;
}
point(int i, int j)
{
x = i; y = j;
}
point operator++( );
void display()
71

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

cout<<The Object is Incremented to \n;


cout<<x<<\n;
cout<<y;
}
};
point point::operator++( ) // Overload prefix ++ operator for point class
{
++x;
++y;
}
int main( )
{
point o1(10, 10);
++o1; //increment an object
o1.display();
}
Output of the Program
The Object is Incremented to
11
11
Example 5:
The program given below overloads unary postfix operator to decrement the
object of type point class
#include <iostream.h>
class point
{
int x, y;
public:
point( )
{
x = 0; y = 0;
}
point(int i, int j)
{
x = i; y = j;
}
point operator( int );
void display()

Anna University Chennai

72

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

cout<<The Object is Decremented to \n;


cout<<x<<\t;
cout<<y;
}
};
point point::operator( int a) // Overload postfix operator for point class
{
x;
y;
}
int main( )
{
point o1(10, 10);
o1; //decrement an object
o1.display();
}
Output of the Program
The Object is Decremented to
9
9
4.3.5

Overloading new and delete Operators

Most large C++ programs make use of dynamically allocated memory. C++
supports dynamic allocation and deallocation of memory using new and delete
operators. Like other operators (except the few operators that cannot be overloaded)
C++ allows these two operators to be overloaded. By using the overloaded version
of new and delete operators there will be a simple and natural way to allocate and
dellocate an object from a memory pool and initialize it properly.
Example 6:
The following example demonstrates the overloading of new and delete operators.
#include<iostream.h>
#include<cstdlib.h>
class TestClass
73

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

{
int x,y;
public:
TestClass()
{
x = y = 0;
}
TestClass(int a, int b)
{
x = a;
y = b;
}
void show()
{
cout << x << \t ;
cout << y << endl;
}
void *operator new(size_t size);
void operator delete(void *p);
};
// overloaded new operator
void *TestClass::operator new(size_t size)
{
void *p;
cout << In overloaded new.\n;
p = malloc(size);
if(!p)
{
cout<<Unable to allocate<<endl;
return;
}
return p;
}
// delete operator overloaded
void MyClass::operator delete(void *p)
{

Anna University Chennai

74

DCS 115

OBJECT ORIENTED PROGRAMMING

cout << In overloaded delete.\n;


free(p);

NOTES

}
4.3.6

Operator Overloading Using Friend Functions

It is possible to overload an operator relative to a class by using a friend rather


than a member function. A friend function does not have a this pointer. In the
case of a binary operator, this means that a friend operator function is passed both
operands explicitly. For unary operators, the single operand is passed.
Note:
We cannot use a friend to overload the assignment operator. The assignment
operator can be overloaded only by a member operator function.
Example 7:
The following program overloads + operator using friend function.
#include <iostream.h>
class point
{
int x, y;
public:
point( )
{
x = 0; y = 0;
}
point(int i, int j)
{
x = i; y = j;
}
void display()
{
cout << X IS : << x << , Y IS : << y <<\n;
}
friend point operator+(point ob1, point ob2);
};
// Overload + using a friend.
point operator+(point ob1, point ob2)
{
point temp;
temp.x = ob1.x + ob2.x;
75

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

temp.y = ob1.y + ob2.y;


return temp;

NOTES

}
int main( )
{
point o1(10, 10), o2(5, 3), o3;
o3 = o1 + o2; //add to objects
// this calls operator+( )
o3.display();
return 0;
}
Output of the Program
X IS : 15 ,Y IS : 13
Note that the left operand is passed to the first parameter and the right operand is
passed to the second parameter
Have you Understood Questions?
1.
2.
3.
4.
4.4

When we overload a operator will its meaning change ?


Give the general form of operator function
Write examples for unary and binary operators
Which operator cannot overloaded using friend function ?
TYPE CONVERSIONS

Definition
Type conversion or typecasting refers to changing an entity of one data type into
another. This is done to take advantage of certain features of type hierarchies. For
instance, values from a more limited set, such as integers, can be stored in a more
compact format and later converted to a different format enabling operations not
previously possible, such as division with several decimal places worth of accuracy.
Type conversion allows programs to treat objects of one type as one of their ancestor
types to simplify interacting with them.
4.4.1

Implicit Type Conversion

Implicit type conversion is an automatic type conversion by the compiler. The


type conversions are automatic as long as the data types involved are built-in
types.

Anna University Chennai

76

DCS 115

OBJECT ORIENTED PROGRAMMING

Example

NOTES

int y;
float x=123.45;
y = x;
In this example the float variable x is automatically gets converted to int. Thus
the fractional part of y gets truncated.
4.4.2 Explicit Type Conversion
Automatic type conversion for user defined data types is not supported by the
compiler hence the conversion routines are ought to be specified explicitly. Three
types of situations might arise in the data conversion between incompatible types.

Conversion from basic type to class type.


Conversion from class type to basic type
Conversion from one class type to another class type.

Basic to Class Type


This is done by using constructors in the respective classes. In these types the =
operator is overloaded.
Example 8:
The following program converts integer to the class type length
class length
{
int cm,m;
public:
length(int n)
//Constructor
{
m=n/100;
cm=m%100;
}
}
void main()
{
int n;
cin >> n;
length obj = n;

//Integer to class type


77

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

}
The constructor used for type conversions take a single argument whose type is to
be converted.
Class to Basic Type
Overloaded casting operator is used to convert data from a class type to a basic
data type.

Syntax:
operator typename()
{
statements.....
}
This function converts a class type to specified type name. For example operator
int() converts the class object to integer data type.
Conditions for a casting operator function
It must be a class member.
It must not specify a return type.
It must not have any arguments.
Example 9:
The following example cast the object of type time to basic data types (int and
float)

class time
{
int min,sec;
public:
time(int n)
{
min = n/60;
sec=n%60;
}
Anna University Chennai

78

DCS 115

OBJECT ORIENTED PROGRAMMING

operator int() //Casting Operator


{
int x;
x= min * 60 + sec;
return sec;
}
operator float() //Casting Operator
{
float y;
y = min + sec/60;
return y;
}

NOTES

};
void main()
{
time t1(160);
int n = t1;
//Conversion
float x = t1; //Conversion
}
One Class to another Class Type
The Constructors helped us to define the conversion from a basic data type to
class type and the overloaded casting operator helped to define the conversion
from a class type to basic data type. Now to convert from one class type to another
class type these both help us to do.
Example 10:
The following program converts the class type length1 to type length2
class length2; //forward declaration
class length1
{
int m,cm;
public:
length1(int n)
{
m=n/100;
cm=n%100;
}
operator length2() //from length1 type to length2 type

79

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

int x= m*100 + cm;


length2 tempobj(x);
return tempobj;
}
}
class length2
{
int cm;
public:
length2(int n)
{
cm=n;
}
operator length1() //from length2 type to length1 type
{
length1 tempobj(cm);
return tempobj;
}
}
void main()
{
int x= 125;
length2 obj1(x);
length1 obj2= obj1;
}
Have you Understood Questions?
1. What is type casting?
2. Which operator you have to overload to convert a basic data type to user
defined
data type
Summary

Operator overloading refers giving special meaning to an existing operator.


When an operator is overloaded, that operator loses none of its original
meaning. Instead, it gains additional meaning relative to the class for which
it is defined.
We cannot overload Class member access operators, Scope Resolution
operator, Size operator( sizeof) , Conditional operator ( ? :).
When a member operator function overloads a binary operator, the function
will have only one parameter.

Anna University Chennai

80

DCS 115

OBJECT ORIENTED PROGRAMMING

When you overload a unary operator using a member function, the function
has no parameters.
To overload unary postfix operators a dummy integer is passed as a
parameter to the operator function
It is possible to overload an operator relative to a class by using a friend
rather than a member function
We cannot use a friend to overload the assignment operator.
Type conversion or typecasting refers to changing an entity of one data
type into another
Implicit type conversion is an automatic type conversion by the compiler.
The type conversions are automatic as long as the data types involved are
built-in types.
Explicit type conversion is necessary for user defined data types.

NOTES

Exercises
Short Questions
1.
2.
3.
4.

List out the operators that cannot be overloaded in C++>


Write the various rules for overloading operators.
Write the advantage of overloading operators using friend functions.
What do you mean by implicit type conversion?

Long Questions
1. Explain how prefix and postfix operators are overloaded
2. How will you overload new and delete operators? Give example
3. Explain Explicit type conversion methods with example.

Programming Exercises
1. Write a program to overload binary operator + such that it is capable of
adding two objects of distance class .The distance is expressed as foot
and inches.
2. Write a program to overload ++ operator to increment time object. Time
is expressed in hour, minute and second.
Answers to Have you Understood Questions
Section 4.3
1. No

81

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

2. return-type class-name::operator#(arg-list)
{
// operation to be performed
}
3. Unary operator Eg !. Binary operator Eg. +
4. =(assignment operator)
Section 4.4
1. Type conversion or typecasting refers to changing an entity of one data
type into another.
2. =(assignment operator)
References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osbornen 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & design


(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

5.

The C++ Programming Language


(3rd. edition)
Author : Stroustrup, B.,
Publisher : Addison- Wesley, 1997.

Anna University Chennai

82

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 5
INHERITANCE
Overview Of Inheritance

Multiple Inheritance

Single Inheritance

Multilevel Inheritance

Access Control

Hierarchical Inheritance

Inheritance and Access Control

Hybrid Inheritance

Inheritance in Private Mode

Constructers and Destructors in


Derived Classes

Using Protected Members

Parameterized Constructers in
Derived Classes

5.1

Introduction

This chapter explores one of the most powerful features of C++ language, the
inheritance. C++ strongly supports the concept of reusability with the help of
inheritance. Inheritance is one of the primary features of any object oriented
language. In this chapter you will go through the various forms of inheritance and
you will learn how to implement them in C++ programs further this chapter will
introduce you the access specifiers and you will learn how to apply them in your
programs.
5.2

Learning Objectives

To introduce inheritance concept

To present the various access control mechanisms available in C++

To discuss single inheritance and its implementation

To discuss multiple inheritance and its implementation

To discuss multilevel inheritance and its implementation

To discuss hierarchical inheritance and its implementation

83

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

To discuss hybrid inheritance and its implementation

To show how constructors and destructors gets executed in inheritance.

5.3 Overview Of Inheritance


Inheritance is a feature by which new classes are derived from the existing classes.
Inheritance allows re-using code without having to rewrite from scratch. The parent
class(Original existing class) is said to be the base class the new made class from
it is called a derived class A class that is derived from parent class will posses all
the properties of the base class apart from that it also has its own unique properties.
However the derived class will not inherit constructers, destructors, friend functions
and assignment operators further derived classes cannot remove any data member
present in the base class.C++ supports various types of inheritance scheme. They
are

Single inheritance
Multiple inheritance
Multilevel inheritance
Hierarchical inheritance
Hybrid inheritance

Have you Understood Questions?


1. What is Inheritance?
2. Mention the various inheritance schemes supported in C++.
5.4 Single Inheritance
When a class is derived from a single base class it is said to be single inheritance.
It can be thought of as a specialization of an existing class.

Base Class

Derived class
Fig.5.1 Single Inheritance
The syntax for implementing inheritance is
class derivedclassname : access mode baseclassname
Anna University Chennai

84

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

The access mode may be public, protected or private.


Example
class base
{

};
class derived : public base
{
};
In this example the class derived inherits the properties of the class base. The
inheritance is made in the public mode.
Example 1
The following code is a simple example for single inheritance. In this example
the derived class (number2) inherits the base class (number1) in public mode
#include<iostream.h>
class number1
{
int a;
public:
number1( )
{
a=0;
}
void get_a()
{
cout<<Enter the value for a \n
cin>>a;
}
void show_a()
{
85

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

cout<<a is <<a;
}
};
class number2: public number1
{
private:
int b;
public:
number2( )
{
b=0;
}
void get_b()
{
cout<<Enter the value for b \n
cin>>b;
}
void show_b()
{
cout<<b is <<b;
}
};
void main ( )
{
number2 obj;
obj. get_a ( );
obj. get_b ( );
obj.show_a( );
obj.show_b( );
}
Output of the Program
Enter the value for a
10
Enter the value for b
20
a is 10
b is 20
Here the inheritance is made in the public visibility mode. In the main program
we create the object for derived class and access all public functions present in
the base class. The derived class number2 will have the following features.

Anna University Chennai

86

DCS 115

OBJECT ORIENTED PROGRAMMING

From the class number2

NOTES

Public Functions

Private Variables

number2( ) //constructer
void get_b()
void show_b()

int b

From the class number1

Public Functions

Private Variables

void get_a()
void show_a( )

None.

Have you Understood Questions?


1. Draw the scheme for single inheritance
2. Write the syntax for implementing single inheritance.
5.5 Access Control
An access specifier in C++ determines which data member, which member function
can be used by other classes. The three access specifiers supported in C++ are

The private access specifier


The public access specifier
The protected access specifier

Only objects of the same class can have access rights to a member function or
data member declared as private.
A data member or a method declared as public can be accessed by all classes and
their objects.
Data members, methods that are declared protected are accessible by that class
and the inherited subclasses
The program given below uses all C++ access specifiers
#include<iostream.h>

87

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

class Base
{
private:
int privateInt ;
protected:
int protectedInt;
public:
int publicvar;
Base()
{
privateInt =10;
protectedInt=20;
publicvar=30;
}
void display()
{
cout<< privateInt;
cout<< protectedInt;
cout<< publicvar;
}
};
class Derived :public Base
{
public:
void change()
{
privetInt++ //Wrong! Private variables cannot be
accessed
protectedInt++; //OK
publicvar++; //OK
}
}
void main()
{

Anna University Chennai

88

DCS 115

OBJECT ORIENTED PROGRAMMING

Derived obj;
obj. privetInt=50 ; //Wrong! Private variables cannot be accessed
obj. protectedInt=50; // Wrong! Protected variables cannot be accessed
obj.publicInt=50; //OK

NOTES

}
Note:
The program has some compilation errors hence it will not run.
5.5.1

Visibility and Access Rights in C++

The Table 5.1 lists the visibility and access rights in C++.
ACCESS RIGHTS FOR THE DIFFERENT SCOPES
CLASS\ACCESS
RIGHTS

PRIVATE PROTECTED PUBLIC


SCOPE
SCOPE
SCOPE

same class
subclass
Other classes

yes
no
no

yes
yes
no

yes
yes
yes

Table 5.1 Access Rights in C++


5.5.2 Inheritance and Access Control
The protection keyword after the : operator in the derived class determines the
access by derived class to base class members. For example consider the following
scheme of inheritance.
1. class derived : private base
All public members of the base class become private to the derived class,i.e. only
members of the derived class can access them. All private members of the base
class are private to the base class, i.e. nothing can access them, not even members
of the derived class. All protected members become also private to the derived
class.
2. class derived : protected base
All public members of the base class become protected, i.e. only the derived class
(and further derived classes) can access them. All private base class members are
89

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

private to base class, i.e. nothing can access them. All protected members of the
base class stay protected, i.e. only the derived class (and further derived classes)
can access them.
3. class derived : public base
All public members of the base class are public in the derived class, i.e.anything
can access them. All private members of the base are private to the base class, i.e.
nothing can access them. All protected members of the base class stay protected,
i.e. only the derived class (and further derived classes) can access them
5.5.3

Inheritance in Private Mode

We know that when the access specifier is private public members of the base
become private members of the derived class, but these are still accessible by
member functions of the derived class.
NOTE: The program given below will not compile ,it has some errors
Example 2:
The program given below is an example for inheritance in private mode.
#include <iostream.h>
class base
{
int x;
public:
void setx(int n)
{
x = n;
}
void showx( )
{
cout << x << \n;
}
};
// Inherit base as private
class derived : private base
{
int y;
public:
void sety(int n)
{
Anna University Chennai

90

DCS 115

OBJECT ORIENTED PROGRAMMING

y = n;
}
void showy( )
{
cout << y << \n;
}

NOTES

};
int main( )
{
derived ob;
ob.setx(10); // ERROR now private to derived class
ob.sety(20); // access member of derived class - OK
ob.showx( ); // ERROR now private to derived class
ob.showy( ); // access member of derived class - OK
return 0;
}.
Note:
The program given in example 2 contains some errors as indicated in the
comments, hence the program will not run.
As the comments in this program illustrates, both showx( ) and setx() become
private to derived and are not accessible outside it. Note that showx( ) and setx( )
are still public within base, no matter how they are inherited by some derived
class. This means that an object of type base could access these functions anywhere.
5.5.4

Using Protected Members

As you know from the preceding section, a derived class does not have access to
the private members of the base class. However, there will be times when you
want to keep a member of a base class private but still allow a derived class
access to it. To accomplish this, C++ includes the protected access specifier. The
protected access specifier is equivalent to the private specifier with the sole
exception that protected members of a base class are accessible to members of
any class derived from that base. Outside the base or derived classes, protected
members are not accessible.
The protected access specifier can occur any where in the class declaration,
although typically it occurs after the (default) private members are declared and
before the public members. The full general form of a class declaration is shown
here:
91

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

class class-name
{
// private members
protected: //optional
// protected members
public:
//public members
};
Example 3:
The following program illustrates a single inheritance concept with protected
variables
#include<iostream.h>
class base
{
protected:
int a; //private to base but accessible from derived
public:
void get_a ( )
{
cout<<Enter the Value for a \n;
cin>>a;
}
};
class derived : public base
{
int b;
public:
void get_b()
{
cout<<Enter the Value for b \n;
cin>>b;
}
void product()
{
int c;
c= a * b // variable a is protected member of class base
cout<<The Product is <<c;
}
};
void main()

Anna University Chennai

92

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

derived obj;
obj.get_a();
obj.get_b();
obj.product();
}
Output of the Program
Enter the Value for a
10
Enter the Value for b
20
The Product is 200
Have you Understood Questions?
1. If a base class is inherited in private mode, how its public members appears
for the derived class
2. If a base class is inherited in public mode, all the members of the class
appears as public members to the derived class (TRUE/FALSE)
3. What is the special access specifier used for inheritance?
4. List the access specifiers available in C++.
5.6 Multiple Inheritance
C++ allows a class to get derived from multiple base classes. A derived class
can directly inherit more than one base class. In this situation, two or more base
class is combined to create the derived class. Multiple inheritance is never
necessary (some object oriented languages, e.g. java, dont even support
multiple inheritance) and should be avoided. However, sometimes it makes
programming easier. The multiple inheritance diagram is depicted below.

Fig. 5.2 Multiple Inheritance

93

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Here the class D inherits the properties of classes A, B and C. The syntax for creating
a derived class with multiple inheritance is
class derived classname : access mode base1, access mode base2,..access
mode base n
{
//body of the derived class
}
Example 4:
The following code contains the C++ classes for the multiple inheritance
diagram given in fig 5.3
EXPERIENCE
DETAILS

SALARY
DETAILS

PROMOTION

Fig. 5.3 Multiple Inheritance (promotion details)


#include<iostream.h>
#include<iomanip.h>
#include<string.h>
class Expdet
{
protected:
char *name;
int tot_exp;
public:
void expr( )
{
cout<<Enter your name<<endl;
cin>>name;
cout<<Enter Total Experience<<endl;
cin>>tot_exp;
}
};
class Saldet
{
Anna University Chennai

94

EDUCATION
DETAILS

DCS 115

OBJECT ORIENTED PROGRAMMING

protected:

NOTES

int salary;
public:
void salary( )
{
cout<<Enter your Salary<<endl;
cin >>salary;
}
};

class Edudet
{
protected:
char *degree;
public:
void eduqua( )
{
cout<<Enter your Degree<<endl;
cin>>degree;
}
};
class Promotion : public Expdet ,public Saldet, public Edudet
{
public:
void promote( )
{
if(tot_exp> 10 && sal>=20000 && (strcmp(degree,PG)= =0))
cout<< PROMOTED FOR HIGHER GRADE;
else
cout<<CANNOT BE PROMOTED ;
}
};
void main( )
{
Promotion obj;
obj . expr( );
obj . salary( );
obj . eduqua( );
obj . promote( );
}

95

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Output of the Program


Enter your name
John
Enter Total Experience
25
Enter your Salary
23000
Enter your Degree
PG
PROMOTED FOR HIGHER GRADE
Have you Understood Questions?
1. What is multiple inheritance?
2. Multiple inheritance is supported in _________ and not supported
in__________
5.7

Multilevel Inheritance

Multilevel inheritance is one form of multiple inheritance. In this scheme the


derived class is made from two or more base class. Here a derived class can be
used as a base class for another derived class, creating a multilevel class
hierarchy. In this case, the original base class is said to be an indirect base class
of the second derived class.

PERSON

EMPLOYEE

MANAGER
Fig.5.4 Multilevel Inheritance
Thus this scheme can be extended to any level ( i.e generalization to
specialization).Let us write the program for multilevel inheritance

Anna University Chennai

96

DCS 115

OBJECT ORIENTED PROGRAMMING

Example 5:

NOTES

The following code contains the C++ classes for the multilevel inheritance diagram
given in fig 5.4
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
class person
{
protected:
int age;
char *name;
public:
void get1( )
};
class emp : public person
{
protected:
int basic,hra;
public:
void get2()
};
class manager : public emp
{
private:
int deptcode;
public:
void get3( );
void display( );
};
void person :: get1( )
{
cout<<Enter your Age<<endl;
cin >> age;
cout<<Enter your name<<endl;
cin>> name;
}
void emp :: get2( )
{
cout<<Enter your Basic and HRA<<endl;
cin>>basic>>hra;
}

97

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

void manager :: get3()


{
cout<<Enter your Dept Code<<endl;
cin >> deptcode;
}
void manager :: display( )
{
cout<<Name is <<name;
cout<<Age is <<age;
cout<<Basic and HRA <<basic<<\t<<hra;
cout<<Dept Code <<deptode;
}
void main( )
{
manager obj;
obj.get1( );
obj.get2( );
obj.get3( );
obj.display( );
}
Output of the Program
Enter your Age
28
Enter your name
John
Enter your Basic and HRA
20000 1500
Enter your Dept Code
200
Name is John
Age is 28
Basic and HRA 20000 1500
Dept Code 200
The class manager is inherited from the class emp which in turn inherited from
class person .Thus the class emp and manager will posses the following features.

Class emp

Public Functions

Anna University Chennai

Protected Variables

98

DCS 115

OBJECT ORIENTED PROGRAMMING

void get1() (From person class)


void get2()

name, age (From person class)


basic,hra

NOTES

Class manager

Public Functions
void get1() (From person class)
void get2() (From emp class)
void get3()
void display()

Protected variables
name, age (From person class)
basic,hra (From emp class)
deptcode(private variable)

Have you Understood Questions?


1. Multilevel inheritance is special form of Multiple inheritance (TRUE/
FALSE)
5.8

Hierarchical Inheritance

The hierarchical inheritance structure is given below .This type is helpful when
we have class hierarchies. In this scheme the base class will include all the features
that are common to the subclasses.

Fig.5.5 Hierarchical inheritance


In hierarchical inheritance it is necessary to create object for all the derived classes
at the lower level because each derived class will have its own unique feature.
Example 6:
A simple program is written to implement the hierarchical inheritance structure
given in the above figure.
#include<iostream.h>
#include<string.h>
class A
{
99

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

protected:
int x, y;
public:
void get ( )
{
cout<<Enter two values<<endl;
cin>> x>>y;
}
};

class B : public A
{
private:
int m;
public:
void add( )
{
m= x + y;
cout<<The Sum is <<m;
}
};
class C : public A
{
private:
int n;
public:
void mul( )
{
n= x * y;
cout << The Product is <<n;
}
};
class D : public A
{
private:
float l;
public:
void division( )
{
l = x / y;
cout <<The Quotient is << l;
}
Anna University Chennai

100

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

};
void main( )
{
B obj1;
C obj2;
D obj3;
B .get( );
B .add( );
C .get( );
C .mul( );
D .get( );
D .division( );
}

Output of the Program


Enter two values
12
6
The Sum is 18
The Product is 72
The Quotient is 2.0
Here we can note that objects were created for all the subclasses to access their
member functions.
Have you Understood Questions?
1.

5.9

Hierarchical inheritance is useful when we have _____________ of


classes
Hybrid Inheritance

A hybrid inheritance scheme is the combination of all the inheritance schemes


discussed earlier. Consider for a example , calculating net pay for an employee,
apart from the normal pay he may also get additional pay by working overtime,
thus the net pay will be the sum of normal pay plus overtime pay. This example
can be modeled as hybrid inheritance scheme in C++

101

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Emp_det

Normal pay

Additional pay

Net pay

Fig.5.6 Hybrid Inheritance


Example 7:
The C++ classes for the fig 5.6 are given below.
#include<iostream.h>
class emp_det
{
protected:
int emp_id;
public:
void get_id()
{
cout<<ENTER EMPID<<endl;
cin>>emp_id;
}
void disp_id()
{
cout<< EMPID IS <<emp_id<<endl;
}
};
class norm_pay :public emp_det
{
protected:
float bpay;
public:
void get_bpay()
{
cout<<ENTER BASIC PAY<<endl;
cin>>bpay;
Anna University Chennai

102

DCS 115

OBJECT ORIENTED PROGRAMMING

}
void disp_bpay()
{
cout<< BASIC PAY IS = <<bpay<<endl;
}

NOTES

};
class add_pay
{
protected:
int hrs;
int rp;
int ap;
public:
void get_addpay()
{
cout<<ENTER OVERTIME HOURS<<endl;
cin>>hrs;
co ut<<ENTER HOW MUCH RUPEES PER
HOUR<<endl;
cin>>rp
}
void disp_addpay()
{
ap=hrs * rp;
cout<<TOTAL OVERTIME HOURS<<hrs<<endl;
cout<<ADDITIONAL PAY = << ap <<endl;
}
};
class net_pay :public norm_pay,public add_pay
{
int netpay;
public:
void display()
{
netpay=ap+bpay;
cout<<NET PAY IS <<netpay;
}
};
void main()
{
net_pay obj;
obj.get_id();
obj.get_bpay();
103

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

obj.get_addpay();

NOTES

obj.disp_id();
obj.disp_bpay();
obj.disp_addpay();
obj.display();
}
Output of the Program
ENTER EMPID
1101
ENTER BASIC PAY
10000
ENTER OVERTIME HOURS
10
ENTER HOW MUCH RUPEES PER HOUR
50
EMPID IS 1101
BASIC PAY IS = 10000
TOTAL OVERTIME HOURS 10
ADDITIONAL PAY = 500
NET PAY IS 10500
Have you Understood Questions?
1. Hybrid inheritance scheme is the combination of
(a) Multiple (b) Multilevel (c) both a and b
5.10

Constructers and Destructors in Derived Classes

It is possible for the base class, the derived class, or both to have constructor and/
or destructor functions. When a base class and a derived class both have constructor
and destructor functions, the constructor functions are executed in order of
derivation. The destructor functions are executed in reverse order. That is, the
base constructor is executed before the constructor in the derived class. The reverse
is true for destructor functions: the destructor in the derived class is executed
before the base class destructor.
Example 8:
This example illustrates the order in which the constructors and destructors get
executed in an inheritance program

Anna University Chennai

104

DCS 115

OBJECT ORIENTED PROGRAMMING

class A
{
public:
A( )
{

NOTES

cout<<INSIDE A;
}
~A ( )
{
cout<<EXIT A;
}
};
class B : public A
{
public:
B()
{
cout<<INSIDE B;
}
~B()
{
cout<<EXIT B;
}
};
class C : public B
{
public:
C( )
{
cout<<INSIDE C;
}
~ C( )
{
cout<<EXIT C;
}
};
void main()
{
C obj;
}

105

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Output of the Program


INSIDE A
INSIDE B
INSIDE C
EXIT C
EXIT B
EXIT A
5.10.1 Parameterized Constructers in Derived Classes
C++ supports a unique way of initializing class objects when a hierarchy of classes
are created using inheritance. Constructers in an inheritance program can also be
written using the syntax given below.
constructer (arglist): initialization-section
{
//body of the constructer
}
Note that we have used a colon : immediately after the constructer name to
assign initial values. An example is given below.
Example 9:
The following is the example of parameterized constructors in an inheritance
program
#include <iostream.h>
#include<iomanip.h>
class A
{
int a;
public:
A (int x )
{
a=x;
cout<<INSIDE A;
cout<< a is <<a<<endl;
}
~A ( )
{
cout<<EXIT A;
}

Anna University Chennai

106

DCS 115

OBJECT ORIENTED PROGRAMMING

};
class B
{
int b;
public:
B(int y) : b(y)
{
cout<<INSIDE B;
cout<< b is <<b<<endl;

NOTES

}
~B()
{
cout<<EXIT B;
}
};
class C : public A,public B
{
int m,n
public:
C(int p,int q,int r,int s ) :A(p),B(q*2),m(r),n(s)
{
cout<<INSIDE C;
cout<< m is <<m<< n is <<n<<endl;
}
~ C( )
{
cout<<EXIT C;
}
};
void main()
{
C obj(10,20,30,40);
}
Output of the Program
INSIDE A
a is 10
INSIDE B
B is 40
INSIDE C
m is 30 n is 40
107

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

EXIT C
EXIT B
EXIT A
In this program the object for the class C is created, in the constructer of class C
we have initialized the values for the member variables m and n using the statements
m(r) and n(s) which is given in the initialization section of the constructer C.
Similarly we have also initialized the values of the base class constructers. The
statement A(p) will initialize the value of a in the base class A and the statement
B(q*2) will initialize the value of b to q multiplied by 2 in the base class B.
Have you Understood Questions?
1.
2.

Write the order in which constructers are executed in inheritance


Write the order in which destructors are executed in inheritance

Summary

Inheritance is a feature by which new classes are derived from the existing
classes.
The parent class(Original existing class) is said to be the base class the
new made class from it is called a derived class
When a class is derived from a single base class it is said to be single
inheritance. It can be thought of as a specialization of an existing class.
A derived class can directly inherit more than one base class this concept
is said o be multiple inheritance
Multilevel inheritance is one form of multiple inheritance. In this scheme
the derived class is made from two or more base class
When the properties of one class are inherited by two or more classes then
that inheritance scheme is said to be hierarchical inheritance.
Hybrid inheritance scheme is the combination many simple inheritance
schemes.
A derived class can inherit a base class in public or protected or private
mode.
The protected access specifier is equivalent to the private specifier with
the sole exception that protected members of a base class are accessible to
members of any class derived from that base.
It is possible for the base class, the derived class, or both to have constructor
and/or destructor functions.
When a base class and a derived class both have constructor and destructor
functions, the constructor functions are executed in order of derivation.
The destructor functions are executed in reverse order.

Anna University Chennai

108

DCS 115

OBJECT ORIENTED PROGRAMMING

Exercises
Short Questions
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

NOTES

Mention the different scheme of inheritance supported by C++


Write the syntax of creating a derived class.
The derived class is the _______________ of the generalized base
class
All the public members of the base class will become ______________
for the derived class if we inherit in protected mode
Write the syntax for creating multiple inheritance
_________________ inheritance scheme is involved ,if a derived class
D inherits properties of the base classes A and B.
List out some advantages of multilevel inheritance
What do you mean by hybrid inheritance?
Constructers are not inherited in derived classes (TRUE/FALSE)
Destructors in inheritance are called in _______________ order of the
inheritance

Long Questions
1.
2.
3.
4.

Discuss the various types of inheritance available in C++


Give a brief note on hybrid inheritance with an example
Explain Constructers and destructors in inheritance.
Explain how parameters are passed to constructors in inherited
program.

Programming Exercises
1.

Create a base class called vehicle and add relevant data members and
functions to it. Create derived classes that directly inherit the base class
called two wheeler and four wheeler add relevant data members and
functions to them. Write a main program and create objects for the
derived class and access the member functions

2.

Implement the inheritance scheme given below.


BOOK DETAILS

AUTHOR DETAILS

PUBLISHER DETAILS
109

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

3.

Implement the inheritance scheme given below with a C++ program

Device

Input device

Output device

4.

Create a class called employee with necessary data members. Create


two derived classes called regular-emp and temporary-emp with
necessary data members. Calculate the net pay for both these categories
and display the details.

5.

Implement the inheritance scheme given below with a C++ program


Vehicle

Two Wheeler

Four Wheeler

Cars

Trucks

Answers to Have you Understood Questions


Sect ion 5.3

1.
2.

Inheritance is a feature by which new classes are derived from the


existing classes.
Single
inherit ance
,Multiple
inheritance,Mult ilevel
inheritance,Hierarchical inheritance ,Hybrid inheritance

Section 5.4
1.

Base Class

Derived class
Anna University Chennai

110

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

2. class derived classname : access mode base classname


Section 5.5
1.
2.
3.
4.

private
FALSE
Protected
private, protected and public

Section 5.6
1.
2.

If a derived class directly inherits from more than one base class.then
this scheme of inheritance is said to be multiple inheritance.
C++,Java

Section 5.7
1.
TRUE
Section 5.8
1.
Hierarchy

Section 5.9
1.
C
Section 5.10
1.
The constructor functions are executed in order of derivation.
2.
The destructors are executed from derived to base.

111

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming &


design
(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

5.

The C++ Programming Language


(3rd. edition)
Author : Stroustrup, B.,
Publisher : Addison- Wesley, 1997.

6.

Thinking in C++
Author: Bruce Eckel
Publisher : Prentice Hall 2000

Anna University Chennai

112

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 6

POLYMORPHISM

6.1

Binding
Virtual Functions
Virtual Destructors

Virtual Base Classes


Pure Virtual Function
Abstract Classes

Introduction

Polymorphism is another important feature of object oriented programming. The


word Poly means many, and Morphism means structure or forms, thus in
C++ polymorphism refers to an object that possess many form. Polymorphism
can be classified into compile time polymorphism and runtime polymorphism.
You have learned about compile time polymorphism in Chapter 2 and Chapter 4.
Compile time polymorphism in C++ can achieved using function and operator
overloading. In addition to compile time polymorphism (function and operator
overloading) C++ also provides run time polymorphism with virtual functions
and abstract classes. These can be used to generate common interfaces to different
classes. In this chapter we will discuss details regarding run time polymorphism.
This chapter covers all the fundamental aspects of run time polymorphism.
6.2

Learning Objectives

6.3

To introduce the concept of biding


To present the concept of virtual functions
To present the concept of virtual destructors
To introduce pure virtual functions.
To discuss details regarding virtual base classes
To introduce the concept of abstract classes
Binding

The process of associating or binding a particular function/method code to an


object is called binding, i.e. binding specifies exactly which code is called, when
a function is called. Usually, functions are called statically, i.e. the compiler knows
113

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

at compile time exactly, which code is associated with an object. This is called
static binding or early binding.
However, sometimes the compiler cannot know at compile time, which function
is meant. In this case, the binding has to happen at run time. This is called dynamic
binding or late binding.
Early binding achieves compile time polymorphism and late biding achieves run
time polymorphism.
In C++ dynamic binding can be achieved by creating object pointers to the base
class. When you create object pointers to base class we get the following advantages

It makes the program flexible


We can create one array to store objects of both base and derived classes

Pointers to base classes can be assigned addresses of derived classes. When such
a pointer is used to access member methods, the compiler does not know, which
method to call. It can be either the function from the base class or potentially an
overloaded function in the derived class.
Example 1:
The following program creates a object pointer to the base class and access
functions of both base and derived class.
#include<iostream.h>
class base
{
public:
void display()
{
cout<<I AM IN BASE;
}
};
class derived : public base
{
public:
void display()
{
cout<<I AM IN DERIVED;
}
Anna University Chennai

114

DCS 115

OBJECT ORIENTED PROGRAMMING

};
void main()
{
base b,*ptr;
derived d;
//To call display function in class base
ptr= &b;
ptr->display();
//To call display function in class derived
ptr=&d;
ptr->display(); //This will invoke the display function of base not derived
}

NOTES

Output of the Program


I AM IN BASE
I AM IN BASE
To overcome the problem encountered earlier virtual functions are used.
6.3.1

Virtual Functions.

A virtual function is simply declared by putting the keyword virtual before the
function declaration. Overloading virtual functions is called as overriding. The
argument list and return-type of the function in derived classes must be the same
as in the base class otherwise it is only overloaded, not overridden.
Any pointer to a class that contains virtual functions is provided with additional
information about what it points to. When a virtual function is called through
such a pointer, then the pointer knows what object it points to. This is dynamic
binding.
Example 2:
The following program is the modified version of example 1, here the function
display() is declared as virtual.
#include<iostream.h>
class base
{
public:
virtual void display()
{
115

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

cout<<I AM IN BASE;

NOTES

}
};
class derived : public base
{
public:
void display()
{
cout<<I AM IN DERIVED;
}
};
void main()
{
base b,*ptr;
derived d;
ptr= &b; //To call display function in class base
ptr->display();//To call display function in class derived
ptr=&d;
ptr->display(); //This will invoke the display function of derived
}
Output of the Program
I AM IN BASE
I AM IN DERIVED
A function declared virtual in base class is always virtual. The keyword virtual is
not required in the derived class. Some important points about virtual functions:

Overridden virtual functions must have the same argument list and return
type.
The different behavior of a virtual function and a non-virtual function
occurs only, if the object is accessed through a pointer with type of a base
class.
Even if the virtual function is overridden, the derived class has still access
to the virtual function. It can call it by using the scope-operator (::).
The prototype of the virtual function in the base class and the derived
class must be the same.
A virtual function must be a member function of the class. It should not
be a friend function.
Virtual functions cannot be made static.
Constructors cannot be made virtual; however destructors can be made
virtual.

Anna University Chennai

116

DCS 115

OBJECT ORIENTED PROGRAMMING

A virtual function will be usually called with the help of a pointer.


A virtual function in the base class must be declared even when no
definitions can be made possible.
Each object with virtual function(s) is provided with a Function Lookup Table.
This table contains information about the virtual functions and is used to determine,
which function is to be called. However, there is only one table for each class and
each object of this class gets a pointer to this table. If a virtual function is
overridden, the pointer in the table points to the derived class function. If it is not
overridden, it points to the base class version.

NOTES

Have you Understood Questions?


1. Virtual functions achieves ____________ form of polymorphism
2. When binding happens at run time we call it as ____________
3. List the advantages of creating object pointers to base classes.
6.4

Virtual Destructors

Constructers and destructors are not inherited. Constructors always create one
particular type and hence it makes no sense to inherit them. Therefore they cannot
be made virtual. Destructors are used when an object is deleted. If the derived
class allocates some resources that outside the base class methods, it needs its
own destructor. However, as explained before, a pointer to a base class can be
used to point to a derived class. To ensure that the correct destructor is called, the
destructor should be virtual otherwise it might happen that some resource is not
deallocated. For this reason, destructors should always be declared virtual.
Have you Understood Questions?
1. Constrcuters are inherited(TRUE /FALSE)
2. Destructors are not inherited (TRUE/FALSE)
6.5

Virtual Base Classes

Suppose you have two derived classes B and C that have a common base class A,
and you also have another class D that inherits from B and C. You can declare the
base class A as virtual to ensure that B and C share the same sub object of A.
In the following example, an object of class D has two distinct sub objects of
class A, one through class B1 and another through class B2. You can use the
keyword virtual in front of the base class specifies in the base lists of classes B1
and B2 to indicate that only one sub object of type A, shared by class B1 and class
B2, exists.

117

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES
A

B2

B1

D
Fig. 6.1 Virtual Base Classes
The C++ classes for the fig 6.1 were
class A
{

};
class B1 :virtual public A
{

};
class B2: virtual public A
{

};
class D:public B1,public B2
{

}
NOTE:
The keywords virtual and public can be used in either order. For Example virtual
public A is equivalent to public virtual A

Anna University Chennai

118

DCS 115

OBJECT ORIENTED PROGRAMMING

Have you Understood Questions?

NOTES

1. What happens if base class is declared virtual?


2. In which order the keywords virtual and public must appear in the derived
class?
6.6

Pure Virtual Function

Sometimes when a virtual function is declared in the base class there is no


meaningful operation for it to perform. This situation is common because often a
base class does not define a complete class by itself. Instead, it simply supplies a
core set of member functions and variables to which the derived class supplies
the remainder. When there is no meaningful action for a base class virtual function
to perform, the implication is that any derived class must override this function.
To ensure that this will occur, C++ supports pure virtual functions.
A pure virtual function has no definition relative to the base class. Only the function
prototype is included. To make a pure virtual function, use this general form:
virtual type func-name(parameter-list) = 0;
For Example
virtual void show()=0;
The key part of this declaration is the setting of the function equal to 0. This tells
the compiler that no body exists for this function relative to the base class. When
a virtual function is made pure, it forces any derived class to override it. If a
derived class does not, a compile-time error results. Thus, making a virtual function
pure is a way to guaranty that a derived class will provide its own redefinition.
Have you Understood Questions?
1. How will you declare a pure virtual function?
6.7
Abstract Classes
An abstract class is a class that is designed to be specifically used as a base class.
For an abstract class no objects can be created. Objects can only be generated
from derived classes. An abstract class contains atleast one pure virtual function.
As mentioned earlier a pure virtual function is declared by adding = 0 to the
function declaration.
Any (non-virtual) class that is derived from an abstract class must implement all
pure virtual functions of the base class. Otherwise it is a virtual class itself. The
following is the example of an abstract class.

119

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

class shape
{
public:
virtual void area()=0;
};
Once the abstract class is created the class inheriting it should override all the
pure virtual functions. For example
class square :public shape
{
public:
void area()
{
cin>>side;
int s=2 * side;
cout<<AREA IS <<s;
}
};
Have you Understood Questions?
1.

Objects cannot be created for abstract class (TRUE/FALSE)

Summary

The process of associating or binding a particular function/method code


to a name is called binding.
Early binding achieves compile time polymorphism and late biding
achieves run time polymorphism.
Virtual functions are used to implement run time polymorphism.
A virtual function is simply declared by putting the keyword virtual before
the function declaration. Overloading virtual functions is called as
overriding.
Each object with virtual function(s) is provided with a Function Lookup
Table. This table contains information about the virtual functions and is
used to determine, which function is to be called.
You can declare the base class as virtual to ensure that the subclasses
share the same sub object of the base class
A pure virtual function has no definition relative to the base class. Only
the function prototype is included always a pure virtual function is equated
to zero.
An abstract class is a class that is designed to be specifically used as a
base class.

Anna University Chennai

120

DCS 115

OBJECT ORIENTED PROGRAMMING

Exercises
Short Questions
1.
Differentiate early and late binding concepts
2.
The binding that is associated with function overloading is
_____________________
3.
What is the purpose of function look up table ?
4.
Write short notes on Virtual destructors
5.
Why we need pure virtual functions? How it is declared?
6.
Overloading of virtual functions is called as ________________
Long Questions
1.
Explain virtual functions with a example. Write the rules associated
with virtual functions.
2.
Write a not on Virtual Destructors
3.
Explain Abstract classes and its features with example
Programming Exercises
1. Implement the inheritance scheme given below with a C++ program

NOTES

Device

Output device

Input device

Input/Output device

1.

Create a virtual base class called shape with a virtual function area ().
Create derived classes rect, square and circle and override the function
area() and compute the area of the objects.

Answers to Have you Understood Questions


Section 6.3
1.
Run time
2.
Dynamic binding
3.
(a)It makes the program flexible
(b) We can create one array to store objects of both base and derived
classes

121

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Section 6.4
1.
False
2.
True
Section 6.5
1.
2.

If we declare the base class as virtual to ensure that all the sub classes
share the same object of the base class
They can appear in either order.

Section 6.6
1.
By equating the function prototype to zero.
Section 6.7
1.
TRUE.
References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & de


sign
(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

5.

The C++ Programming Language


(3rd. edition)
Author : Stroustrup, B.,
Publisher : Addison- Wesley, 1997.

6.

Thinking in C++
Author: Bruce Eckel
Publisher : Prentice Hall 2000

Anna University Chennai

122

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 7
FILES

7.1

File Stream Operations

Binary
File I/O

Binary
Sequential Input And Output
Operations
Random Access Files

Input And Output Operations With


Files
Reading And Writing Objects In A
File
Error Handling In File Operations

Introduction

We all know C++ I/O operates on streams hence it is very important to know
about streams supported by C++. Regarding streams this chapter starts the
discussions from knowing the hierarchy of C++ I/O classes. You will be learning
handling sequential files, random access files and binary files in detail. This chapter
introduces you to write programs in C++ to handle the above mentioned files.
Finally the chapter also discusses the error handling mechanisms supported by
c++ when working with files.
7.2

Learning Objectives

7.3

To introduce file stream operations


To introduce file I/O
To discuss sequential input and output operations
To present the concept of random access files
To show how input output operations are performed on binary files
To introduce error handling mechanisms in files.
File Stream Operations

C++ I/O system operates on streams. A stream is a common, logical interface to


various devices of a computer system. A stream either produces or consumes
information, and is linked to a physical device by the C++ I/O system. All streams
behave in the same manner.
123

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

There are two types of streams: text and binary. A text stream is used with
characters. When a text stream is being used, some character translations may
take place (e.g. newline to carriage-return/linefeed combination). A binary stream
uses binary format for representing data in the memory. A binary stream can be
used with any type of data. No character translation will occur. Thus always the
binary file contains exact data sent by the stream.
C++ contains several predefined streams that are automatically opened. These
are cin, cout, cerr and clog. By default, cin is linked to the keyboard, while the
others are linked to the screen. The difference between cout, cerr and clog is, that
cout is used for normal output, cerr and clog are used for error messages.
The I/O system of C++ has many classes and file handling functions. All these
classes are derived from the base class ios.The hierarchy of C++ I/O classes are
given below.

IOS

ISTREAM

STREAMBUF

OSTREAM

IOSTREAM

IFSTREAM

FSTREAM

OFSTREAM

Fig.7.1. Hierarchy of C++ I/O classes


Have you Understood Questions?
1. What is a stream ?
2. What are the two types of streams?
7.4
File I/O
File I/O and console I/O are closely related. To perform file I/O, you must include
<fstream> in your program. It defines several classes, including ifstream, ofstream
and fstream. These classes are derived from ios, so ifstream, ofstream and fstream
Anna University Chennai

124

DCS 115

OBJECT ORIENTED PROGRAMMING

have access to all operations defined by ios. In C++, a file is opened by linking it
to a stream. There are three types of streams: input, output and input/output. Before
you can open a file, you must first obtain a stream.

NOTES

To create an input stream, declare an object of type ifstream.


To create an output stream, declare an object of type ofstream.
To create an input/output stream, declare an object of type fstream.

Examples
ofstream out(emp.dat); //Opens emp.dat file in output mode
ifstream in(emp.dat); //Opens emp.dat file in input mode
fstream fin(emp.dat); //Opens emp.dat file in input/output mode
The prototype of each member function is given below.

void ifstream::open(const char * filename,openmode)


void ifstream::open(const char * filename,openmode)
void ifstream::open(const char * filename,openmode)

Here filename is the name of the file to be processed, the filename also includes
the path specifier. The value of the mode specifies how the file has to be
opened.C++ supports the following file opening modes

ios::app
ios::ate
ios::binary
ios::in
ios::out
ios::trunk

Note that the file opening modes can be combined using | symbol. For example
ofstream out(emp.dat ,ios::out | ios::trunk)

ios::app: causes all output to that file to be appended to the end. Only
with files capable of output.
ios::ate: causes a seek to the end of the file to occur when the file is
opened.
ios::out: specify that the file is capable of output.
ios::in: specify that the file is capable of input.
ios::binary: causes the file to be opened in binary mode. By default, all
files are opened in text mode. In text mode, various character translations
might take place, such as carriage return/linefeed sequences being
125

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

converted into newlines. However, when a file is opened in binary mode, no


such character translations will occur
ios::trunc: causes the contents of a pre-existing file by the same name to be
destroyed and the file to be truncated to zero length. When you create an
output ios::trunc: causes the contents of a pre-existing file by the same name
to be destroyed and the file to be truncated to zero length. When you create an
output stream using ofstream, any pre-existing file is automatically truncated.

Once the file is opened we can read from or write into the file based on the mode you
have opened. After processing the file it has to be closed. To close a file we have to use
the member function called close, for example
in.close() //this will close file pointed by the stream in.
The close function will not take any parameters and will not return any value.
Example 1:
The following program writes name and rollno into a file called student.
#include<iostream.h>
#include<fstream.h>
int main()
{
ofstream out(Student); //open the file student in output mode
char name[30];
int rollno;
cout<<ENTER YOUR NAME<<endl;
cin>>name;
cout<<ENTER YOUR ROLL NO<<endl;
cin>>rollno;
out<<name <<\t ; // write name to the file student
out<<rollno;
// write rollno to the file student
out.close();
}
Output of the Program
ENTER YOUR NAME
AHAMED
ENTER YOUR ROLL NO
1101

Anna University Chennai

126

DCS 115

OBJECT ORIENTED PROGRAMMING

To view the outputs from file go to command prompt and type the command given
below.
c:\tc\bin>type student (press enter key)
AHAMED

NOTES

1101

In this example we have opened the file student in output mode. Since the
openmode parameter to open( ) defaults to a value appropriate to the type of
stream being opened, there is no need to specify its value in the preceding example.
Example 2:
The following example reads the content of the file student.
#include<iostream.h>
#include<fstream.h>
int main()
{
ifstream in(Student); //open the file student in input mode
char name[30];
int rollno;
in>>name; // read name from the file student
in>>rollno; // read rollno from the file student
cout<<NAME IS <<name<<endl;
cout<<ROLL NO IS <<rollno ;
in.close();
}
Output of the Program
NAME IS AHAMED
ROLL NO 1101
In the preceding examples we are working with one file at a time. Now lets learn now
let us learn how to work with multiple files.
Example 3:
This example works with more than one file.
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
int main()
127

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

{
ofstream out;
out.open(book);
out<<C++;
out<<JAVA;
out.close();
out.open(author);
out<<H.SCHILDT;
out<<BALAGURUSAMY;
out.close();
out.open(publisher);
out<<OSBORNE;
out<<TATA MCGRAW;
out.close();
ifstream in;
char disp[100]; //create a buffer to store the data read from the file
in.open(book);
cout<<BOOK DETAILS <<endl;
while(in) //iterate till end of file
{
getline(in,disp); //read a line from the file and put in the buffer
cout<<disp;
}
in.close();
cout<<AUTHOR DETAILS<<endl;
in.open(author);
while(in) //iterate till end of file
{
getline(in,disp); //read a line from the file and put in the buffer
cout<<disp;
}
in.close();
cout<<PUBLISHER DETAILS<<endl;
in.open(publisher);
while(in) //iterate till end of file
{
getline(in,disp); //read a line from the file and put in the buffer

Anna University Chennai

128

DCS 115

OBJECT ORIENTED PROGRAMMING

cout<<disp;
}
in.close();

NOTES

return 0;
}
Output of the Program
BOOK DETAILS
C++ JAVA
AUTHOR DETAILS
H.SCHILDT BALAGURUSAMY

PUBLISHER DETAILS
OSBORNE TATA MCGRAW
Here three files book, author, publisher are opened in output mode and the contents
are written and then same files are opened in input mode, the contents are read
from the file and displayed.
In this example we have used the getline function, which is used to read a line
from the file pointed by the stream and store in a buffer .The second parameter in
the getline function indicates buffer name.
Have you Understood Questions?
1. List some classes available in fstream header file?
2. if we want have a input and output operations on a file which type of
object we create?
3. Write any two file opening modes?
7.5 Sequential Input And Output Operations
Sequential input and output operations are performed on sequential files. A
sequential file is one in which every record is accessed serially, in the order in
which they are written hence to process any ith record all the previous i-1 records
has to be processed.
In C++ every sequential file (including Random access file) will be associated
with two file pointers. They are

129

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

get() pointer
put() pointer

The get pointer is an input pointer; it is used to read the content of the file. The get
pointer will point content of the file to be read. When the file is opened in input
mode the get pointer will point the first location of the file.
The put pointer is an output pointer; it is used to write content to the file. The put
pointer will point to location where the content has to be written. When the file is
opened in output mode the put pointer will point the first location of the file.
However when the file is opened in append mode (ios::app) the put pointer will
point the last location of the file.
Example 4:
This example program uses put pointer to write content to the sequential file.
#include<iostream.h>
#include<fstream.h>
int main()
{
fstream out(test,ios::out); //opens test file in output mode
cout<<ENTER A STRING AT END PRESS #<<endl;
do
{
cin.get(ch);
out.put(ch); //write a character to the file
} while (ch! =#)
out.close();
}
Output of the Program
ENTER A STRING AT END PRESS#
ANNA UNIVERSITY#
c:\tc\bin>type test
ANNA UNIVERSITY#
Example 5:
This is an example program that uses get pointer to read content from the sequential
file.

Anna University Chennai

130

DCS 115

OBJECT ORIENTED PROGRAMMING

#include<iostream.h>
#include<fstream.h>
int main()
{
fstream in (test,ios::in); //opens test file in input mode
char ch;
cout<<READING CONTENT FROM THE FILE.<<endl;
while (in)
{
in.get(ch); //get a character to the file
cout<<ch;
}
in.close();
}

NOTES

Output of the Program


READING CONTENT FROM THE FILE.
ANNA UNIVERSITY#
Have you Understood Questions?
1. What is sequential file ?
2. write the 2 pointers associated with sequential file ?
7.6 Random Access Files
Random access file is one that allows accessing records randomly in any order
hence any ith record can be accessed directly. In order to perform random access
to a file C++ supports the following functions in addition to get() and put() pointers

seekg()
seekp()
tellg()
tellp()

Moves get pointer to specified position


Moves put pointer to specified position
Returns the position of get pointer
Returns the position of get pointer

The tell pointer is use to give the current position of the file. The functions
tellg() and tellp() have the following prototype

position tellg()
position tellp()

Here position is the integer value that is capable of holding the largest value that
defines the file position.
131

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

The functions seekg() and seekp() have the following prototype


istream &seekg(offset,seekdirection);
ostream &seekp(offset,seekdirection);
From the prototype we can note that both the functions have the same form. The first
parameter offset specifies the number of bytes the file pointer has to move from the
specified position. The second parameter seekdirection may take any one of the
following values.

ios::beg
ios::cur
ios::end

seek from the beginning


seek from the current position
seek from end.

Consider the following examples


Table 7.1 File Pointer Positioning
SEEK

POSITION OF THE FILE POINTER

in.seekg(0,ios::beg)

Moves the get pointer to the beginning of file pointed


by the stream in

in.seekg(0,ios::end)

Moves the get pointer to the end of file pointed by


stream in

in.seekg(10,ios::cur)

Moves the get pointer 10 bytes ahead from the


current position of the file pointed by stream in

in.seekg(-k,ios::end)

Moves the get pointer m bytes before from the


end of the file pointed by stream in

out.seekp(k,ios::beg)

Moves the put pointer k bytes ahead from the


beginning of the file pointed by stream out

out.seekp(-k,ios:;end)

Moves the put pointer k bytes before the end of


the file pointed by stream out

Example 6:
The following program opens a random access file in input and output mode and it will
allow accessing the specified character in the file.

Anna University Chennai

132

DCS 115

OBJECT ORIENTED PROGRAMMING

#include<iostream.h>
#include<fstream.h>
int main()
{
fstream in(test,ios::in | ios :: out); //opens test file in input/output mode
char ch;
int pos;
cout<<ENTER A STRING AT END PRESS #<<endl;
do
{
cin.get(ch);
in.put(ch); //write a character to the file
} while (ch! =#);
in.seekg(0) ; // Goto the beginning of the file;
cout<<READING CONTENT FROM THE FILE<<endl;
while (in)
{
out.get(ch); //get a character to the file
cout<<ch;
}
cout<<ENTER THE POSITION OF THE FILE TO READ;
cin>>pos;
in.seekg(pos,ios::beg); //MOVES THE GET POINTER TO THE
POSITION
while (in)
{
out.get(ch); //get a character to the file
cout<<ch;
}
in.close();
}

NOTES

Output of the Program


ENTER A STRING AT END PRESS#
ANNA UNIVERSITY#
READING CONTENT FROM THE FILE
ANNA UNIVERSITY#
ENTER THE POSITION OF THE FILE TO READ 2
N
Have you Understood Questions?
1.
What is a random access fle?
2.
Write the two seek pointers available in random access files.
3.
What do you mean by out.seekp(k,ios::beg) ?
133

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

7.7 Input and Output Operations with Binary Files


As mentioned earlier a binary file stores the content in binary format and a binary
file can be used to represent any kind of data. Similar to the get and put functions
of the text file we have read and write functions in a binary file. The syntax of
read and write functions is given below.
istream &read(char *buf, streamsize num);
ostream &write(const char *buf, streamsize num);
The read( ) function reads num bytes from the stream and puts them in the buffer
pointed to by buf. The write( ) function writes num bytes to the associated stream
from the buffer pointed by buf. The streamsize type is some form of integer. An
object of type streamsize is capable of holding the largest number of bytes that
will be transferred in any I/O operation.
Example 7:
This program writes an integer number into a binary file.
#include<iostream.h>
#include<fstream.h>
int main()
{
ofstream out;
out.open(number,ios::binary); //opens a binary file
int k=55;
out.write((char *)&k,sizeof(k)); //writes integer to the file
out.close();
return 0;
}
In this example a binary file stream is created by specifying ios::binary in the
open statement. To write an integer to the file we have used write function, the
first parameter to the function is the address of the variable k and the second is
the length in bytes.
Note:
The address of the variable must be casted to the type char *.
Example 8:
This program reads an integer number from the binary file.

Anna University Chennai

134

DCS 115

OBJECT ORIENTED PROGRAMMING

#include<iostream.h>
#include<fstream.h>
int main()
{
ifstream in;
in.open(number,ios::binary); //opens a binary file
int k;
in.read((char *) &k,sizeof(k));
cout<<k;
out.close();
return 0;
}

NOTES

Output of the Program


55
7.7.1

Reading and Writing Objects in a Binary File

We can write a object to a binary file as we do with the primitive data type like
int, float etc. Similarly we can also read an object from the binary file. We will
still use the read() and write() functions to perform read and write operations. The
program given below illustrates reading and writing an object from the binary
file.
Example 9:
#include<iostream.h>
#include<fstream.h>
class book
{
char bname[40];
float cost;
char aname[40];
int pubid;
public:
void getdetails();
void printdetails();
};
void book :: getdetails()
{
cout<<ENTER BOOK NAME<<endl;
cin>>bname;
cout<<ENTER AUTHOR NAME<<endl;
135

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

cin>>aname
cout<<ENTER COST OF THE BOOK<<endl;
cin>>cost;
cout<<ENTER PUBLISHER ID<<endl;
cin>>pubid;

NOTES

}
void book :: printdetails()
{
cout<<BOOK NAME IS <<bname<<endl;
cout<<AUTHOR NAME IS<<aname<<endl;
cout<<COST OF THE BOOK IS <<cost<<endl;
cout<<PUBLISHER ID IS <<pubid<<endl;
}
int main()
{
fstream fin;
fin.open(book,ios::in||ios::out);
int i;
book ptr[2];
for(i=0;i<2;i++)
{
ptr[i].getdetails();
fin.write((char *) &ptr[i],sizeof(ptr[i]));
}
fin.seekg(0);
cout<<PRINTING BOOK DETAILS<<endl;
for(i=0;i<2;i++)
{
fin.read((char *) &ptr[i],sizeof(ptr[i]));
ptr[i].printdetails();
}
fin.close();
return 0;
}
Output of the Program
ENTER BOOK NAME
C++
ENTER AUTHOR NAME
Balagurusamy
ENTER COST OF THE BOOK
Anna University Chennai

136

DCS 115

OBJECT ORIENTED PROGRAMMING

200
ENTER PUBLISHER ID
101
ENTER BOOK NAME
JAVA
ENTER AUTHOR NAME
H.SCHILDT
ENTER COST OF THE BOOK
400
ENTER PUBLISHER ID
102

NOTES

Output of the Program (Contd..)


PRINTING BOOK DETAILS
BOOK NAME IS C++
AUTHOR NAME IS Balagurusamy
COST OF THE BOOK IS 200
PUBLISHER ID IS 101
BOOK NAME IS JAVA
AUTHOR NAME IS H.SCHILDT
COST OF THE BOOK IS 400
PUBLISHER ID IS 102
This program creates an array of objects for the class book. The first for loop in
the main program reads the details of 2 books. Note that we still use the write()
function with the same syntax to write the object to the file. The second for loop
reads the content from the file and displays the details.
Have you Understood Questions?
1.
7.8

How will you perform read/write operations in binary files?


ERROR HANDLING IN FILE OPERATIONS

When we are working with files a number of errors may occur. The most common
errors that may occur while working with files are listed below

Attempting to perform read or write operation on a file that does not exist.
Attempting to process the file even after the last byte file of the file is
reached.
Attempting to write information to a file when opened in read mode.
Attempting to store information in file, when there is no disk space for storing
more data.
Attempting to create a new file with a file name that already exits.
137

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

To overcome from these errors The C++ I/O system maintains status information about
the outcome of each I/O operation. The current I/O status of an I/O stream is described
in an object of type iostate, which is an enumeration data type defined by ios that
includes the members listed in the Table 7.2:
Table 7.2 Error bits in iostate
ERROR FLAG NAME
goodbit
failbit
eofbit

MEANING
No errors occurred
A non fatal I/O error has occurred
End of file has been encountered

There are two ways in which you can obtain the I/O status information. First, we call
the rdstate( ) function, which is a member of ios. It has this prototype:
iostate rdstate( );
It returns the current status of the error flags. rdstate( ) returns goodbit when no error
has occurred. Otherwise, an error flag is returned. The other way you can determine
whether an error has occurred is by using one of these ios member functions:
bool bad( );
bool eof( );
bool fail( );
bool good( );
The eof( ) function returns true if end of file is reached. The bad( ) function returns true
if badbit is set. The fail( ) function returns true if failbit is set. The good( ) function
returns true if there are no errors. Otherwise, they return false.
We can use all these functions in our file-handling program to minimize the errors. The
Example 10 illustrates the usage error bits in file handling.
Example 10:
This program given below contains all error handling mechanisms.
#include<iostream.h>
int main()
{
ifstream in;
in.open(text);

Anna University Chennai

138

DCS 115

OBJECT ORIENTED PROGRAMMING

char ch;
if(!in)
{
cout<<CANNOT OPEN FILE<<endl;
return 0;
}
if(in.bad())
{
cout<<FATAL ERROR IN FILE<<endl;
}
cout<<READING CONTENT FROM THE FILE<<endl;

NOTES

while (in)
{
in.get(ch); //get a character to the file
cout<<ch;
}
in.close();
}
This program initially checks whether the file pointed by the stream in exits, if so
it will check whether there is any fatal error by using the faction bad().If there is
no error the entire content of the file is read and displayed.
Have you Understood Questions?
1.
2.

Which function we use to detect end of file?


When will the fail bit set ?

Summary

A stream is a common, logical interface to various devices of a computer


system.
A text stream is used with characters. A binary stream can be used with
any type of data. No character translation will occur.
File I/O in C++ has many classes that include ifstream, ofstream and
fstream all these classes are derived from ios.
There are many file opening modes that include input,output,appending
etc.,
A sequential file is one in which every record is accessed serially.
In C++ every sequential file (including Random access file) will be
associated with two file pointers namely get() and put().
The get pointer is an input pointer; it is used to read the content of the file.
The put pointer is an output pointer; it is used to write content to the file.
139

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Random access file is one that allows accessing records randomly in any order
The tell function is use to give the current position of the file.
The seek function is used to move the file pointer to the specified position.
The read and write functions are used perform I/O operations in a binary
file.
The C++ I/O system maintains status information about the outcome of
each I/O operation.
The eof( ) function returns true if end of file is reached.
The bad( ) function returns true if badbit is set.
The fail( ) function returns true if failbit is set.
The good( ) function returns true if there are no errors.

Exercises
Short Questions
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Draw the hierarchy of C++ IO streams


Mention the advantage of using binary files
List out the various file opening modes
ifstream in(emp.dat); opens the file in ____________________
mode
__________ symbol is used to combine file opening modes
Mention the use of get() and put() pointers
Write the syntax of seekg and seep function.
Mention the members of the iostate object
To close a file we will call _______________ function.
ios :: end is used to position the file pointer at the _________ of the
file.

Long Questions
1.
Explain random access files also explain how the file pointer is
manipulated
2.
Write short notes on reading and writing objects in binary files.
3.
Explain in detail about error handling functions in files
4.
Write short motes on sequential file organization
Programming Exercises
1.
2.

Write a program to create a file called emp.dat and write employee


details into that file
Create a file called number.txt and write some numbers to the file.
Create files called odd.txt and even.txt and write all the odd
numbers to file odd.txt and even numbers to the file even.txt.

Anna University Chennai

140

DCS 115

3.

4.

OBJECT ORIENTED PROGRAMMING

Create a class called sales with your own data members and functions.
Create object for the class and write the object to the binary file called
sales.dat.
Modify program 1 by including all error handling facilities.

NOTES

Answers to Have you Understood Questions


Section 7.3
1. A stream is a common, logical interface to various devices of a computer
system
2. (1) Binary stream (2) Text stream
Section 7.4
1. ifstream, ofstream and fstream.
2. To create an input/output stream we create an object of type fstream.
3. ios::in , ios::out, ios::trunk
Section 7.5
1. A sequential file is one in which every record is accessed serially
2. (1) get (2) put pointers
Section 7.6
1. Random access file is one that allows accessing records randomly in any
order
2. seekg and seep
3. Moves the put pointer k bytes ahead from the beginning of the file pointed
by stream out
Section 7.7
1. Using read() and write() functions
Section 7.8
1. By using eof() function.
2. When a non fatal I/O error has occurred

141

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & design


(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

5.

The C++ Programming Language


(3rd. edition)
Author : Stroustrup, B.,
Publisher : Addison- Wesley, 1997.

6.

Thinking in C++
Author: Bruce Eckel
Publisher : Prentice Hall 2000

Anna University Chennai

142

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 8
TEMPLATES

Function Templates
Class Templates
Function Templates with Multiple Parameters
Class Templates with Multiple Parameters
C++ Function Templates Overloading
Member Function Templates

8.1 Introduction
Generic programming is an approach where generic types are used as parameters.
Generic data types are those that can act like a place holders for other data types.
In C++ generic programming is done with the help of templates. Template is one
of the important features available in C++. Using templates it is possible to create
generic classes and generic functions hence templates provides support for generic
programming.
C++ templates are those that can handle different data types without separate
code for each of them. In generic functions or generic classes, the type of data
that is operated upon is specified as a parameter. This allows us to use one function
or class with several different types of data without having to explicitly recode a
specific version for each type of data type. Thus, templates allow you to create
reusable code.
8.2 Learning Objectives

To introduce the concept of function templates


To show how function templates can be used with multiple parameters
To discuss function templates overloading
To introduce the concept of class templates
To discuss class templates with multiple parameters
To present the concept of member function templates.
143

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

8.3 Function Templates


In many situations, we want to write the same functions for different data types.
For an example consider multiplication of two variables. The variable can be
integer, float or double. The requirement will be to return the corresponding return
type based on the input type. Instead of writing an overloaded function to solve
the above problem we can create a C++ function template. When we use C++
function templates, only one function signature needs to be created. The C++
compiler will automatically generate the required functions for handling the
individual data types. Thus function templates make programming easy.
A function template or generic function defines a general set of operations that
will be applied to various types of data. A function template has the type of data
that it will operate upon passed to it as a parameter. Using this mechanism, the
same general procedure can be applied to a wide range of data; hence templates
are also called as parameterized functions or classes. A function template is created
by using the keyword template. The general form of a template function definition
is as
template <class T>
returntype functionname(parameter list)
{
// body of function
}
Here the type T acts as a placeholder name for the data type used by the function,
the variable T belongs to generic data type. The compiler will automatically replace
this placeholder with an actual data type when it creates a specific version of the
function.
Example 1:
The following example declares add() function that will add two values of any
given data type.
//FUNCTION TEMPLATES
#include <iostream.h>
template <class T>
void add(T &a,T &b)
{
T c;
c= a+b;
cout<<THE SUM IS: <<c<<endl;
}

Anna University Chennai

144

DCS 115

OBJECT ORIENTED PROGRAMMING

int main()
{
int a=10,b=20;
add(a,b);
float c=12.5,d=13.8;
add(c,d);
}

NOTES

In this example the keyword template is used to create template function add().
Here the variable T is used as a placeholder name for the data type .The function
add() performs the addition of two numbers. In the main program the function
add is called with two different set of data types i.e. int and float. Since add() is a
template function the complier creates two version of add() function one to perform
addition of integers and another to perform addition of two floats.
Example 2:
This example of function templates takes input parameters and return values.
//FUNCTION TEMPLATES WITH RETURN VALUES
#include <iostream.h>
template <class T>
T small(T &a,T &b)
{
if(a>b)
return b;
else
return a;
}
int main()
{
int a,b;
cout<<ENTER TWO INTEGERS<<endl;
cin>>a>>b;
cout<<SMALLEST INTEGER IS <<small(a,b);
double m,n;
cout<<ENTER TWO REAL NUMBERS<<endl;
cin>>m>>n;
cout<<SMALLEST REAL NUMBER IS <<small(m,n);
return 0;
}

145

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

8.3.1

Function Templates with Multiple Parameters

A template function can take multiple parameters that may vary in their data
types. The list of parameters that are passed to the template function are separated
using commas. The general form of the template function with multiple parameters
is given below.
template <class T1,class T2,.>
returntype functionname(parameter list of types T1,T2)
{
// body of function
}
Example 3:
The following code snippet gives details regarding the function template with
multiple parameters.
//FUNCTION TEMPLATES WITH MULTIPLE PARAMETERS
#include<iostream.h>
template <class T1,class T2>
void power(T1 &a,T2 &b)
{
T1 p=1;
int i;
for(i=1;i<=b;i++)
{
p=p*a;
}
cout<<a<< RAISED TO THE POWER <<b<< IS = <<p<<\n;
}

void main()
{
power(3.5,5)
power(5,5);
}
In this example the generic function power() raise a base a to the power b.
Here we can note that this function takes two parameters. In the main program
the first line power (3.5.5) will raise the float value 3.5 to the integral power 5 i.e.
it computes 3.55. The second line power(5,5)will raise the integer value 5 to the
Anna University Chennai

146

DCS 115

OBJECT ORIENTED PROGRAMMING

power 5 i.e. it computes 55.Thus we can see that it is possible to have a template
function with multiple parameters.

NOTES

Example 4:
This example creates a generic function with multiple parameters that performs
recursive binary search on a linear array.
//Generic functions to perform Binary Search
#include<iostream.h>
template <class T1,class T2>
bsearch( T1 &a[], T2 &e, int start, int end)
{
int mid;
if(start>end)
return -1;
mid=(start+end)/2;
if(e==a[mid])
return mid;
else if(e<a[mid])
return bsearch(a,e,start,mid-1);
else
return bsearch(a,e,mid+1,end);
}
void main()
{
int n,pos;
int a[100],element;
cout<<Enter the array limit\n;
cin>>n;
cout<<Enter the array elements;
for(i=0;i<n;i++)
cin>>a[i];
cout<<Enter the element to be searched
cin>>element;
pos=bsearch(a,element,0,n);
if(pos==-1)
cout<<Element not found;
else
cout<<Element is found in position<<pos+1;
}

147

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

8.3.2

C++ Function Templates Overloading

You can overload a template function as you do with the normal C++ function. If
you call the name of an overloaded function template, the compiler will try to
deduce its template arguments and check its explicitly declared template
arguments. If successful, it will instantiate a function template specialization.
Errors will be generated if no match is found.
Example 5:
This example performs function templates overloading.
//TEMPLATE FUNCTION OVERLOADING
#include<iostream.h>
template <class T1,class T2>
T add(T1 &a,T2 &b)
{
T c;
c=a+b;
return c;
}
template <class T1,class T2,class T3>
T add(T1 &a,T2 &b,T3 &c)
{
T d;
d=a+b+c;
return d;
}
void main()
{
int x;
x=add(12,13);
float y;
y=add(12.5,10.2.15.8);
cout<<SUM OF TWO INTEGERS<<x;
cout<<SUM OF THREE FLOATS<<y;
}
Two overloaded set of the template function add() exists in this program. If the
add() function is invoked with two parameters then the template function having
two parameters is invoked, if the add() function is called with three parameters
then the template function having three parameters is invoked.
Anna University Chennai

148

DCS 115

OBJECT ORIENTED PROGRAMMING

You can also overload a template function with a non template function. Always
a non template function takes precedence over template functions. Consider the
example given below.

NOTES

Example 6:
This example performs overloading of template function with a non template
function.
//TEMPLATE FUNCTION OVERLOADING
#include<iostream.h>
template <class T>
void square(T &x)
{
cout<<TEMPLATE FUNCTION;
cout<<SQUARE VALUE IS <<x * x;
}
void square(int x)
{
cout<<NON TEMPLATE FUNCTION;
cout<<SQUARE VALUE IS <<x * x
}
void main()
{
int a=10;
square(a); //INVOKES NON TEMPLATE FUNCTION
float b=12.5;
square(b); //INVOKES TEMPLATE FUNCTION
}
The output of the program will be
Thus we can note that when the function square is called with an integer parameter
it invokes the non template function whereas when the same function is invoked
with a float parameter it calls the template function.
Have you understood?
1.
2.
3.
4.

What do you mean by Generic programming?


What do you mean by function templates?
Write the syntax for creating function templates.
How overloaded function template is called?

149

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

8.4

Class Templates

C++ Class Templates are used where we have multiple copies of code for different
data types with the same logic. For example we create a template for an queue
class that would enable us to create queue to hold data items of different data
types like int, float, double etc.,
Templates can be used to define generic classes. A class template definition looks
like a regular class definition, except it is prefixed by the keyword template. A
parameter should be included inside angular brackets. The parameter inside the
angular brackets, can be either the keyword class or typename. This is followed
by the class body declaration with the member data and member functions. The
syntax to declare the class template is given below
//C++ class template
template <class T>
class classname
{
//member variable declarations of type T and other types
//member function declarations
};
Example 7:
The following is a simple example of class templates
//SIMPLE C++ CLASS TEMPLATE
#include<iostream.h>
template <class T>
class calc
{
T a,b;
public:
calc(T x,T y)
{
a=x;
b=y;
}
void add()
{
cout<<SUM IS << a+b;
}
T mul()
{
return a*b;
Anna University Chennai

150

DCS 115

OBJECT ORIENTED PROGRAMMING

}
};
void main()
{
calc<int> obj(10,10);
obj.add();
int c;
c=obj.mul();
cout<<PRODUCT IS <<c;
}

NOTES

This class template is designed to perform simple addition and multiplication for
all data types. You can note that this template class resembles ordinary c++ class
except the template declaration. Just look at the line that creates the object
calc<int> obj(10,10);
The int parameter within the angular brackets specifies that object obj will be
working on integer parameters. You can note that the member functions are called
in the same way as you do with the ordinary classes.
Example 8:
The program given below creates a generic stack and performs all basic stack
operations.
//GENERIC STACK
#include<iostream.h>
#include<iomanip.h>
#define SIZE 10
template <class T>
class template_stack
{
T stack[SIZE];
int top;
int status,data,choice;
template_stack()
{
top=-1;
}
int push(int data)
{
if(isFull())
151

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

return -1;
stack[top]=data;
top++;
return 1;
}
int pop()
{
int d;
if(isEmpty())
return -1;
d=stack[top];
top;
return d;
}
int peek()
{
if(isEmpty())
return -1;
return stack[top];
}
int isEmpty()
{
if(top==-1)
return 1;
else
return 0;
}
int isFull()
{
if(top==SIZE-1)
return 1;
else
return 0;
}
int size()
{
return top+1;
}
}
void main()
{
template_stack<int> stk;
int status;

Anna University Chennai

152

DCS 115

OBJECT ORIENTED PROGRAMMING

do
{

NOTES
cout<<1PUSH;
cout<<2POP;
cout<<3PEEK;
cout<<4->SIZE
cout<<5EXIT;
cout<<Enter Ur Choice\n;
cin>>ch;
switch(ch)
{
case 1:
cout<<Enter the data to insert);
cin>>data;
status=stk.push(data);
if(status==-1)
cout<<Full Stack<<endl;
else
cout<<data<< Successfully Inserted;
break;
case 2:
status=stk.pop();
if(status==-1)
cout<<Empty Stack<<endl;
else
cout<< Data Popped is <<status;
break;
case 3:
status=stk.peek();
if(status==-1)
cout<<Empty Stack<<endl;
else
cout<<The Top Element in the Stack is<<status;
break;
case 4:
cout<<The Size of the Stack is <<stk.size();
break;
case 5:
cout<<Bye;
exit(0);
default:
cout<<Invalid Choice<<endl;

}
}while(1);
}
153

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

8.4.1

Class Templates with Multiple Parameters

Like function templates a class template can also take multiple parameters. Thus
it is possible to use more than one generic data type in a class template. The list of
parameters that are passed to the class template are separated using commas. The
general form of the is given below
template <class T1,class T2,.>
class classname
{

//body of the class

}
Example 9:
The following code is an example for class templates with multiple parameters
#include<iostream.h>
#include<iomanip.h>
template <class T1,class T2>
class disp
{
T1 x;
T2 y;
public:
disp(T1 a,T2 b)
{
x=a;
y=b
}
void print()
{
for(int i=0;i<x;i++)
cout<<y<<\t;
}
}
void main()
{
disp<int,char> obj(5,a);
obj.print();
disp<int,float> obj(5,1.1);
obj.print();
}
Anna University Chennai

154

DCS 115

8.4.2

OBJECT ORIENTED PROGRAMMING

Member Function Templates

NOTES

So far in our class templates discussions we have used only inline functions in
the class but it is still possible to write a member function definition outside the
template class. The syntax is
template <class T>
returntype classname<T> :: functionname(parameter list)
{
//body of the function
}
Example 10:
The program given in the previous example is modified using member function
templates.
#include<iostream.h>
#include<iomanip.h>
template <class T1,class T2>
class disp
{
T1 x;
T2 y;
public:
disp(T1 a, T2 b);
void print();
};
template <class T1,class T2>
disp<T> :: disp(T1 a,T2 b)
{
x=a;
y=b;
}
template <class T1,class T2>
void disp<T> :: print()
{
for(int i=0;i<x;i++)
cout<<y<<endl;
}
void main()
{
disp<int,char> obj(5,a);
obj.print();
155

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

disp<int,float> obj(5,1.1);
obj.print();

NOTES
}

Have you understood?


1. When you will create a class template?
2. Write the syntax for creating class templates.
Summary
Generic programming is an approach where generic types are used as
parameters. In C++ generic programming is done with the help of
templates.
A function template or generic function defines a general set of operations
that will be applied to various types of data.
A template function can take multiple parameters that may vary in their
data types.
You can overload a template function as you do with the normal C++
function.
C++ Class Templates are used where we have multiple copies of code for
different data types with the same logic
Templates can be used to define generic classes.
Like function templates a class template can also take multiple parameters.
Thus it is possible to use more than one generic data type in a class template.
Exercises
Short Questions
1. How templates provide reusability of code?
2. How templates function differs from function overloading?
3. Function templates can return values (True/False)
4. Write the syntax for a template function taking multiple parameters
5. Explain Generic classes
6. Is it possible to use more than one generic data type in a class template?
Long Questions
1. Explain overloading template function with example.
2. Explain class templates with an example
Programming Exercises
1. Create a function template to perform bubble sort for generic type
2. Create a overloaded function template to compute area of different objects
3. Create a class template to implement Queue ADT
4. Create a class template called Complex and add member functions called
add() , substract() and multiply() to perform the basic arithmetic operations
on it.
Anna University Chennai

156

DCS 115

OBJECT ORIENTED PROGRAMMING

5. Create a class template called Rational add perform basic arithmetic


operations
(Note: Rational number will be in the form a/b (b <> 0) )

NOTES

Answers to Have you Understood Questions


Section 8.3
1. Generic programming is an approach where generic types are used as
parameters. In C++ generic programming is done with the help of
templates.
2. A function template or generic function defines a general set of
operations that will be applied to various types of data.
3. The syntax is
template <class T>
ret-type-name(parameter list)
{
// body of function
}
6. The function template is overloaded, the compiler will try to deduce its
template arguments and check its explicitly declared template arguments.
If successful, it will instantiate a function template specialization. Errors
will be generated if no match is found.
Section 8.4
1. C++ Class Templates are used where we have multiple copies of code
for different data types with the same logic
2. The syntax is
template <class T>
class classname
{
//member variable declarations of type T and other types
//member function declarations
};

157

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & design


(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

5.

The C++ Programming Language


(3rd. edition)
Author : Stroustrup, B.,
Publisher : Addison- Wesley, 1997.

6.

Thinking in C++
Author: Bruce Eckel
Publisher : Prentice Hall 2000

Anna University Chennai

158

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 9
EXCEPTION HANDLING

Exception Types
Multiple Catch Statements
Exception Handling Mechanism
Catching All Exceptions
Functions Generating Exceptions
Catching All Exceptions
Throwing Mechanisms
Specifying (Restricting) Exceptions
Catching Mechanisms
Rethrowing Exceptions

9.1 Introduction
Generally programmers may commit some errors. Errors can be classified in two
categories. They are Compile time errors and Run time errors. Compile time errors usually comprise of syntax errors such as a missing semicolon, unbalanced
parenthesis etc., they can be easily detected when we compile our program but
Runtime errors are relatively difficult to detect and rectify it. To solve this C++
provides a build-in error handling mechanism that is called exception handling.
Using the C++ exception handling mechanism we can easily identify and respond to run time errors. This chapter briefly explores the various exception handling mechanisms available in C++.
9.2 Learning Objectives

To discuss the different types of exceptions


To introduce exception handling mechanism available in C++
To discuss how to handle exceptions generated by a function
To present throwing mechanisms
To present catching mechanisms
To discuss creating catches for a single try
To show how to catch all exceptions
To discuss about restricting exceptions
159

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

To discuss about rethrowing exceptions

9.3 Exception Types


Exceptions can be classified into two categories. They are

Synchronous Exception
Asynchronous Exception.

Exceptions that are within the control of the program are called synchronous
exceptions for example referring to an index of array, out of the range index.
Exceptions that are beyond the control of program is said to be asynchronous
exceptions for example memory overflow interrupt.
C++ exception handling mechanism works only for synchronous exception. To
handle synchronous exceptions we have to follow the following steps

Identify the problem(error)


Report the error
Receive the error
Rectify the error.

The first step to handle exceptions is to identify the block of code that may cause
error. After identifying it report the error to the error handling routine by throwing it. The error handling routine will receive and process the error.
Have you understood?
1. Give some examples for compile time errors.
2. What are the two categories of exceptions?
3. Mention the steps to handle synchronous exceptions.
9.4 Exception Handling Mechanism
C++ exception handling mechanism is built upon three important keywords. They
are
try
catch
throw
The program statements that we suspect that they may cause runtime are put in
the guarded section called try block. If the exception occurs in the try block it is
thrown to the catch block. The catch block catches the thrown exception and
handles it appropriately. The general form of the try catch structure is
Anna University Chennai

160

DCS 115

OBJECT ORIENTED PROGRAMMING

try
{

NOTES

//try block
} catch(type1 arg)
{
//catch block
}
When any statement present in the try block causes an exception (i.e error) the
program control leaves the try block without executing further statements and
switches to the catch block. The catch block will have the necessary program
statements to handle the error.
In C++, exceptions are treated as objects. Hence when an exception is created
and thrown the corresponding catch block (the catch that has the type which
matches with the object) will catch the exception and handle it otherwise, the
exception will be left unhandled and an abnormal program termination may occur.
The general form of a throw statement is
throw exception;
throw must be executed either from within the try block or from any function that
the code within the block calls (directly or indirectly).
Example 1:
The following is a simple example with try catch block.
#include<iostream.h>
int main()
{
int i,j;
cout << Starts here\n;
i=10;
j=0;
try
{
// start a try block
cout << Inside try block\n;
if(j==0)
{
throw j; // throw an error
161

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

cout << This will not be printed \n;


}
cout<<RESULT IS <<i/j;
} catch( int a)
{ // catch an error
cout << The Number Caught is : ;
cout << a << \n;
}
cout << Ends here;
return 0;

NOTES

When the program enters the try block it is said to be in the guarded section. In
this program when the value of j is zero an exception is created and thrown note
that the statements after throw statement in try block is not executed. Once the
exception is thrown the catch block catches the value (here zero) and handles it.
After that the program continues it normal execution. Thus we can see that in
C++ the exceptions are handled using the following steps.

Control reaches the try statement by normal sequential execution. The


guarded section within the try block is executed
If no exception is thrown during execution of the guarded section, the
catch clauses that follow the try block are not executed.
If an exception is thrown during execution of the guarded section or in
any routine the guarded section calls (either directly or indirectly), an
exception object is created from the object created by the throw operand.
The catch handler that matches the exception object is selected and it is
executed.
When there is no matching catch handler the exception will be left
unhandled and an abnormal program termination may occur.

Have you understood?


1. Give the general form of try catch block.
2. When will the catch block gets executed ?
3. Give the general form of throw statement
9.5

Functions Generating Exceptions

C++ allows functions to generate exceptions. However these functions cannot be


called as an ordinary function. To call a function generating exception, you have
to enclose the function call with a try catch block.

Anna University Chennai

162

DCS 115

OBJECT ORIENTED PROGRAMMING

Example 2:

NOTES

The function compute() given in this example generates and throws exceptions.
#include<iostream.h>
#include<iomanip.h>
void compute(int a,int b)
{
int c;
if(b==0)
throw b;
c=a/b;
cout<<RESULT OF THE DIVISION<<c;
}
void main()
{
int x,y;
cout<<ENTER TWO NUMBERS<<endl;
cin>>x>y;
try
{
compute(x/y);
}
catch(int k)
{
cout<<DIVIDE BY ZERO EXCEPTION<<endl;
}
}
Here we can note that the call to the function compute() is enclosed within the
try catch block. If the value of the dividend b is zero the function generates an
exception, which is handled in the catch block kept in the main program.
Have you understood?
1. How will you call a function that generates exception?
9.6 Throwing Mechanisms
An exception is thrown by using the throw keyword from inside the try block.
Exception handlers are declared with the keyword catch, which must be placed
immediately after the try block. A throw expression accepts one parameter, which
is passed as an argument to the exception handler. The throw statement will have
the following form
163

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

throw (exception)
throw exception
throw
If an exception is thrown during execution of the guarded section or in any routine the guarded section calls (either directly or indirectly), an exception object is
created from the object created by the throw operand. Now, the compiler looks
for a catch clause that can handle an exception of the type thrown or a catch
handler that can handle any type of exception. The catch handlers are examined
in order of their appearance following the try block. If no appropriate handler is
found, the next enclosing try block is examined. This process continues until the
outermost enclosing try block is examined.
Have you understood?
1. Mention the different form of throw statement
2. How catch handlers are examined in a try block.
9.7 Catching Mechanisms
The general form of the catch statement is
catch(type arg)
{
//catch block
}
The catch statement used is determined by the type of the exception. That is, if
the data type specified by a catch, matches that of the exception, that catch statement is executed (all other are bypassed). When an exception is caught, arg will
receive its value. If you dont need access to the exception itself, specify only
type in the catch clause (arg is optional). Any type of data can be caught, including classes that you create
Have you understood?
1. Give the general form of catch block.
9.8 Multiple Catch Statements
A try can have multiple catches, if there are multiple catches for a try, only one of
the matching catch is selected and that corresponding catch block is executed.
The syntax for try with a multiple catch is given below.

Anna University Chennai

164

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

try
{
any statements
if (some condition) throw value1;
else if (some other condition) throw value2;
...
...
...
else if (some last condition) throw valueN;
}catch (type1 name)
{
any statements
}
catch (type2 name)
{
any statements
}
...
...
...
catch (typeN name)
{
any statements
}
Throw generates the exception specified by the corresponding value. This value
can be of any type and multiple throw statements might occur. When an exception is thrown, it is caught by the corresponding catch statement, which then
processes the exception.
If there are more than one catch statement associated with a try. The type of the
exception determines which catch statement is used. When an exception is caught,
name (the argument of the catch statement) will receive the thrown value. This
thrown value determines which catch block will be executed.
Sometimes the arguments of several catch statements match the type of an exception, in that case the first matching catch handler block is selected and executed.
A simple example for try with multiple catches is given below.
165

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Example 3:
The following example has a single try with multiple catches.
#include<iostream.h>
#include<iomanip.h>
void multiple_catch(int value)
{
try
{
if (value==0) //throw an int value
throw 1;
else if (value==1) //throw a char
throw a;
else //throw float
throw 1.1;
}
catch(char c)
{
cout<<Character value is thrown <<c;
}
catch(int i)
{
cout<<Integer value is thrown<<i;
}
catch(float f)
{
cout<<Float value is thrown<<f;
}
}
void main()
{
cout<<Main Program<<endl;
multiple_catch(0);
multiple_catch(1);
multiple_catch(5);
}

Anna University Chennai

166

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Have you understood?


1. A try can many catch (True/False)
2. If a try has multiple catches, how many catch block gets executed.
9.9 Catching All Exceptions
In some circumstances, it might be useful to catch all exceptions, instead of just a
certain type. This situation may occur when we to write a program to handle all
possible exceptions. To achieve this C++ supports a unique catch statement (catch
with three dots) that can catch all exceptions. The syntax for the catch statement
is
try
{
//statements
}catch (...)
{
do something
}
Example 4:
The following code snippet contains the catch statement that can catch all exceptions.
#include<iostream.h>
#include<iomanip.h>
void multiple_catch(int value)
{
try
{
if (value==0) //throw an int value
throw 1;
else if (value==1) //throw a char
throw a;
else //throw float
throw 1.1;
167

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

}
catch( )
{
cout<<Exception is Caught!!! <<endl;
}
}
void main()
{
cout<<Main Program<<endl;
multiple_catch(0);
multiple_catch(1);
multiple_catch(5);
}
Have you understood?
1. Write the syntax of the catch handler that can catch all exceptions

9.10 Specifying (Restricting) Exceptions


The type of exceptions that a function can throw can be restricted to certain types.
To accomplish these restrictions, a throw clause must be added to the function
definition. The throw clause specifies the possible list of types a function can
throw. The syntax is given below.
returntype func-name(arg-list) throw(type-list)
{
//body of the function
}
Only the types in the comma separated type-list can be thrown by the function.
Throwing any other type will cause abnormal program termination.
Example 5:
This example program restricts exceptions for the function multiple_catch().
Anna University Chennai

168

DCS 115

OBJECT ORIENTED PROGRAMMING

#include<iostream.h>
#include<iomanip.h>
void multiple_catch(int value) throw (int,char,double)
{
try
{
if (value==0) //throw an int value
throw 1;
else if (value==1) //throw a char
throw a;
else //throw float
throw 1.1;
}
catch(char c)
{
cout<<Character value is thrown <<c;
}
catch(int i)
{
cout<<Integer value is thrown<<i;
}
catch(float f)
{
cout<<Float value is thrown<<f;
}
}

NOTES

void main()
{
cout<<Main Program<<endl;
multiple_catch(0);
multiple_catch(1);
multiple_catch(5);
}
Have you understood?
1. How will you restrict functions that generates exceptions?
169

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

9.11 Rethrowing Exceptions


Sometimes an exception handler may not wish to process the exception instead it
wishes to throw the exception. If an exception needs to be rethrown from within
an exception handler, this can be done by calling throw statement without any
parameter. The syntax is
try
{
.
.
}
catch (char c)
{
throw; //rethrow same exception
}
Exceptions can be rethrown only within the catch block. When we rethrow an
exception the same catch statement will not catch it again.
Have you understood?
1. Write the syntax of rethrowing exceptions.
2. Is it possible to rethrow an exception outside catch block ?
Summary

Errors cane be classified in two categories they are Compile time errors
and Run time errors.
Exceptions can be classified as Synchronous and Asynchronous exceptions.
C++ exception handling mechanism is built upon three important keywords. They are try, catch and throw.
When any statement present in the try block causes an exception (i.e error) the program control leaves the try block without executing further
statements and switches to the catch block.

Anna University Chennai

170

DCS 115

OBJECT ORIENTED PROGRAMMING

In C++, exceptions are treated as objects


Throw statement must be executed either from within the try block or
from any function that the code within the block calls (directly or indirectly).
C++ allows functions to generate exceptions
If an exception is thrown during execution of the guarded section or in
any routine the guarded section calls (either directly or indirectly), an exception object is created from the object created by the throw operand.
The catch handlers are examined in order of their appearance following
the try block.
The catch statement used is determined by the type of the exception
A try can have multiple catches, if there are multiple catches for a try, only
one of the matching catch is selected and that corresponding catch block
is executed.
C++ supports a unique catch statement (catch with three dots) that can
catch all exceptions.
The type of exceptions that a function can throw can be restricted to certain types. To accomplish these restrictions, a throw clause must be added
to the function definition. The throw clause specifies the possible list of
types a function can throw.
If an exception needs to be rethrown from within an exception handler,
this can be done by calling throw statement without any parameter.

NOTES

Exercises
Short Questions
1.
2.
3.
4.
5.
6.

How does compile time errors differs form run time errors
Memory overflow is an example for ___________
What do you mean by asynchronous exceptions
Write the three keywords used to handle exceptions
Explain guarded section
The number of try and catch statements in a c++ program should be
the same (True/False)
7. How will you catch all exceptions?
8. Is it possible to restrict exceptions generated from a function?
171

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Long Questions
1. Explain the exception handling statements in detail
2. Explain the different form of throw statement.
3. Discuss restricting exception generated by a function
Programming Exercises
1. Write a program to read array from a keyboard. Accept the index from the
user and retrieve the element present in that index. Include exception handling facilities.
2. Create your own program to handle divide by zero exceptions
Answers to Have you Understood Questions
Section 9.3
1. Syntax errors such as a missing semicolon, unbalanced parenthesis etc.,
2. Exceptions can be classified as Synchronous and Asynchronous exceptions.
3. To handle synchronous exceptions the following steps are involved
Identify the problem(error)
Report the error
Receive the error
Rectify the error.
Section 9.4
1.

The general form of the try catch structure is


try
{
//try block
} catch(type1 arg)
{
//catch block
}

2.

When any statement present in the try block causes an exception (i.e error) the program control leaves the try block without executing further
statements and switches to the catch block.

Anna University Chennai

172

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

3. throw exception.
Section 9.5
1. By enclosing the function call in try catch block.
Section 9.6
1. The different form are (1) throw (exception) (2) throw exception (3) throw
2. The catch handlers are examined in order of their appearance following
the try block. If no appropriate handler is found, the next enclosing try
block is examined. This process continues until the outermost enclosing
try block is examined.

Section 9.7
1.

The general form of the catch statement is


catch(type arg)
{
//catch block
}

Section 9.8
1. True
2. one
Section 9.9
1.

try
{
//statements
}catch (...)
{
do something
}

Section 9.10
1. The type of exceptions that a function can throw can be restricted to certain types. To accomplish these restrictions, a throw clause must be added
to the function definition. The throw clause specifies the possible list of
types a function can throw.
173

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Section 9.11
1. The syntax is
try
{
.
.
}
catch (char c)
{
throw; //rethrow same exception
2.

}
No

References
1.

Teach yourself C++


Author: H. Schildt
Publisher: Osborne 2000

2.

Object Oriented Programming with C++


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

3.

Problem Solving with C++ (4th edition)


Author: Walter Savitch
Publisher: Addison Wesley 2002

4.

Computing fundamentals with C++, Object oriented programming & design


(2nd edition)
Author: Rick Mercer
Publisher: MacMillan Press 1995

5.

The C++ Programming Language


(3rd. edition)
Author : Stroustrup, B.,
Publisher : Addison- Wesley, 1997.

6.

Thinking in C++
Author: Bruce Eckel
Publisher : Prentice Hall 2000

Anna University Chennai

174

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 10
INTRODUCTION TO JAVA
PROGRAMMING

10.1

Java Features
Operators
Java Virtual Machine
Expressions
Writing Java Source Code
Data Types
Java Tokens
Variables Declaration
Keywords
Constants
Identifiers
Java Statements
Literals
Command Line Arguments
Introduction

Java is an object oriented language developed by Sun Microsystems. Around


1990 James Gosling, Bill Joy and others at Sun Microsystems began developing
a language called Oak. Oak language was primarily developed to control microprocessors embedded in consumer items like PDAs for this language should be a
platform independent, reliable and compact language.
But however due to the sudden explosion of Internet and similar technologies,
Sun Microsystems changed their project objectives and renamed the Oak language into Java. In 1994 the project team developed a web browser called
HotJava capable of locating and running applets, a java program that can run
on a web browser.
175

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

The earlier versions of java were not so powerful but now Java has became a
common language to develop applications like on line web stores, transactions
processing, database interfaces etc., java has also become quite common on small
platforms such as cell phones and PDAs. Java is now used in several hundred cell
phone models. This chapter explores the various fundamental programming concepts of Java.
10.2

Learning Objectives

10.3

To understand the various features of Java


To introduce Java Virtual Machine
To show how to write, compile and execute Java programs.
To present the tokens of Java language
To discuss expressions and data types present in Java
To understand statements of Java.

Java Features

Java is a high level language looks much similar to C, C++ but it offers many
unique features that are not available in most of modern programming language. Java language has the following features.

Compiled and Interpreted


Platform Independence
Object Oriented
Robust
Security
Automatic Memory Management
Dynamic Binding
High Performance
Multithreaded
Some features in C/C++ eliminated

Compiled and Interpreted


Java compiler converts the source code into intermediate byte code instructions.
Java Interpreter converts these bytes codes into machine executable statements.
Thus we can say java is both compiled and interpreted language. The two steps of
compilation and interpretation allow for extensive code checking and improved
security
Anna University Chennai

176

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Platform Independence
Java programs are capable of running on all platforms hence java programs possess Write-Once-Run-Anywhere feature
Object Oriented
Java is purely an object oriented language. In Java no coding outside of class
definitions is allowed, including the main() function. Java supports an extensive
class library available in the core language packages.
Robust
Java is a robust language. It provides the following facilities to ensure reliable
code
Built in Exception Handling
Strong type checking both at compile and runtime.
Local variables must be initialized
Security
Java is a highly secured language. Java programs will run only within the Java
Virtual Machine (JVM) sandbox thus threats from malicious programs is minimized. Java does not support pointers hence direct memory access is not allowed.
Java supports a built in security manager that determines what resources a class
can access such as reading and writing to the local disk.
Automatic Memory Management
Java supports automatic memory management. Java Virtual machine (JVM) performs garbage collection automatically to claim the memory occupied by unused
objects.
Dynamic Binding
Java is a dynamic language. The linking of data and methods occurs only at run
time. In java new classes can be loaded even when the program is on execution.
High Performance
Interpretation of bytecodes slowed performance in early versions, but advanced
virtual machines with adaptive and just-in-time compilation and other techniques
now typically provide improved performance.
177

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Multithreaded
In java it possible to write programs to handle multiple tasks simultaneously. To
write such programs you have to create light weight processes called Threads
in java. The threads thus created can be executed simultaneously. Multithreaded
programs are useful when you write programs for networking and multimedia.
Some Features in C/C++ Eliminated
Some features in C/C++ are eliminated in java. They are listed below.
No Pointers
No Preprocessor Directives
No Multiple Inheritance in Classes
No template Classes
Have you understood?
1. Explain how java program gets executed.
2. Justify the statement Java programs are secure
3. List out the features that are eliminated in Java but available in C++.
10.4

Java Virtual Machine

You have learnt that java is a platform independent and architectural neutral language. These features are provided by the java run time environment called Java
Virtual Machine (JVM).When a java program is compiled it will not produce a
machine code instead it produces an intermediate byte code for the JVM. When
you run the java program the byte code produced for the JVM will be interpreted
by the java run time interpreter. This interpreter converts the byte code to the
executable machine code for the machine that runs the java program. The process
of compilation and execution is shown below.

Anna University Chennai

178

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

JAVA PROGRAM

JAVA COMPILER

BYTE CODE

Compilation Process
BYTE CODE

JAVA INTERPRETOR

MACHINE CODE

Execution Process
The byte code produced by the java compiler for the JVM is common to all
platforms hence byte code is platform independent.
10.4.1 Writing Java Source Code
Writing java source code is similar to writing a source code in C++ but with some
variations. Writing Java source code is dealt in detail in subsequent chapters.
Now lets start our discussion by writing a simple java program.The following is
a simple java program. The source code is written in the file named Welcome.java
1.
2.
3.
4.
5.

class Welcome
{
public static void main(String args[])
{
// The following line is used to display a line of text
System.out.println(Welcome to Java world );
6. }
7. }
To compile this program you have to use the javac compiler. The syntax to
compile is
179

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

javac filename.java

To compile this program you have to type


javac welcome.java in the command prompt. This will create a class called
welcome.class which contains the byte code representation of the program.
To run the java program you have to use the java interpretor. The syntax to run is

java classname

The First line of this program has the class declaration, as mentioned
earlier every code written in java should be kept inside a class definition.
The third line declares the main() method in java. The main() method in
java should be declared public and static .Usually the return type of the
main method is void.
In java main() method should be declared public because main() method
should be made accessible to all other classes
main() method is declared static because the main() method belongs to
the class not to a specific object
System.out.println() is a statement used to display some text to the user. It
is similar to cout statement in C++.

Example 1:
The code listed below performs addition of two integer numbers.
class sum
{
public static void main(String args[])
{
int i=10,j=25;
k=i+j;
System.out.println(THE SUM IS +k);
}
}
In this example you have declared two integer variables i and j .The + operator
used in the System.out.println() is concatenation operator.
Anna University Chennai

180

DCS 115

OBJECT ORIENTED PROGRAMMING

Have you understood?

NOTES

1. What is a byte code?


2. How will you compile and run your Java program?
3. Mention the statement used to display a message
10.5

Java Tokens

As mentioned in chapter 1 tokens are the basic lexical elements of any programming language In Java every statement is made up of smallest individual elements called tokens. Tokens in java include the following

Keywords
Identifiers
Literals
Operators

10.5.1 Keywords
The list is of keywords available in java are given below. Every keyword will
perform a specific operation in java. As mentioned in chapter 1 keywords cannot
be redefined by a programmer; further keywords cannot be used as identifier
name.

Abstract
Assert
Boolean
Break
Byte
Case
Catch
Char
class
const

continue
default
do
double
else
enum
extends
final
finally
float

For
Goto
If
implements
Import
instanceof
Int
Interface
Long
Native

new
package
private
protected
public
return
short
static
strictfp
super

switch
synchronized
this
throw
throws
transient
try
void
volatile
while

In Java the keyword const, goto are not used


The keyword assert is added in version 1.4
The keyword enum is added in version 5.0

181

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

10.5.2

Identifiers

Every named program componentclass, package, function or variable must have


a legal identifier (or name). An identifier in java has the following rules
An identifier can contain alphanumeric characters, but it should begin
with an alphabet.
Identifiers are case sensitive(i.e. upper and lower cases are different)
Underscore and dollor sign are two special character allowed.
The following are legal identifiers

Find_3
Message
abc$
A23C

The following are the invalid identifiers


33pages
bob@gmail
10.5.3

Literals

A literal is a program element that represents an exact (fixed) value of a certain


type. Java language supports the following type of literals

10.5.4

Integer Literals
(Ex. 123)
Floating point Literals(Ex. 88.223)
Character Literals
(Ex. . , a , \n)
String Literals
(Ex. Hello World)
Boolean Literals
(Ex. True,false)
Operators

Java is a language that is rich in operators. The list of operators supported in


java is given below.
Simple Assignment Operator
=

Simple assignment operator

Arithmetic Operators
+
-

Additive operator (also used for String concatenation)


Subtraction operator

Anna University Chennai

182

DCS 115

*
/
%

OBJECT ORIENTED PROGRAMMING

NOTES

Multiplication operator
Division operator
Remainder operator

Unary Operators
+
++

Unary plus operator; indicates positive value (numbers are positive


without this, however)
Unary minus operator; negates an expression
Increment operator; increments a value by 1
Decrement operator; decrements a value by 1
Logical compliment operator; inverts the value of a boolean

Equality and Relational Operators


==
!=
>
>=
<
<=

Equal to
Not equal to
Greater than
Greater than or equal to
Less than
Less than or equal to

Conditional Operators
&&
||
?:

Conditional-AND
Conditional-OR
Ternary (shorthand for if-then-else statement)

Type Comparison Operator


instanceof

Compares an object to a specified type

Bitwise and Bit Shift Operators


~
<<
>>
>>>
&
^
|

Unary bitwise complement


Signed left shift
Signed right sift
Unsigned right shift
Bitwise AND
Bitwise exclusive OR
Bitwise inclusive OR

The operator precedence table is given below in the Table 10.1.

183

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

Operator Precedence

NOTES

Operators

Precedence

postfix

expr++ expr

unary

++expr expr +expr -expr ~ !

multiplicative

*/%

additive

+-

shift

<< >> >>>

relational

< > <= >= instanceof

equality

== !=

bitwise AND

&

bitwise exclusive OR

bitwise inclusive OR

logical AND

&&

logical OR

||

ternary

?:

assignment

= += -= *= /= %= &= ^= |= <<= >>= >>>=

Table 10.1 Operators and Precedence in Java


Have you understood?
1. List the Java tokens
2. Which of the following is not a Java keyword
(a) abstract (b)class (c) method (d) strictfp
3. Write the rules for naming an identifier.
4. Write any two bitwise operator
5. Logical AND has higher priority over logical OR (True/False)
10.6 Expressions
Java is an expression based language. In Java expressions are used to implement
some computation. Expressions in java can be either a simple expression or a
complex expression. A simple expression may be a value assigned to variable
complicated expression is composed of an operator applied to one or more operands, all of which are also expressions. In Java expressions takes the general
form
variable=expression;
Anna University Chennai

184

DCS 115

OBJECT ORIENTED PROGRAMMING

For Example
x=a+b;
y=a*(b+c)/(m+n)*f
a+=b

NOTES
//Simple expression
//Complex expression
//Similar to a=a+b.

Have you understood?


1. What is an expression?
10.7 Data Types
Java supports the following list of data types. They are
boolean
1-bit. May take on the values true and false only.
true and false are defined constants of the language and are not the same
as True and False, TRUE and FALSE, zero and nonzero, 1 and 0 or any
other numeric value. Booleans may not be cast into any other type of
variable nor may any other variable be cast into a boolean.
byte
1 signed byte (twos complement). Covers values from -128 to 127.
short
2 bytes, signed (twos complement), -32,768 to 32,767
int
4 bytes, signed (twos complement). -2,147,483,648 to 2,147,483,647.
Like all numeric types ints may be cast into other numeric types (byte,
short, long, float, double). When lossy casts are done (e.g. int to byte) the
conversion is done modulo the length of the smaller type.
long
8 bytes signed (twos complement). Ranges from -9, 223, 372, 036, 854,
775, 808 to +9, 223, 372, 036, 854, 775, 807.
float
4 bytes, IEEE 754. Covers a range from 1.40129846432481707e-45 to
3.40282346638528860e+38 (positive or negative).
Like all numeric types floats may be cast into other numeric types (byte,
short, long, int, double). When lossy casts to integer types are done (e.g.
float to short) the fractional part is truncated and the conversion is done
modulo the length of the smaller type.
185

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

double
8 bytes IEEE 754. Covers a range from 4.94065645841246544e-324d to
1.79769313486231570e+308d (positive or negative).
char
2 bytes, unsigned, Unicode, 0 to 65,535
10.7.1

Variables Declaration

The syntax of declaring a variable in java is similar to that of C, C++. Variables


are the names of storage location. The following are the examples of variable
declaration
int i;
int i,j
int i=3,j=7;

//declares a integer variable i


//declares two integer variables i and j
//declares and initialize the values i and j

10.7.2 Constants
Constants refer to values that do not change during the execution of the program.
Examples for constants are
1998
25.789
Hello World
a

Integer constant
Floating point constant
String constant
Character constant

Apart from these types of constants java also supports backslash character constants. The Table 10.2 lists all the backslash constants.
BACKSLASH CONSTANT
PURPOSE
\b
Backspace
\f
Form feed
\n
New Line
\r
Carriage return
\t
Horizontal tab
\\
Backslash
Table 10.2 Backslash Constants
Have you understood?
1.
2.
3.
4.
5.

Mention the range for a byte


How floating point numbers are represented in Java?
What is the size for double data type?
How Characters are represented in Java?
Write any two backslash constants.

Anna University Chennai

186

DCS 115

OBJECT ORIENTED PROGRAMMING

10.8 Java Statements


The statements inside your source files are generally executed from top to bottom,
in the order that they appear. Control flow statements, however, break up the flow
of execution by employing decision making, looping, and branching, enabling
your program to conditionally execute particular blocks of code. Java supports
decision-making statements like (if-then, if-then-else, switch), the looping
statements (for, while, do-while), and the branching statements (break, continue,
return) the syntax and usage of these control structures are similar to C++.Refer
section 1.7 for further details. Here are some simple java programs that make use
of these control structures.

NOTES

Example 2:
The Program given below compares two numbers and finds the greater of the two
numbers.
class big
{
public static void main(String args[])
{
int i=30,j=25;
if(i>j)
System.out.println(I IS BIG);
else if(i==j)
System.out.println(I AND J ARE EQUAL);
else
System.out.println(J IS BIG);
}
}
Example 3:
The Code listed below makes use of a switch case construct.
class switch_ex
{
public static void main(String args[])
{
char ch;
System.out.println(COUNTRIES AND THEIR CAPITALS);
System.out.println(I-INDIA,U-USA,J-JAPAN,F-FRANCE);
try
{
ch=(char)System.in.read();
187

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

switch(ch)
{
case I:
System.out.println(INDIA-NEWDELHI);
break;
case U:
System.out.println(USA-WASHINGTON DC);
break;
case J:
System.out.println(JAPAN-TOKOYO);
break;
case F:
System.out.println(FRANCE-PARIS);
break;
default:
System.out.println(INVALID CHOICE);
}
}catch(Exception err) { System.out.println(ERROR); }

NOTES

}
}
In this example you are reading character input from the keyboard for this you are
using the statement System.in.read().as you know try and catch statements are
used for exception handling.
Now let us write some program using looping statements. The first looping
structure discussed is the while loop. This program prints the multiplication table
for the number 5.
Example 4:
The Program given below prints the multiplication table for 5 using while loop.
class while_test
{
public static void main(String args[])
{
int i=1;
while(i<=10)
{
System.out.println(i + * 5 = +i*5);
i++;
}
}
}

Anna University Chennai

188

DCS 115

OBJECT ORIENTED PROGRAMMING

Example 5:

NOTES

The Program given below is the do... while version of the previous example
class dowhile_test
{
public static void main(String args[])
{
int i=1;
do
{
System.out.println(i + * 5 = +i*5);
}while(i<=10);
}
}
Example 6:
The Program listed below makes use of a for loop to print the multiplication table
for 5.
class for_test
{
public static void main(String args[])
{
for(i=1;i<10;i++)
{
System.out.println (i + * 5 = +i*5);
}
}
}
Have you understood?
1. Write the syntax for if statement in java.
2. Write the syntax for a for loop.
3. What is the purpose of break and continue statement?
10.9 Command Line Arguments
In Java it is possible to provide input to a program as command line arguments.
The String args[] argument in the main method is used to supply command line
arguments to the program. Java programs accept only strings as command line
arguments. However you can convert these arguments into the desired data types
using the wrapper classes.
189

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Thus using wrapper classes you can convert the string to the corresponding simpler type. The signature for the Integer wrapper class is
static int parseInt(String s)
For example
Integer.parseInt(10)
will convert the string 10 to integer 10. The Integer wrapper class has a static
method called parseInt to perform this job. Similarly the signature of the Double
wrapper class is
static int parseDouble(String s)
For example
Double.parseDouble(153.18)
will convert the string 153.18 to double 153.18. The Double wrapper class has
a static method called parseDouble to perform this job. Similar methods are available for all the simple types.
The command line arguments passed to program are stored in the String array
args[] . The first element is referenced as args[0] , the next element as args[1] and
so on.
Command line arguments are supplied to the program when you run the program.
For example when you run the program named hello.java
C:\jdk1.5.0\bin> java hello 123 abc 12.88
args[0] contains 123
args[1] contains abc
args[2] contains 12.88
Example 7:
The following example accepts two command line arguments and computes the
sum of two numbers.
class sum
{

Anna University Chennai

190

DCS 115

OBJECT ORIENTED PROGRAMMING

public static void main(String args[])


{
double i,j,s;
i=Double.parseDouble(args[0]);
j=Double.parseDouble(args[1]);
s=i+j;
System.out.println(The sum is +s);
}

NOTES

}
Output of the Program

Example 8:
The following example accepts a number n as command line argument and
generates n Fibonacci numbers.
class fib
{
public static void main(String args[])
{
int n;
int a=0,b=1,c;
n=Integer.parseInt(args[0]);
for(int i=0;i<n;i++)
{
c=a+b;
System.out.println(The next number is +c);
191

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

a=b;
b=c;

NOTES
}
}
}

Output of the Program

Example 9:
The following example prints number of command line arguments passed.
class count
{
public static void main(String args[])
{
int n;
n=args.length;
System.out.println(The count is +n);
}
}
Have you understood?
1. How command line arguments are passed to the program
2. How will you convert string 50 to integer
3. How will you find length of command line arguments

Anna University Chennai

192

DCS 115

OBJECT ORIENTED PROGRAMMING

Summary

NOTES

Java is a high level language looks much similar to C, C++ but it offers
many unique features that are not available in most of modern programming language.
Java compiler converts the source code into intermediate byte code instructions Java Interpreter converts these bytes codes into machine executable statements
Java programs are capable of running on all platforms hence java programs possess Write-Once-Run-Anywhere feature
Java programs will run only within the Java Virtual Machine (JVM) sandbox
Java is a dynamic language. The linking of data and methods occurs only
at run time.
When a java program is compiled it will not produce a machine code
instead it produces an intermediate byte code for the JVM. When you run
the java program the byte code produced for the JVM will be interpreted
by the java run time interpreter.
Java tokens include keyword, identifiers, literals and operators.
In Java expressions are used to implement some computation. Expressions in java can be either a simple expression or a complex expression.
Float and Double data types were represented in IEEE 754 format
Characters are represented as unsigned Unicode values
In Java Constants refer to values that do not change during the execution
of the program
Java supports decision-making statements like (if-then, if-then-else,
switch), the looping statements (for, while, do-while), and the branching
statements (break, continue, return) the syntax and usage of these control
structures are similar to C++.
Exercises
Short Questions
1.
2.
3.
4.
5.
6.
7.
8.
9.

What is JVM?
Write the signature of main() method
Why main() method is declared as static?
The type comparison operator in java is ____________
When Boolean data type is used?
\\ is used as ___________
Mention the range for char data type
How will you make a early exit from a loop in Java?
What is a wrapper class?

193

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Long Questions
1. Explain the various features of Java in detail
2. Write short notes on JVM
3. Write the syntax and explain the various Java control and looping
statements
Programming Exercises
1. Write a program to print the first n Amstrong numbers (accept n as
command line argument)
2. Write a Java program to compute the sum of the series 1! +2! +3!
+. +n!
3. Write a Java program to find the sum of digits of a number
4. Write a Java program to find area of a triangle
Answers to Have you Understood Questions
Section 10.3
1. Java compiler converts the source code into intermediate byte code instructions Java Interpreter converts these bytes codes into machine executable statements
2. Java programs will run only within the Java Virtual Machine (JVM) sandbox thus threats from malicious programs is minimized. Java does not
support pointers hence direct memory access is not allowed. Java supports a built in security manager that determines what resources a class
can access such as reading and writing to the local disk. Thus we can say
java programs are secure.
3. (1) Pointers (2) Preprocessor directives (3) Multiple inheritance (3)
Tempalte classes
Section 10.4
1. When a java program is compiled it will not produce a machine code
instead it produces an intermediate byte code for the JVM.
2. To compile you have to use javac compiler,to run you have to use java
inter
preter.
3. System.out.println()
Section 10.5
1. Java tokens include keyword, identifiers, literals and operators.
2. c

Anna University Chennai

194

DCS 115

OBJECT ORIENTED PROGRAMMING

3.

(1)An identifier can contain alphanumeric characters, but it should begin


with an alphabet (2) Identifiers are case sensitive(i.e. upper and lower
cases are different) (3)Underscore and dollor sign are two special character allowed.
4. ~ (bitwise compliment) , & (bitwise AND)
5. TRUE.

NOTES

Section 10.6
1. In Java expressions are used to implement some computation. Expressions in java can be either a simple expression or a complex expression.
Section 10.7
1.
2.
3.
4.
5.

Values from -128 to 127.


In IEEE 754 format
8 bytes.
Characters are represented as unsigned Unicode values
\b (backspace) ,\f (form feed)

Section 10.8
1. The if-else statement is used for making decisions. The syntax is
if ( expression)
statement1
else
statement2
2. The for statement syntax is given below
for (expr1; expr2; expr3)
{
statements;
}
3. The break statement provides an early exit from for, while, and do, just as from
switch. Continue causes the next iteration of the enclosing for, while, or do loop
to begin

Section 10.9
1. The String args[] argument in the main method is used to supply
command line arguments to the program.
2. Integer.parseInt(50)
3. By using args.length (args is the string array)
195

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

References
1.

Java 2 Certification Guide


Author: Jamie Jaworski
Publisher: New Riders 2000

2.

http:\\www.sun.com

3.

Thinking in Java
Author: Bruce Eckel
Publisher : Prentice Hall 2000

4.

Programming with Java


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

5.

Java 2: The Complete Reference


Author : Patrick Naughton & Herbert Schildt
Publisher : Tata Mcgraw Hill 2000

Anna University Chennai

196

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 11
OBJECT OREINTED CONCEPTS IN
JAVA

Classes
Objects
Adding Variables to Classes
Adding Methods to Classes
Constructors
Access Specifiers
Default Access
Method Overloading
Constructer Overloading
Static Data Members

Static Methods
Inheritance
Super Keyword
Multilevel Inheritance
Method Overriding
Uses of Super Keyword
Abstract Methods and Classes
Final Keyword
Finalizer Methods

11.1 Introduction
Java is purely an object oriented language. In Java no coding outside of class
definitions is allowed, including the main() function. Java supports all the primary concepts of object orientation like encapsulation, abstraction, inheritance
and polymorphism. This chapter introduces you to implement all the object oriented features supported by java. This chapter provides the necessary background
to understand the advanced concepts presented in the subsequent chapters.
11.2

Learning Objectives
To introduce classes and objects in Java
To discuss about adding methods to classes
To introduce the concept of constructors
To discuss the various access specifiers available in Java.
To present the constructor and method overloading features
To discuss static data members and methods.
To understand the concept of inheritance
To learn the importance of super keyword
197

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

11.3

To show how method overriding is done in Java


To introduce abstract classes and methods
To introduce final keyword
To discuss about finalizer method
Classes

Classes are the basic building blocks of Java programs. Classes are called as
Abstract Data Type (ADT) .Classes describes the structure of the object. Java
classes consist of both attributes and behaviors. Attributes represent the data that
is unique to an instance of a class, while behaviors are methods that operate on
the data to perform useful tasks.
Class Syntax
The syntax to declare a class in Java is:
[public ] [ ( abstract | final ) ] class <classname> [ extends ParentClass ] [
implements interfaces ]
{
// variables and methods declaration
}

A class can have public or default (no modifier) visibility.


1
2
3
4

It can be either abstract, final or with no modifier.


It must have the class keyword, and class must be followed by a legal
identifier.
It may optionally extend one parent class. By default, it will extend
java.lang.Object.
It may optionally implement any number of interfaces separated by
commas.

Here is an example of a GUI class. GUI is a class that extends the parent class
called Frame and implements two interfaces namely ActionListener and
ItemListener.
public class GUI extends Frame implements ActionListener, ItemListener
{
//declarations of variables and methods
}
11.3.1 Objects
Objects are the run time instance of a class. Classes describe objects. Many objects can be instantiated from one class. Objects of different classes can be created, used, and destroyed in the course of executing a program.

Anna University Chennai

198

DCS 115

OBJECT ORIENTED PROGRAMMING

Objects in java are created using the new operator. For example to create an
object for the GUI class we follow the given syntax.

NOTES

GUI obj=new GUI(); //declare and instantiate


OR
GUI obj;
Obj=new GUI();

//declare
//instantiate

11.3.2 Adding Variables to Classes


A class can contain variables. The variables added to the class are called instance
variables. Variables are declared in the java classes as mentioned below.
class product
{
int prod_id;
String prod_name;
double price;
}
11.3.3 Adding Methods to Classes
Methods in Java determine the messages an object can receive. Methods in Java
can be created only as part of a class. A method can be called only for an object,
You call a method for an object by naming the object followed by a period (dot),
followed by the name of the method and its argument list, for example:
objectName.methodName(arg1, arg2, arg3)
The signature of a method comprises the method name and parameter list. The
combined name and parameter list for each method in a class must be unique.
The Syntax to declare a method in java is
[modifiers] return_type <method_name> (parameter_list) [throws_clause ]
{
//method body
}
Return Type: The return type is either a valid Java type (primitive or
class) or void if no value is returned. If the method declares a return type,
every exit path out of the method must have a return statement.
Method Name: The method name must be a valid Java identifier
Parameter List: The parentheses following the method name contain zero
or more type/identifier pairs that make up the parameter list. Each parameter
is separated by a comma. Also, there can be zero parameters.
199

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

There are a number of optional modifiers that you can use when declaring a
method. They are listed in the Table 11.1:
Table 11.1 List of Modifiers in Java
Modifier

Description

Visibility

Can be one of the values: public, protected, or private. Determines what classes can invoke the
method.

static

The method can be invoked on the class instead


of an instance of the class.

abstract

The method is not implemented. The class must


be extended and the method must be implemented in the subclass.

final

The method cannot be overridden in a subclass.

native

The method is implemented in another language.

synchronized

The method requires that a monitor (lock) be


obtained by calling code before the method is
executed.

throws

A list of exceptions thrown from this method.

Now, consider the product class created previously, we can add two methods
getDetails() and displayDetails() to the class.
class product
{
int prod_id;
double price;
void getDetails(int a,String b,double c)
{
prod_id=a;
price=c;
}
void displayDetails()
{
System.out.println(Product id is +prod_id);
System.out.println(Price is +price);
}
}
Anna University Chennai

200

DCS 115

OBJECT ORIENTED PROGRAMMING

Example 1:

NOTES

The following java program performs the basic calculator functions.


class Calculator
{
int n1,n2,res;
void setData(int x1,int x2)
{
n1=x1;
n2=x2;
}
void add()
{
res=n1+n2;
System.out.println(The Sum is : +res);
}
void sub()
{
res=n1-n2;
System.out.println(The Difference is : +res);
}
int mul()
{
res=n1*n2;
return res;
}
double div()
{
return n1/n2;
}
}
class Mainprg
{
public static void main(String args[])
{
Calculator cal=new Calculator();
cal.setData(20,10);
cal.add();
cal.sub();
int y=cal.mul();
System.out.println(The Product is : +y);
double d=cal.div();
System.out.println(The divided value is :+d);
201

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

}
}
Have you understood?
1.
2.
3.
4.
5.

What is a class?
All classes in java extend __________
What is an object?
Write the syntax of method declaration.
Explain abstract keyword.

11.4 Constructors
Constructors are special type of methods that are invoked when we create objects
for the classes. Constructers will have the same name as that of the class. Constructors and methods differ in two important aspects of the signatures. They are
Modifiers
Return types
Like methods, constructors can have any of the access modifiers: public, protected, private, or none (often called friendly). However constructors cannot be
made abstract, final, native, static, or synchronized.
Methods can have any valid return type, or no return type, in which case the
return type is given as void. Constructors cannot take any return type, even void.
Example 2:
The Calculator class created in example 1 is modified, the setData() method is
replaced with a constructer.
class Calculator
{
int n1,n2,res;
Calculator (int x1,int x2) //Constructor
{
n1=x1;
n2=x2;
}
void add()
{
res=n1+n2;
Anna University Chennai

202

DCS 115

OBJECT ORIENTED PROGRAMMING

System.out.println(The Sum is : +res);


}
void sub()
{
res=n1-n2;
System.out.println(The Difference is : +res);
}
int mul()
{
res=n1*n2;
return res;
}
double div()
{
return n1/n2;
}

NOTES

}
class Mainprg
{
public static void main(String args[])
{
Calculator cal=new Calculator(20,10); //Calls the constructer
cal.add();
cal.sub();
int y=cal.mul();
System.out.println(The Product is : +y);
double d=cal.div();
System.out.println(The divided value is :+d);
}
}
Have you understood?
1. What is constructer?
2. Differentiate constructors from other methods.
11.5

Access Specifiers

An access specifier in java determines which data member, which method can be
used by other classes. Java supports three access specifiers and a default access
specifier. Access specifiers are also known as access modifiers. The three access
specifiers supported in Java are
The private access specifier
203

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

The public access specifier


The protected access specifier
Only objects of the same class can have access rights to a method or data member
declared as private. A method or a data member can be declared as private by
prefixing it with the keyword private. For example
private int sum; // private variable
private void method1() //private method declaration
{
//method body
}
A data member or a method declared as public can be accessed by all classes and
their objects. To declare a data member or a method as public prefix the declaration with the keyword public. For example
public double area //public variable
public void calculate() //public method
{
//method body
}
Data members, methods that are declared protected are accessible by that class
and the inherited subclasses. Methods and variables can be declared as protected
by prefixing the declaration with the protected keyword.
protected String msg; //protected variable
protected int search() //protected method
{
//method body
}
11.5.1 Default Access
If none of the above mentioned access specifiers are specified to a method or a
variable, then the scope is considered to be friendly, this is the default access
scheme in Java. A class, method, variable with a friendly scope is accessible to all
the classes of the package. packages are discussed in chapter 15.
Have you understood?
1. Write the three access specifiers available in Java .
2. What is the default access in Java ?

Anna University Chennai

204

DCS 115

OBJECT ORIENTED PROGRAMMING

11.6 Method Overloading

NOTES

Overloading is one of the important polymorphic features of the Object Oriented


System. Like C++ functions we can also overload Java methods. In Java two or
more methods can share the same name as long as either the type of their arguments differs or the number of their arguments differs - or both. When two or
more methods share the same name, they are said overloaded.
Example 3:
The coding listed below overloads the method sum()
class numbers
{
void sum(int x,int y)
{
int z=x+y;
System.out.println(Sum of addition of two numbers : +z);
}
void sum(int x,int y,int z)
{
int r=x+y+z;
System.out.println(Sum of addition of three numbers : +z);
}
}
class test
{
public static void main(String args[])
{
test t=new test();
t.sum(10,20); //Call the method sum with two parameters
t.sum(10,20,30); //Call the method sum with three parameters
}
}
In this program the method sum is overloaded. From the main method when we
call the sum method the corresponding the overloaded version of the sum method
is called.
11.6.1 Constructer Overloading
In Java, similar to the concept of method overloading we have constructer
overloading. In constructer overloading we have multiple constructers that differ
205

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

either in type of their arguments or the number of their arguments or both. The constructer
that takes no parameter is called default constructer. Below is the example of constructer
overloading.
Example 4:
The program given below makes use of constructer overloading concept.
class dimension
{
int x1,y1;
dimension() //default constructor
{
x1=0;
y1=0;
}
dimension(int a)
{
x1=a;
y1=0;
}
dimension(int a,int b)
{
x1=a;
y1=b;
}
void display()
{
System.out.println( x1 is :+x1);
System.out.println( y1 is :+y1);
}
}
class Mainprg
{
public static void main(String args[])
{
dimension d1=new dimension(10,50); //Calls constructer with two
parameter
dimension d2=new dimension(10);
//Calls constructer with one
parameter
dimension d3=new dimension();
//Calls default constructer
d1.display();
d2.display();
d3.display();
}
}

Anna University Chennai

206

DCS 115

OBJECT ORIENTED PROGRAMMING

Have you understood?

NOTES

1. When you will say two methods are overloaded?


2. Define constructor overloading?
11.7

Static Data Members

Each object of a given class has its own copy of all the data defined by the class.
Sometimes it is desirable for all the objects of a particular class to share data. In
Java this can be achieved by defining the corresponding class members as static
using the keyword static. Since static variables are common all the instances of
the class, static variables can also be called as class variables.

for a static data member there will be only one copy of the class member
shared by all objects of the class.

A static data member is like a global variable, but has class-level scope.

To declare a variable as static we have to simply prefix the variable declaration


with the keyword static. For example
static int x;
11.7.1 Static Methods
Like static variables , static methods are called without the object. The differences between a static methods and non-static methods are as follows.

A static method can access only static data and can call only other static
methods. A non-static member function can access all of the above including the static data member.

A static method can be called, even when a class is not instantiated, a nonstatic member function can be called only after instantiating the class as
an object.

A static method cannot have access to the this keyword.

A static method cannot have access to the super keyword.

Example 5:
This program makes use of static data members and methods class test
{
static int increment(int k)
{
k++;
return k;
207

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

}
static int decrement(int j)
{
j;
return j;
}
}
class static_test
{
public static void main(String args[])
{
int a=static_test.increment(10);
System.out.println(Incremented Value is : +a);
int b=static_test.decrement(20);
System.out.println(Decremented Value is : +b);
}
}
In Java class libraries many static methods are found. For example in java.lang
package, we have a class called Math all the methods declared in the Math
class are static.
Example 6:
This program makes use of some static methods available in Math class.
class Math_test
{
public static void main(String args[])
{
System.out.println(Sin 30 is +Math.sin(30));
System.out.println(Square root of 25 is +Math.sqrt(25));
System.out.println(Absolute value for -15 is +Math.abs(-15));
System.out.println(Log value for 88.87 is +Math.log(88.87));
System.out.println(3 Power 5 is + Math.pow(3,5));
}
}

Anna University Chennai

208

DCS 115

OBJECT ORIENTED PROGRAMMING

Have you understood?

NOTES

1. What is static variable?


2. Write any two differences between static and non static variables
3. How will you find the square root of a number?
11.8

Inheritance

Inheritance is a feature by which new classes are derived from the existing classes.
Inheritance allows re-using code without having to rewrite from scratch. Inheritance is a compile-time mechanism in Java that allows you to extend a class (called
the base class or superclass) with another class (called the derived class or subclass). In Java, inheritance is used for two purposes:
Class inheritance - create a new class as an extension of another class,
primarily for the purpose of code reuse. That is, the derived class inherits
the public methods and public data of the base class. Java only allows a
class to have one immediate base class, i.e., single class inheritance
Interface inheritance Interface inheritance is used to achieve multiple
inheritance. It is discussed in detail in chapter 14.
The Syntax for class inheritance is given below
[public ] class <classname> extends ParentClass
{
//variables and methods declaration
}
In keyword extends is used to implement inheritance in Java. In Java the following forms of class inheritance is supported.
Single Inheritance
Multilevel Inheritance
Hierarchical Inheritance.
Example 7:
The program listed below is a single inheritance program.
class rectangle
{
int l;
int b;
rectangle(int x,int y)
209

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

l=x;
b=y;
}
void rect_area()
{
System.out.println(Area of Rectangle is + l*b);
}
}
class cube extends rectangle
{
int h;
cube(int x,int y,int z)
{
super(x,y);
h=z;
}
void cube_volume()
{
System.out.println(Volume of the Cube is + l*b*h);
}
}
class Mainprg
{
public static void main(String args[])
{
cube c=new cube(10,20,30);
c.rect_area();
c.cube_area();
}
}
Output of the Program
Area of Rectangle is 200
Volume of the Cube is 6000

Anna University Chennai

210

DCS 115

OBJECT ORIENTED PROGRAMMING

11.8.1 Super Keyword

NOTES

Java uses a unique keyword called super to call the super class constructers. In
the previous example we have used super keyword to pass parameters to the
super class constructer from the sub class constructer. The following is the syntax
of super keyword
super()
(or)
super(parameter list)
With super(), the superclass no-argument constructor is called. With
super(parameter list), the superclass constructor with a matching parameter list is
called. The parameters in the super keyword must match the parameters in the
super class constructer When super keyword is used it must be the first statement
in the sub class constructor.
11.8.2 Multilevel Inheritance
As mentioned earlier java supports multilevel inheritance. The syntax for multilevel inheritance is given below.
class super1
{

}
class sub1 extends super1
{

}
class sub2 extends sub1
{

}
Example 8:
This program listed below is a simple example for multilevel inheritance.
//Super Class
class data1
{
211

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

int a;
data1(int x)
{
a=x;
}

NOTES

//Sub Class1
class data2 extends data1
{
int b;
data2(int x,int y)
{
super(x);
b=y;
}
}
//Sub Class2
class data3 extends data2
{
int c;
data3(int x,int y,int z)
{
super(x,y);
c=z;
}
void compute()
{
System.out.println(The Product is +a*b*c);
}
}
//Main Program
class Mainclass
{
public static void main(String args[])
{
data3 d=new data3(1,2,3);
d.compute();
}
}

Anna University Chennai

212

DCS 115

OBJECT ORIENTED PROGRAMMING

Have you understood?


1.
2.
3.
4.
11.9

NOTES

What is inheritance? Mention the two forms of inheritance.


List the types of class inheritance supported in Java.
What is the purpose of super keyword ?
Write the syntax of super keyword.
Method Overriding

A subclass inherits all the methods from a superclass. Sometimes, it is necessary


for the subclass to modify the methods defined in the superclass i.e., subclass
may want to provide a new version of a method in the superclass. This is referred
to as method overriding. In a sub class, if you include a method definition that has
the same name and exactly the same number and types of parameters as a method
already defined in the super class, this new definition replaces the old definition
of the method.
Example 9:
This program listed below illustrates Method Overriding concept..
class Circle
{
double radius;
Circle(double r)
{
radius =r;
}

double getArea()
{
return Math.PI*radius*radius;
}
}
class Cylinder extends Circle
{
double length;
Cylinder(double radius, double l)
{
super(radius);
length=l;
}
double getArea()
{
213

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

return 2* Math.PI*radius*radius +2*Math.PI*radius*length;


}
}
class Areaprg
{
public static void main(String args[])
{
Cylinder cy=new Cylinder(3.3,5.2);
double res;
res=cy.getArea();
System.out.println(Area of Cylinder is +res);
}
}
When the overriden method getArea() is invoked for an object of the Cylinder
class, the new overridden version of the method is called and not the old definition from the superclass Circle.
However, if we want to find the area of both circle and cylinder then we have to
instantiate both the classes and invoke the getArea() method.
Circle c=new Circle(3.3);
c.getArea();
Cylinder cy=new Cylinder(3.3,5.2);
c.getArea();
Have you understood?
1. What is method overriding?
11.10 Uses of Super Keyword
We have already learnt the usage of super keyword in invoking the super class
constructer. Super keyword can also be used to call super class method overridden by the subclass method. The previous program is modified with the help of
super keyword.
Example 10:
This program is the modified version of the example 9
class Circle

Anna University Chennai

214

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

double radius;
Circle(double r)
{
radius =r;
}
double getArea()
{
return Math.PI*radius*radius;
}
}
class Cylinder extends Circle
{
double length;
Cylinder(double radius, double l)
{
super(radius);
length=l;
}
double getArea()
{
return 2* super.getArea() +2*Math.PI*radius*length;
}
}
class Areaprg
{
public static void main(String args[])
{
double res;
Circle c=new Circle(3.3);
res=c.getArea();
System.out.println(Area of Circle is +res);
Cylinder cy=new Cylinder(3.3,5.2);
res=cy.getArea();
System.out.println(Area of Cylinder is +res);
}
}
Super keyword can also be used to refer superclass variables. Here is an example.
Example 11:
The Coding given below illustrates the use of super keyword to refer superclass
variables.
215

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

class data1
{
int a;
data1(int x)
{
a=x;
}
}
//Sub Class1
class data2 extends data1
{
int b;
data2(int x,int y)
{
super(x);
b=y;
}
void display()
{
System.out.println(Value of a is +super.a);
System.out.println(Value of b is +b);
}
}
class Mainprg
{
public static void main(String args[])
{
data2 d=new data2(10,20);
d.display();
}
}

Output of the Program


Value of a is 10
Value of b is 20

Thus, we can use super keyword in the following three contexts


1 To call a superclass constructer
2 To call a superclass method overridden by the subclass method
3 To refer the superclass variable from the subclass.
Anna University Chennai

216

DCS 115

OBJECT ORIENTED PROGRAMMING

Have you understood?

NOTES

1. Write the uses of super keyword.


11.11 Abstract Methods and Classes
Abstract methods are those that will have only method declaration without any
implementation. Hence we can say abstract methods are incomplete methods. A
method in java can be declared as abstract by prefixing its declaration with the
keyword abstract. For example
abstract void area();
The implementations for these abstract methods are provided by overriding the
abstract method using a subclass.
Abstract class is a class that is declared as abstract. An abstract class will have
one or more abstract methods. Abstract classes cannot be instantiated but it can
be inherited by other subclasses. These subclasses will provide the implementation of all the abstract methods present in the parent class however, if not, the
corresponding subclass must be declared abstract. Here is an example of a abstract class and its corresponding subclass.
Example 12:
The Coding listed below makes use of an abstract class.
abstract class Shape
{
int l;
Shape()
{
l=10;
}
abstract void area(); //abstract method declaration
}
class Rect extends Shape
{
int b;
Rect()
{
b=10;
}
217

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

void area() //overriding the abstract method.


{
System.out.println( Area of Rect is +l*b);
}
public static void main(String args[])
{
Rect r=new Rect();
r.area();
}

NOTES

}
Have you understood?
1. How will you declare an abstract method?
2. Is it possible to instantiate an abstract class?
11.12 Final Keyword
Java supports an important keyword called Final. The keyword Final is used in
three different context. Final keyword can be used along with
1
2
3

Variables
Methods
Classes

Final keyword when used with a variable, it becomes a constant. To declare a


variable as a Final prefix the keyword Final along with the variable declaration. For example
final int PI=3.14;
When a method declaration is prefixed with the Final keyword the method
cannot be overridden by the subclass method. Thus method overriding can be
prevented. For example
final void calculate()
{
//body of the method
}
When a class is declared as Final then the class cannot be subclassed. Hence it
prevents inheritance. For example
final class test
{
Anna University Chennai

218

DCS 115

OBJECT ORIENTED PROGRAMMING

//body of the class

NOTES

}
11.12.1 Finalizer Methods
Before an object is garbage collected, the runtime system calls its finalize () method. The purpose of finalize () method is to release system resources
before the object gets garbage collected. The signature of finalize method is given
below.
protected void finalize () throws throwable
Finalize () method in java has the following properties
every class inherits the finalize() method from java.lang.Object
the method is called by the garbage collector when it determines no
more references to the object exist
the Object finalize method performs no actions but it may be overridden by any class
normally it should be overridden to clean-up non-Java resources ie
closing a file
Have you understood?
1. How will you declare a constant?
2. Mention the three ways in which final keyword can be used.
3. What is the purpose of finalize() method?
Summary
Java is purely an object oriented language. In Java no coding outside of
class definitions is allowed, including the main() function.
By default all classes in java will extend java.lang.Object.
Objects are the run time instance of a class. Classes describe objects.
Objects in java are created using the new operator.
When a method is declared as native ,its implementation can be given
in another language.
Constructors are special type of methods that are invoked when we
create objects for the classes. Constructers will have the same name as
that of the class.
Java supports public, private and protected access specifiers
If none of access specifiers are specified to a method or a variable, then
the scope is considered to be friendly, this is the default access scheme
in Java.
219

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

In Java two or more methods can share the same name as long as either the
type of their arguments differs or the number of their arguments differs - or
both. When two or more methods share the same name, they are said overloaded.
Constructer overloading is a concept in which you have multiple
constructers that differ either in type of their arguments or the number
of their arguments or both.
Static variables are common all the instances of the class, static variables
can also be called as class variables.
Static methods are called without the object.
Inheritance is a feature by which new classes are derived from the
existing classes.
The keyword extends is used to implement inheritance in Java.
Java uses a unique keyword called super to call the super class
constructers.
If you include a method definition that has the same name and exactly
the same number and types of parameters as a method already defined
in the super class, this new definition replaces the old definition of the
method. This concept is called method overriding.
Abstract methods are those that will have only method declaration
without any implementation.
Final keyword when used with a variable, it becomes a constant
When a method declaration is prefixed with the Final keyword the
method cannot be overridden by the subclass method.
When a class is declared as Final then the class cannot be subclassed.
Before an object is garbage collected, the runtime system calls its
finalize () method. The purpose of finalize () method is to release
system resources before the object gets garbage collected.
Exercises
Short Questions
1.
2.
3.
4.
5.
6.
7.
8.
9.

Mention the OOPs concepts supported by Java


Write the syntax to create class and object
List the modifiers that cannot be used with constructors
Destructors are available in Java (True /False)
Write some methods available in Math class
What is Interface inheritance?
Differentiate method overloading and method overriding
How will you call super class constructor
Write the significance of abstract class.

Anna University Chennai

220

DCS 115

OBJECT ORIENTED PROGRAMMING

Long Questions
1.
2.
3.
4.
5.
6.

NOTES

Explain how classes, methods and objects are created in Java


Explain the various modifiers that can be used with methods
Explain the various access specifiers used in Java programs.
Explain the different context in which super keyword is used
Explain the different context in which final keyword is used
What do you mean by finalize() method ? Explain .

Programming Exercises
1. Create a class in Java to implement a Stack
2. Create a class called Product with prod_name, prod_id, cost, quantity as
data members create necessary methods and constructers for the class
3. Implement the inheritance scheme given below in Java.
Answers to Have you Understood Questions
Section 11.3
1. Classes are the basic building blocks of Java programs. Classes are
called as Abstract Data Type (ADT) .Classes describes the structure of
the object.
2. java.lang.object
3. Objects are the run time instance of a class. Classes describe objects.
4. [modifiers] return_type <method_name> (parameter_list)
[throws_clause ]
{
//method body
}
4. A method without implementation must be declared as abstract.
Section 11.4
1. Constructors are special type of methods that are invoked when we
create objects for the classes. Constructers will have the same name as
that of the class.
2. Constructors cannot be made abstract, final, native, static, or synchronized and it cannot have return type.
Section 11.5
1. The private access specifier , The public access specifier ,The protected
access specifier
221

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

2. friendly scope.
Section 11.6
1. When two or more methods share the same name but differ in their
signature, they are said overloaded.
2. Constructer overloading is a concept in which you have multiple
constructers that differ either in type of their arguments or the number
of their arguments or both.
Section 11.7
1. static variables are common all the instances of the class, static variables
can also be
called as class variables for a static data member there
will be only one copy of the class member shared by all objects of the
class A static data member is like a global variable, but has class-level
scope.
2. (1) A static method can access only static data and can call only other
static methods. A non-static member function can access all of the above
including the static data member. (2) A static method can be called, even
when a class is not instantiated, a non-static member function can be called
only after instantiating the class as an object.
3. By calling Math.sqrt() function.
Section 11.8
1. Inheritance is a feature by which new classes are derived from the
existing classes The two forms of inheritance are (1) class inheritance
(2) interface inheritance.
2. (1) Single (2) Multilevel (3) Hierarchical
3. Java uses a unique keyword called super to call the super class
constructers.
4. super() or super(parameters)
Section 11.9
1. If you include a method definition that has the same name and exactly
the same number and types of parameters as a method already defined
in the super class, this new definition replaces the old definition of the
method. This concept is called method overriding.
Section 11.10
1. (a) To call a superclass constructer (b) To call a superclass method over-

Anna University Chennai

222

DCS 115

OBJECT ORIENTED PROGRAMMING

ridden by the subclass method (c) To refer the superclass variable from the
subclass.

NOTES

Section 11.11
1. By prefixing the method declaration with abstract.
2. No
Section 11.12
1. By declaring the variables as final.
2. Final keyword can be used with variables, methods and classes
3. The purpose of finalize () method is to release system resources before
the object gets garbage collected
References
1.

Java 2 Certification Guide


Author: Jamie Jaworski
Publisher: New Riders 2000

2.

http:\\www.sun.com

3.

Thinking in Java
Author: Bruce Eckel
Publisher : Prentice Hall 2000

4.

Programming with Java


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

5.

Java 2: The Complete Reference


Author : Patrick Naughton & Herbert Schildt
Publisher : Tata Mcgraw Hill 2000

6.

Java in a Nutshell
Author:David Flanagan
Publisher :OReilly1999

223

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 12
ARRAYS AND VECTORS

Arrays
Initializing a Two Dimensional Arrays
Java Array Declaration
Vectors
Java Array Initialization
Vector Creation
Two Dimensional Arrays
Methods in Vector

12.1 Introduction
This Chapter introduces you to understand two important and frequently used
data structures in Java The first data structure this chapter introduces to you is
Arrays. You have already learnt about arrays in C++. Like C++ arrays in Java are
used to hold values that are of the same type, but however Java handles arrays in
a different manner. The creation and processing of arrays are discussed in detail
in this chapter.
The second important data structure discussed in this chapter is the vector. Vector
is a class available in the java.util package. Vectors are commonly used instead
of arrays. Vectors in Java is used to create a generic and dynamic array that hold
objects of any type. The creation and processing of vectors are discussed in detail
in this chapter.
12.2

Learning Objectives
To introduce the concept of arrays
To show how to declare ,initialize and process single dimensional array
To show how to declare ,initialize and process two dimensional array
To introduce the concept of vectors
To show how to declare a vector
To discuss various methods available in vector class.

Anna University Chennai

224

DCS 115

12.3

OBJECT ORIENTED PROGRAMMING

Arrays

NOTES

Arrays are data structures used to hold values that are of the same type. Arrays are
fixed-length structures for storing multiple values of the same type. An array
implicitly extends java.lang.Object so an array is an instance of Object. The structure of java arrays is shown below.

The array a shown in the diagram has nine elements. Like C, C++ the index of
an array in java starts with zero. All the elements in an array as accessed with the
help of array index. The notation a[i] refers to the i-th element of the array.

12.3.1

Java Array Declaration

An array variable is declared in the same way that any Java variable is declared.
It has a data type and a valid Java identifier. The data type is the type of the
elements contained in the array. The [] notation is used to denote that the variable
is an array. Java has a unique way of declaring array.
1
2
3
4

int data[];
data=new int[50];
int[] data;
data=new int[50];
int[] data=new int[50];
int data[]=new int[50];

All the four statements declare an one dimensional array called data with the size
50. Similarly we can declare array for various data types. Some examples
1
2
12.3.2

String args[]
double points[]
Java Array Initialization

Once an array is declared we can initialize it with some initial values. The syntax
is
type arrayname[]={list of values };

225

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

For example
int data[] = { 5,10,15,20,25 };
When we initialize an array, we will not specify the size of the array. The java
compiler automatically calculates the size the array.
Example 1:
The following program computes the sum and average of an array
class Array
{
public static void main(String args[])
{
int data[]= { 5,10,15,20,25 };
int sum=0;
double avg;
for(int i=0;i<data.length;i++)
sum+=data[i];
avg=sum/data.length;
System.out.println( The Sum of the Array is +sum);
System.out.println( The Average of the Array is +avg);
}
}
Output of the Program
The Sum of the Array is 75
The Average of the Array is 15
NOTE:
The size of the array can be found using the variable length. In the
previous example data.length returns the length of the array data.

Example 2:
A simple bubble sort algorithm using single dimensional array is illustrated below.
class Bubble
Anna University Chennai

226

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

public static void main(String args[])


{
int a[]= { 23,7,19,46,53,21 };
for(int i=0;i<6;i++)
for(j=i+1;j<6;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
System.out.println (The Sorted Output is);
for(int i=0;i<6;i++)
System.out.println(a[i]);
}
}
Output of the Program
7
19
21
23
46
53

12.3.3 Two Dimensional Arrays


Often data comes in a two dimensional form. For example, data represented in
tables are two dimensional (or more), a computer-generated image is two dimensional, and so on. To handle these data we need 2-D arrays. To declare an 2-D
array in java, the syntax is
int data[][];
data=new int[3][3];
int data[][]=new int[3][3]
The above statement declares a 3x3 matrix. The first dimension represents the
row size the second dimension represents the column size. In Java, a two-dimen227

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

sional array x is really an array of one-dimensional arrays:


int[][] x = new int[3][5];
The expression x[i] selects the ith one-dimensional array; the expression x[i][j]
selects the jth element from that array.
12.3.4 Initializing a Two Dimensional Arrays
We can initialize an 2-D array as given below.
int[][] twoD = { {1,2,3}, {4,5,6}, {7,8,9} };
You can initialize the row dimension without initializing the columns but not
vice versa
int[][] myArray = new int[5][]; (Correct)
int[][] myArray = new int[][5]; (Error will not work)
Output of the Program
Transpose Of the Matrix is
1
4
7
2
5
8
3
6
9

Example 3:
The below program performs transpose of a 3x3 matrix.
class Transpose
{
public static void main(String args[])
{
int[][] a = { {1,2,3}, {4,5,6}, {7,8,9} };
int [][] b=new int[3][3];
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
{
b[i][j]=a[j][i];
}
System.out.println(Transpose Of the Matrix is );
for (int i=0;i<3;i++)
Anna University Chennai

228

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

for (int j=0;j<3;j++)


{
System.out.print(b[i][j]+\t);
}
System.out.println();
}
}
}
Have you understood?
1.
2.
3.
4.
5.
12.4

What is an Array ?
Arrays in java extend _________
How will you access 10th element of an array a?
Write the statement to declare an integer array k with 50 elements.
How will you initialize 2D array?
Vectors

Vector is a class available in the java.util package. Vectors are commonly used
instead of arrays, because they expand automatically when new data is added to
them. Vectors can hold only Objects and not primitive types (eg, int). If you want
to put a primitive type in a Vector, you have to convert the primitive type to object
and then add it to the vector.
You must import either import java.util.Vector; or import java.util.*; to work
with the vector. Vectors are implemented with an array, and when that array is full
and an additional element is added, a new (bigger) array must be allocated and
copy the elements from the old array to the new array, if you knew the final size,
it is better to use an array but however if you want to create an array that dynamically grow and shrink in size,Vector is a better choice.
12.4.1 Vector Creation
To create a Vector Java supports two types of constructers. The first constructer
creates a vector with a default size 10. The general form is
Vector v=new Vector();
Here v is the object of type vector.The second form of constructer creates a vector
with a specified size. The general form is
Vector v=new Vector(30);
229

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

The constructer given above creates a vector with an initial size 30.
12.4.2 Methods in Vector
Vector class in java supports many methods. Some important methods available
in Vector class are tabulated in the Table 12.1.
Method

Description

v.add(o)

adds Object o to Vector v

v.add(i, o)

Inserts Object o at index i, shifting elements up as


necessary.

v.clear()

removes all elements from Vector v

v.contains(o)

Returns true if Vector v contains Object o

v.firstElement()

Returns the first element.

v.get(i)

Returns the object at int index i.

v.lastElement()

Returns the last element.

v.listIterator()

Returns a ListIterator that can be used to go over the


Vector. This is a useful alternative to the for loop.

v.remove(i)

Removes the element at position i, and shifts all following elements down.

v.set(i,o)

Sets the element at index i to o.

v.size()

Returns the number of elements in Vector v.

v.toArray(Object[])

The array parameter can be any Object subclass (eg,


String). This returns the vector values in that array
(or a larger array if necessary). This is useful when
you need the generality of a Vector for input, but need
the speed of arrays when processing the data.

Table 12.1 Methods in Vector Class


To add elements to the Vector, you have to use the add() method as mentioned
earlier. For example the statement
v.add(o);
adds the object o to the Vector v.

Anna University Chennai

230

DCS 115

OBJECT ORIENTED PROGRAMMING

To get the elements from the Vector, You have to use the ListIterator class. This
class supports two important methods to access Vector elements. They are

NOTES

hasNext(), this method returns true ,if the Vector object still has some
more elements.
next() , this method returns the next available element present in the
Vector object.
Example 4:
This example program makes use of some commonly used vector methods
import java.util.*;
class VectorDemo
{
public static void main(String args[])
{
Vector v=new Vector();
v.add(new Integer(10));
v.add(new Double(55.10));
v.add(new String(Vector));
v.add(new Integer(100));
System.out.println( The First Element is +v.firstElement());
System.out.println( The Last Element is +v.lastElement());
System.out.println( The Size of the Vector is +v.size());
System.out.println( Vector Elements is );
ListIterator i=v.listIterator();
while(i.hasNext())
{
System.out.println(The Element is +i.next());
}
System.out.println(Removing Second Element + v.remove(2));
System.out.println(Adding a New Element in Third Position);
v.add(new String(JAVA));
System.out.println(The New Set of Elements);
i=v.listIterator();
while(i.hasNext())
{
System.out.println(The Element is +i.next());
}
}
}
231

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

The Output of this program is listed below.

NOTES

Have you understood?


1.
2.
3.
4.
5.
6.

Vectors are available in _________ package


Mention the advantage of Vectors over arrays.
How will you add a float value to a vector?
Write the syntax to create the vector with size 15.
Which class is used display the elements stored in the Vector.
How will you find the size of a Vector?

Summary
Arrays are data structures used to hold values that are of the same type.
Arrays are fixed-length structures for storing multiple values of the
same type.
Like C, C++ the index of an array in java starts with zero.
The [] notation is used to denote that the variable is an array.
To declare two dimensional arrays you need two dimensions. The first
dimension represents the row size the second dimension represents the
column size.
Anna University Chennai

232

DCS 115

OBJECT ORIENTED PROGRAMMING

Vector is a class available in the java.util package


Vectors are commonly used instead of arrays, because they expand
automatically when new data is added to them.
To add elements to the Vector, the add() method is used
To get the elements from the Vector, ListIterator class is used
To clear all the elements in the Vector clear() method is used.
size() method is used to determine the size of an Vector

NOTES

Exercises
Short Questions
1. Write the different ways of creating an Array
2. How will you initialize a 1D array
3. Is the following array declaration correct?
int[][] a=new int[5][]
4. What is Vector?
5. Write the syntax of remove() method.
6. What is the purpose of contains() method?
Long Questions
1. Explain how arrays are declared and handled in Java
2. What is Vector? How it is created? Explain few methods available in
Vector
Programming Exercises
1. Write a program to perform matrix multiplication
2. Write a program to check whether a given matrix is upper triangular
3. Write a program to a create a vector of size 10 and perform the following operations
(a) add two float numbers
(b) add a string and then two integers
(c) remove the fourth element
(d) find the size
(e) print the first and last element
(f) display the content of the vector

233

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Answers to Have you Understood Questions


Section 12.3
1. Arrays are data structures used to hold values that are of the same type.
Arrays are fixed-length structures for storing multiple values of the same
type.
2. java.lang.Object
3. a[9] refers 10th element
4. int k[]=new int[50]
5. We can initialize an 2-D array as given below.
int[][] twoD = { {1,2,3}, {4,5,6}, {7,8,9} };
Section 12.4
1. java.util
2. Vectors are commonly used instead of arrays, because they expand automatically when new data is added to them.
3. Cast the float to an object ,then add to the vector
4. Vector v1=new Vector(15)
5. ListIterator
6. By using the size() method.
References
1.

Java 2 Certification Guide


Author: Jamie Jaworski
Publisher: New Riders 2000

2.

http:\\www.sun.com

3.

Thinking in Java
Author: Bruce Eckel
Publisher : Prentice Hall 2000

4.

Programming with Java


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

5.

Java 2: The Complete Reference


Author : Patrick Naughton & Herbert Schildt
Publisher : Tata Mcgraw Hill 2000

6.

Java in a Nutshell
Author:David Flanagan
Publisher :OReilly 1999

Anna University Chennai

234

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 13
STRING HANDLING

13.1

String Class
Methods for Type Conversion
Methods for Comparing and Concatenation of Strings
Miscellaneous methods
Methods for Handling Individual Characters
StringBuffers
Methods for Searching Strings
Creation of StringBuffer
Methods for Extracting Substrings
Methods in StringBuffer
Methods for Case Conversion
Introduction

String handling is one of the most important facilities supported by programming


languages. Handling character strings in Java is supported through two final
classes: String and StringBuffer. The String class implements immutable character strings, which are read-only once the string has been created and initialized,
whereas the StringBuffer class implements dynamic character strings. All string
literals in Java programs are implemented as instances of String class. Strings in
Java are 16-bit Unicode. This chapter provides all necessary details about both
the classes.
13.2

Learning Objectives
To introduce String class in Java
To discuss methods used for comparing and concatenation of Strings
To present methods for handling individual characters
To show methods for searching Strings
To discuss methods for extracting substrings
To show methods used for case conversion
To discuss miscellaneous String handling methods
To discuss methods used for Type Conversion
235

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

To introduce StringBuffer concept in Java


To present the various StringBuffer methods.
13.3 String Class
The String class implements immutable character strings. The strings created using String class are read-only, once it has been created and initialized, all string
literals in Java programs, such as java, are implemented as instances of this
class. Because string objects are immutable they can be shared.
In Java Strings can be created in three different ways. They are
1
2
3

String str=Hello
String str=new String(Hello );
char str[]={H,e,l,l,o};

The String class in java supports a variety of methods to process strings. The
class String includes methods for handling individual characters of the string, for
comparing strings, for searching strings, for extracting substrings, and for creating a copy of a string with all characters translated to uppercase or to lowercase,
for representing objects and other data types as strings, for converting strings to
bytes. Some frequently used methods in String class are given below.
13.3.1

Methods for Comparing and Concatenation of Strings

Strings in java can be compared using the = operator and equals() method. In java
Strings can be concatenated using + operator and concat() method.
Example 1:
The following code performs comparision and concatenation of strings
class example1
{
public static void main(String args[])
{
String s1=Java;
String s2=Java;
String s3=C++;
String obj=new String(Java);
if(s1==s2)
System.out.println(s1 and s2 are Equal);
else
System.out.println(s1 and s2 are not Equal);
if(s1==obj)
System.out.println(s1 and obj are Equal);
else
Anna University Chennai

236

DCS 115

OBJECT ORIENTED PROGRAMMING

System.out.println(s1 and obj are not Equal);

NOTES

if(s1.equals(obj))
System.out.println(Now !! s1 and obj are Equal);
else
System.out.println(s1 and obj are not equal);
System.out.println(s1 + s3 =+s1+s3);
System.out.println(s2 + s3 =+s2.concat(s3));
}
}
Output of the Program
s1 and s2 are Equal
s1 and obj are not Equal
Now !! s1 and obj are Equal
s1 + s3 =JavaC++
s2 + s3 =JavaC++

13.3.2

Methods for Handling Individual Characters

The Table 13.1 list all the methods to handle individual characters
Method

Purpose

charAt(intindex)

Returns the character at the specified index.

getChars(intsrcBegin,intsrcEnd,
char[]dst,intdstBegin)

Copies characters from this string into the


destination character array.

indexOf(intch)

Returns the index within this string of the


first occurrence of the specified character

indexOf(intch, intfromIndex)

Returns the index within this string of the


first occurrence of the specified character,
starting the search at the specified index.

lastIndexOf(intch)

Returns the index within this string of the


last occurrence of the specified character.

237

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

lastIndexOf(int chint fromIndex)

Returns the index within this string of the


last occurrence of the specified character,
searching backward starting at the specified index.
replace(charoldChar,charnewChar) Returns a new string resulting from replacing all occurrences of oldChar in this string
with newChar
Table 13.1 Individual Character Handling Methods
Example 2:
The following code snippet handles individual characters of the string
class example2
{
public static void main(String args[])
{
String str=Anna University;
System.out.println(4th Character +str.charAt(4));
System.out.println(Index of Character U is +str.indexOf(U));
System.out.println(Last Index of Character i is +str.lastIndexOf(i));
char m[]=new char[10];
str.getChars(6,10,m,0);
System.out.println(The String is +new String(m));
System.out.println(When n Changed to m +str.replace(n,m));
}
}
13.3.3

Methods for Searching Strings

The Table 13.2 list all the methods to search strings


Method

Purpose

startsWith(Stringprefix)

Tests if this string starts with the specified


prefix.

startsWith(Stringprefix,inttoffset) Tests if this string starts with the specified


prefix beginning a specified index
endsWith(Stringsuffix)

Tests if this string ends with the specified suffix

Table 13.2 Methods to Search Strings


Anna University Chennai

238

DCS 115

OBJECT ORIENTED PROGRAMMING

Example 3:

NOTES

This example performs searches for a pattern in the given string.


class example3
{
public static void main(String args[])
{
String str=Anna University;
System.out.println(String Starts with Anna : +str.startsWith(Anna));
System.out.println(Ends With Anna : +str.endsWith(Anna));
}
}
Output of the Program
String Starts with Anna : true
Ends With Anna : false

13.3.4

Methods for Extracting Substrings

The Table 13.3 list all the methods to extract substrings


Method

Purpose

substring(intbeginIndex)

Returns a new string that is a substring of


this string.

substring(intbeginIndex,

Returns a new string that is a substring of


this string.

Table 13.3 Methods to Extract Substrings


Example 4:
This example extracts a substring from the given string
class example4
{
public static void main(String args[])
{
String str=Anna University;
System.out.println(Substring from 6th position : +str.substring(5));
System.out.println(Substring from 6th to 10th position : +str.substring(5,9));
}
}
239

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Output of the Program


Substring from 6th position : University
Substring from 6th to 10th position : Univ

13.3.5

Methods for Case Conversion

The Table 13.4 list all the methods to convert the case of a character
Method

Purpose

toLowerCase()

Converts all of the characters in this


String to lower case

toUpperCase()

Converts all of the characters in this


String to upper case

Table 13.4 Methods to perform case conversion


Example 5:
The program given below perform case conversion.
class example5
{
public static void main(String args[])
{
String str=Anna University;
System.out.println( LowerCase +str.toLowerCase());
System.out.println( UpperCase +str.toUpperCase());
}
}

Output of the Program


LowerCase anna university
UpperCase ANNA UNIVERSITY

Anna University Chennai

240

DCS 115

13.3.6

OBJECT ORIENTED PROGRAMMING

Methods for Type Conversion

NOTES

The Table 13.5 list all the methods to convert the data type
Table 13.5 Methods to perform type conversion
Method

Purpose

valueOf(type)

Returns the string representation of the type argument.

getBytes(Stringenc)

Convert this String into bytes according to the


specified character encoding, storing the result
into a new byte array.

Example 6:
The following performs type conversion
class example6
{
public static void main(String args[])
{
String str=This is a test;
int i=100;
System.out.println(Bytes Representation +str.getBytes());
System.out.println(String value of integer 100 : +String.valueOf(i));
}
}

Output of the Program


Bytes Representation [B@10b62c9
String value of integer 100 : 100

241

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

13.3.7

Miscellaneous methods

The Table 13.6 list some miscellaneous methods


Table 13.6 List of miscellaneous methods
Method

Purpose

trim()

This method removes white space from the front


and the end of a String.

length()

Returns length of the String.

Example 7:
The following program finds the length of the string an eliminates white space from the
front and the end of a String.
class example7
{
public static void main(String args[])
{
String str=JAVA ;
str=str.trim();
System.out.println(Length of the String is +str.length());
}
}

Output of the Program


Length of the String is 4
Have you understood?
1.
2.
3.
4.
5.

Write the two string handling classes


Strings in Java is represented as ____________
Which operator is used for concatenation of strings.
List the methods used to find the index of a particular character.
You want to check whether a particular string ends with ler, how will you
achieve this?
6. What is the purpose of valueOf() method?
7. How will you find the length of a String?
13.4

StringBuffers

StringBuffer class is a mutable class unlike the String class which is immutable. Both the
size and character string of a StringBuffer can be changed dynamically. String buffers
are preferred when frequent modification of character strings is involved like appending,
Anna University Chennai

242

DCS 115

OBJECT ORIENTED PROGRAMMING

inserting, deleting, modifying etc. A StringBuffer method involves substantial overhead

NOTES

in terms of computational complexity and memory space hence StringBuffer class must
be used only in situations where String class cannot be used. Strings can be obtained
from string buffers.
13.4.1

Creation of StringBuffer

A StringBuffer in Java can be created using the following three constructers.


1

StringBuffer strBuf2 = new StringBuffer(100); //With capacity 100

StringBuffer strBuf3 = new StringBuffer();

StringBuffer strBuf1 = new StringBuffer(Computer); // Capacity is 24

//Default Capacity 16

The first constructer creates a StringBuffer that has the storage capacity to store
100 characters. The second constructer creates a StringBuffer that has the default
storage capacity to store 16 characters. The last constructer creates a StringBuffer
with a String parameter, it creates a StringBuffer with a capacity 24 i.e default
capacity + 8 (the length of String parameter).
13.4.2 Methods in StringBuffer
StringBuffer supports many methods that are available in String Class, apart from
that StringBuffer supports some unique methods. The Table 13.7 list some frequently used methods.
Method

Purpose

capacity()

Returns the current capacity of the String


buffer.

length()

Returns the length (character count) of this


string buffer.

toString()

Converts to a string representing the data in


this string buffer

insert(int offset, char c)

Inserts the string representation of the char


argument into the StringBuffer

delete(int start, int end)

Removes the characters in a substring of this


StringBuffer
243

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

replace(int start, int end, String str)

Replaces the characters in a substring of this


StringBuffer with characters in the specified String.

reverse()

The character sequence contained in this string


buffer is replaced by the reverse of the
sequence.

append(String str)

Appends the string to this string buffer.


13.7 Methods in StringBuffer

Example 8:
The following illustrates the various StringBuffer methods.
public class StringBufferMethods
{
public static void main(String[] args)
{
//Examples of Creation of Strings
StringBuffer strBuf1 = new StringBuffer(APPLE);
StringBuffer strBuf2 = new StringBuffer(100); //With capacity 100
StringBuffer strBuf3 = new StringBuffer();
//Default Capacity 16
//Print the Capacity of StringBuffers
System.out.println(strBuf1 capacity : +strBuf1.capacity());
System.out.println(strBuf2 capacity : +strBuf2.capacity());
System.out.println(strBuf3 capacity : +strBuf3.capacity());
//toString Method
System.out.println(strBuf1 toString() is : +strBuf1.toString());
//append Method
strBuf2.append(HandBook);
System.out.println( strBuf2 is appended with :+
strBuf2.toString());
//insert Method
strBuf2.insert(1, A);
System.out.println(strBuf2 when A is inserted at 1 :
+strBuf2.toString());
strBuf2.insert(2, n);
System.out.println(strBuf2 when n is inserted at 2 :
Anna University Chennai

244

DCS 115

OBJECT ORIENTED PROGRAMMING

+strBuf2.toString());

NOTES

//delete Method
strBuf2.delete(2, n);
System.out.println(strBuf2 when n is deleted at 2 :
+strBuf2.toString());
//reverse Method
strBuf2.reverse();
System.out.println(Reversed strBuf2 : +strBuf2);

}
}
Output of the Program
strBuf1 capacity : 21
strBuf2 capacity : 100
strBuf3 capacity : 16
strBuf1 toString() is : APPLE
strBuf2 is appended with :HandBook
strBuf2 when A is inserted at 1 : HAandBook
strBuf2 when n is inserted at 2 : HAnandBook
strBuf2 when n is deleted at 2 : HA
Reversed strBuf2 : AH

Have you understood?


1.
2.
3.
4.

How does StringBuffer class differs from String class


Create a StringBuffer with a capacity 100.
What is the default StringBuffer capacity ?
How will you find the capacity() of a StringBuffer ?

Summary
Handling character strings in Java is supported through two final
classes: String and StringBuffer.
The String class implements immutable character strings, which are read-only
once the string has been created and initialized, whereas the StringBuffer
class implements dynamic character strings.
Strings in Java are 16-bit Unicode
Strings in java can be compared using the = operator and equals() method.

245

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Strings can be concatenated using + operator and concat() method.


The charAt()method returns the character at the specified index.
The toLowerCase() method converts all of the characters in this String to
lower case
The toupperCase() method converts all of the characters in this String to
upper case
The getBytes() method convert this String into bytes according to the specified character encoding, storing the result into a new byte array.
The trim() method removes white space from the front and the end of a
String
The length() method returns the length of the String.
StringBuffer class is a mutable class .
The default capacity for a StringBuffer is 16
The capcity() method returns the current capacity of the String buffer.
The character sequence contained in this StringBuffer is replaced by the
reverse of the sequence by using reverse() method
Exercises
Short Questions
1. String class represents __________
2. Write the different ways of creating strings
3. ________ method is used to concatenate two strings
4. Write the signature of getChars() method
5. Write the two different forms of startsWith() method
6. How will you search a substring in a string?
7. The trim() method is used for ____________
8. Write the different ways of creating StringBuffer
9. Write the syntax of delete method
10. How will you reverse a string?
Long Questions
1. Explain the different ways of creating Strings and discuss some methods available in it
2. What is StringBuffer? Mention its advantages. Discuss some methods
available in it
Programming Exercises
1. Write a program to create two strings and perform the following operations
(a) find the length of the string
(b) concatenate the two strings
(c) compare the two strings

Anna University Chennai

246

DCS 115

OBJECT ORIENTED PROGRAMMING

(d) display the location of the vowels in both strings


(e) convert both the strings to uppercase
(f) print the byte representations of the strings

NOTES

2. Write a program to create a StringBuffer and perform the following


operations
(g) print the capacity of the string
(h) reverse the string
(i) append hello at the end of the string
(j) delete characters from 2 to 4 in the string.
Answers to Have you Understood Questions
Section 13.3
1.
2.
3.
4.
5.

String and StringBuffer


16 bit Unicode characters
+
indexOf() and lastindexOf()
by using endsWith() method and passing ler as parameter to that
method
6. It returns the string representation of the argument passed.
7. By using length() method.
Section 13.4
1. StringBuffer class is a mutable class unlike the String class which is
immutable
2. StringBuffer strBuf2 = new StringBuffer(100)
3. 16
4. The capacity() method returns the current capacity of the String buffer.
References
1.

Java 2 Certification Guide


Author: Jamie Jaworski
Publisher: New Riders 2000

2.

http:\\www.sun.com

3.

Thinking in Java
Author: Bruce Eckel
Publisher : Prentice Hall 2000

247

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

4.

Programming with Java


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

5.

Java 2: The Complete Reference


Author : Patrick Naughton & Herbert Schildt
Publisher : Tata Mcgraw Hill 2000

6.

Java in a Nutshell
Author:David Flanagan
Publisher :OReilly 1999

Anna University Chennai

248

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 14
I N T E R F A C E S

14.1

Interfaces and Classes


Interface Inheritance
Defining an Interface
Accessing Interface Variables
Implementing Interfaces
Introduction

Some languages support multiple inheritance in which a child class may derive
some of its features from more than one parent class. This feature is not directly
supported by java. However, java does provide a mechanism called an interface
whereby the properties of one class can be used by another without formal inheritance. This chapter introduces you to interfaces and its relative components. You
will learn about the differences between classes and interfaces. This chapter then
introduces you how to define and implement an interface. Finally interface inheritance is discussed in this chapter.
14.2
1
2
3
4
5
14.3

Learning Objectives
To introduce interface concept in Java
To present the difference between an interface and a class
To show how to define an interface
To discuss how to implement an interface
To introduce interface inheritance concept.
Interfaces and Classes

Interfaces are used to define a standard behavior that can be implemented by any
class in a class hierarchy. An interface declares a set of methods with their signatures. These methods will not have implementation part hence all the methods
declared in an interface are abstract methods. All the methods in the interface are
public by default. An interface can also have set of instance variables however all
these variables are constant by default.
249

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Interfaces are almost similar to classes but however there exist few differences
between them. These differences are listed in a Table 14.1.
S/N INTERFACES

CLASSES

1.

An interface will have only declaration


of methods with their signatures

A class will have methods with


their declaration and implementation

2.

All the methods in an interface are


public methods

A class can have methods in all


visibility modes

3.

All the variables declared in the


interfaces are final variables i.e
constant variable by default.

A class can have both final and non


final variables.

4.

Interfaces must be implemented by


some class and that class should
override all the methods present in
the interface

A class if necessary can be extended


(inherited) by other classes.

5.

Objects cannot be created for a


interface however it is possible to
create reference for a interface

Objects can be created for classes

Table 14.1 Comparison of Interfaces and Classes


14.3.1

Defining an Interface

As mentioned earlier interfaces are similar to classes the general form of


declaring an interface:
interface interfacename
{
// final variables declaration
//methods declaration
}
Here is an example of an interface declaration called clock.
interface clock
{
public int cur_time;
void getCurrentTime();
void setCurrentTime();
void showClock();
}

Anna University Chennai

250

DCS 115

14.3.2

OBJECT ORIENTED PROGRAMMING

Implementing Interfaces

NOTES

After creating an interface we can create classes that implement the interface. A
class that is implementing a interface should have the following properties.
1
2

A class that implements the interface must override all the methods
present in the interface
If a class overrides only a partial set of methods in the interface then in
that case the class must be declared as abstract

The general syntax for a class that implements an interface is given below.
[accessmode] class classname [extends superclass] implements
interface1,interface2.
{
//body of the class.
}
An example is given below
class tick implements clock
{
public void getCurrentTime()
{
//body of the method.
}
public void setCurrentTime()
{
//body of the method.
}
public void showClock()
{
//body of the method.
}
}
Example 1:
A simple example is given below that give complete details about how to create
and make use of an interface.
interface arithmetics
{
public int result;
251

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

void add(int x,int y);


void sub(int x,int y);
void mul(int x,int y);
void div(int x,int y);

NOTES
}

class calculator implements aritmetics


{
calculator()
{
x=1;
y=1;
}
calculator(int m,int n)
{
x=m;
y=n;
}
public void add(int x,int y)
{
result=x+y;
System.out.println(SUM IS +result);
}
public void sub(int x,int y)
{
result=x-y;
System.out.println(DIFFERENCE IS +result);
}
public void mul(int x,int y)
{
result=x*y;
System.out.println(PRODUCT IS +result);
}
public void div(int x,int y)
{
if(x<y)
System.out.println(RESULT WILL BE A REAL VALUE):
else
{
result=x/y;
System.out.println(QUOTIENT IS +result);
}
}
public static void main(String args[])
Anna University Chennai

252

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

calculator cal =new calculator(25,5);


cal.add();
cal.sub();
cal.mul();
cal.div();
}
}
Since java does not support multiple inheritance directly often we want to
extend one parent class and implement many interfaces. For example
class myclass extends Frame implements ActionListener,ItemListener
{
// body of the class.
}
Here we can note that the class myclass inherits the properties of the parent
class Frame and implements to interfaces namely ActionListener and
ItemListener.
Example 2:
In this example the class client extends the class dimension2 and implements
the interface dimension1.
interface dimension1
{
final int xvalue;
public void getx(int);
}
class dimension2
{
int yvalue;
void gety(int b)
{
yvalue=b;
}
}
class client extends dimension2 implements dimension1
{
public void getx(int a)
{
253

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

xvalue=a;
}
void disp()
{
System.out.println(XVALUE IS +xvalue);
System.out.println(YVALUE IS +yvalue);

NOTES

}
public static void main(String args[])
{
client obj=new client();
obj.getx(10);
obj.gety(10);
obj.disp();
}
}
Have you understood?
1.
2.
3.
4.

Define an interface. Mention its contents.


All the methods in an interface are________ by default.
Objects can be created for an interface (True/False)
If a class overrides only a partial set of methods in the interface then in
that case the class must be declared as _________

14.4 Interface Inheritance


You have learnt that in java a class can inherit the properties of other classes,
similar to this an interface can inherit the properties of another interface. The
syntax is the same as for inheriting classes. You have to use the keyword extends to implement the inheritance.
Example 3:
This example implements interface inheritance concept.
interface inf1
{
int i=100;
public void disp_i();
}
interface inf2 extends inf1
{
double j=55.8;
Anna University Chennai

254

DCS 115

OBJECT ORIENTED PROGRAMMING

public void disp_j();


}
class client implements inf2
{
public void disp_i()
{
System.out.println(INTEGER FROM INTERFACE INF1 IS +i);
}
public void disp_j()
{
System.out.println(DOUBLE FROM INTERFACE INF2 IS +j);
}
public static void main(String args[])
{
client cli=new client();
cli.disp_i();
cli.disp_j();
}
}

NOTES

An interface can also inherit properties of more than one interface. In this case
also we have to use the keyword extends. Here is the example
Example 4:
In this program the interface inf3 inherits the properties of inf1 and inf2
interface inf1
{
public void meth1();
}
interface inf2
{
public void meth2();
}
interface inf3 extends inf1,inf2
{
public void meth3();
}
class client implements inf3
{
255

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

client()
{

NOTES

System.out.println(Constructer for client);


}
public void meth1()
{
System.out.println(THIS IS FROM INF1);
}
public void meth2()
{
System.out.println(THIS IS FROM INF2);
}
public void meth3()
{
System.out.println(THIS IS FROM INF3);
}
public static void main(String args[])
{
client cli=new client();
cli.meth1();
cli.meth2();
cli.meth3();
}
}
Have you understood?
1. Explain how interface inheritance is achieved
14.5 Accessing Interface Variables
You have already learnt that an interface can contain variables. All the variables
that are declared in the interface are final variables. Declaring some variables in
an interface is similar to declaring #defined constants in C/C++ languages or
const variables. When you create some variables in an interface without any methods, then the class implementing that interface will not have any method to override .Hence the class will import only the constants from the interface. The final
variables in such interface can act as shared constants.
Example 5:
The example given below show the procedure to access interface variables.
interface constants
Anna University Chennai

256

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

int BAD=0;
int GOOD=1;
}
class test implements constants
{
int mark;
ex1(int a)
{
mark=a;
}
int check()
{
if(mark>=50)
return GOOD;
else
return BAD;
}
public static void main(String args[])
{
test e=new test(77);
int x=e.check();
if(x==GOOD)
System.out.println(Well Done !!!!);
else
System.out.println(Better Luck Next Time !!!!);
}
}
Have you understood?
1. An interface is having only final variables then these variables can act
as____________
Summary
1
Interfaces are used to define a standard behavior that can be
implemented by any class in a class hierarchy. Interfaces are used to
achieve multiple inheritance
2
All the methods in an interface are public methods and all the
variables are final.
257

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

A class that implements the interface must override all the methods
present in the interface
A class can implement more than one interface
An interface can inherit the properties of another interface
An interface can also inherit properties of more than one interface. In
this case also we have to use the keyword extends.
The final variables in interface can act as shared constants.
Exercises
Short Questions
1.
2.
3.
4.

How Java achieves multiple inheritance?


How an interface differs from classes?
How an interface differs from abstract class?
A class will __________ an interface , and overrides all _________
methods
5. Interfaces can inherit another interface (True/False)
6. Mention some uses of declaring variables in a interface
Long Questions
1. Write short notes on interfaces
2. Explain how interfaces are used to achieve multiple inheritance.
Programming Exercises
1. Create an interface to create shared constants. Create a class to access
these variables
2. Create an interface called shape with a method area(). Create classes
Rect,Square and circle and override the area() method.
Answers to Have you Understood Questions
Section 14.3
1. Interfaces are used to define a standard behavior that can be
implemented by any class in a class hierarchy. An interface
contains variables declaration and a set of methods with their
signatures.
2. public
3. False
4. abstract
Anna University Chennai

258

DCS 115

OBJECT ORIENTED PROGRAMMING

Section 14.4

NOTES

1. An interface can also inherit properties of more than one interface. In


this case also we have to use the keyword extends.
Section 14.5
1. Shared constants ;
References
1.

Java 2 Certification Guide


Author: Jamie Jaworski
Publisher: New Riders 2000

2.

http:\\www.sun.com

3.

Thinking in Java
Author: Bruce Eckel
Publisher : Prentice Hall 2000

4.

Programming with Java


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

5.

Java 2: The Complete Reference


Author : Patrick Naughton & Herbert Schildt
Publisher : Tata Mcgraw Hill 2000

6.

Java in a Nutshell
Author:David Flanagan
Publisher :OReilly 1999

259

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 15
PACKAGES

Java API Packages


User Defined Packages
Using Java API Packages
Visibility and Access Rights in Java
Hiding classes

15.1 Introduction
Code reuse is an import concept in object-oriented programming. One tool that
can help us increase the reusability of our code is the package statement. Programmers bundle groups of related types into packages. A Java package is a mechanism for organizing java classes and interfaces. Packages are also called as containers of classes.Java packages can be stored in compressed files called JAR
files, allowing classes to download faster as a group rather than one at a time.
Programmers also typically use packages to organize classes belonging to the
same category or providing similar functionality.
A package in java can contain the following members

Classes
Interfaces
Enumerations
Annotations

Java language supports two types of packages. They are

Built in Packages (or) Java API packages


User Defined Packages

This chapter introduces you to both the categories of packages. You will also
learn how to create your own package and use it in your programs. This chapter
also presents the various access specifiers used in the package.

Anna University Chennai

260

DCS 115

15.2

15.3

OBJECT ORIENTED PROGRAMMING

Learning Objectives

NOTES

To introduce the package concept in Java


To discuss Java API packages
To discuss how to create user defined and use them in your programs
To discuss access and visibilty rights in Java
Java API Packages

Java langauage has a rich set of built in API packages from which you can access
interfaces and classes, and then fields, constructors, and methods.The Figure 15.1
gives the list of Java API packages.

lang
io
util

image

JAVA
awt

applet

peer

net

Figure 15.1 Java API packages


The details regarding these packages are given below.
java.lang
Package that contains essential Java classes, including numerics, strings,
objects, compiler, runtime, security, and threads. This is the only package
that is automatically imported into every Java program.

261

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

java.io
Package that provides classes to manage input and output streams to read
data from and write data to files, strings, and other sources.
java.util
Package that contains miscellaneous utility classes, including generic data
structures, bit sets, time, date, string manipulation, random number generation, system properties, notification, and enumeration of data structures.
java.net
Package that provides classes for network support, including URLs, TCP
sockets, UDP sockets, IP addresses, and a binary-to-text converter.
java.awt
Package that provides an integrated set of classes to manage user interface components such as windows, dialog boxes, buttons, checkboxes,
lists, menus, scrollbars, and text fields. (AWT = Abstract Window Toolkit)
java.awt.image
Package that provides classes for managing image data, including color
models, cropping, color filtering, setting pixel values, and grabbing snapshots.
java.awt.peer
Package that connects AWT components to their platform-specific implementations (such as Motif widgets or Microsoft Windows controls).
java.applet
Package that enables the creation of applets through the Applet class. It
also provides several interfaces that connect an applet to its document
and to resources for playing audio.
15.3.1 Using Java API Packages
In Java packages are organized in a hierarchical structure. The Java Package name
consists of words separated by periods. The first part of the name contains the

Anna University Chennai

262

DCS 115

OBJECT ORIENTED PROGRAMMING

name java. The remaining words of the Java Package name reflect the contents of
the package. The Java Package name also reflects its directory structure. For
example the statement

NOTES

java.awt

represents the awt (Abstract Window Toolkit) package. As mentioned earlier the
first part of the package name starts with the word Java. The second part of the
package name awt stands for the contents of the package, in this case the Abstract Window Toolkit.
To import a class from the package into our program you have to use the import
statement. The syntax is
import packagename.classname
or
import packagename.*;
1. The first form of the syntax imports the specific class from the package
.For example the statement import java.util.Date imports the Date class
available in the java.util package into our program.
2. The second form of the syntax import all the classes available in the specified package. For example java.io.* will import all the classes available
in the io package.
It is always good to import only the classes you need. Bringing in an entire package does not alter the size of the class file, but does lengthen the compile time.
Have you understood?
1. What do you mean by a Package?
2. Mention the two types of packages available in Java.
3. Which statement you will use to import a package to your program?
15.4

User Defined Packages

You know that java supports a rich set of built in packages. Apart from these
packages Java allows us to create our own user defined packages. We can create
our own package and use it in our programs. Creation of package in java is easy.
The various steps involved in creation of package are listed below.
1. The package has to be declared at the beginning of the program. The syntax is
package packagename;
263

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

For example

NOTES
2.

3.
4.
5.

package mypack;
The second step is to define classes and interfaces and put it inside the
package. A package can contain any number of classes; however one of
the classes should have the public access specifier. For example
package mypack
public class sample
{
//body of the class
}
Add methods and variables to class as required
Create a subdirectory with name of the package and put it under the current working directory.
Save the class in the subdirectory and compile the program.

Example 1:
A simple program to illustrate the creation of user-defined package is given below.

package mypack;
public class sample
{
public sample()
{
System.out.println(This is from the constructer);
}
public void test()
{
System.out.println(This is from the package mypack);
}
}
Create a directory with the name mypack and put inside the current working directory. Save the program with the name sample.java put in the sub directory
mypack and compile the program. Once a package is created, you can import the
package and use it in your program. Consider the code listing given below.
import mypack.sample
class Client
{
public static void main(String args[])
{
Anna University Chennai

264

DCS 115

OBJECT ORIENTED PROGRAMMING

sample s=new sample();


s.test();

NOTES

}
}
The program Client imports the classes from package mypack. The program
Client.java should be saved in the directory for which mypack is a subdirectory.
After that compile and execute the program
Output of the Program
This is from the constructer
This is from the package mypack

Example 2:
In Java it is possible to access a class in one package from another package.

package pack1;
class base
{
public String str=JAVA;
protected int i=20;
public void print_string()
{
System.out.println(The String is +str);
}
public void print_int()
{
System.out.println(The Integer is +i);
}
}
The class base is available in the package pack1. Now lets create another package pack2 which contains a class that access the class base
package pack1;
import pack1.*;
class X
{
265

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

public static void main(String args[])


{
base b=new base();
b.print_string();
b.print_int();
}

NOTES

}
Thus in Java it is possible to access a class in one package from another package.

Output of the Program


The String is JAVA
The Integer is 20

15.4.1 Visibility and Access Rights in Java


The table 15.1 lists the visibility and access rights in java.
ACCESS RIGHTS FOR THE DIFFERENT SCOPES
CLASS\ACCESS
RIGHTS

PRIVATE DEFAULT PROTECTED PUBLIC


SCOPE
SCOPE
SCOPE
SCOPE

own class (Base)


subclass - same package
(SubA)
class - same package
(AnotherA)
subclass - another package
(SubB)
class - another package
(AnotherB)

yes

yes

yes

yes

no

yes

yes

yes

no

yes

yes

yes

no

no

Yes/No *

yes

no

no

no

yes

Table 15.1 Access Rights in Java

Note:
Class subB has access only to the inherited from Base protected
elements, i.e. its own elements, but the protected data of other Base instances
is not accessible from SubB.

Anna University Chennai

266

DCS 115

OBJECT ORIENTED PROGRAMMING

Example 3:

NOTES

This example program illustrates the access rights for different scopes available
in java.
Consider a class base available in the package pack1.
package pack1;
public class Base
{
public String publicStr = public ;
protected String protectedStr = protected
String defaultStr = default;
private String privateStr = private

public void print()


{
System.out.println( From Package Pack1 and Class Base);
System.out.println( publicStr);
System.out.println( protectedStr);
System.out.println(defaultStr);
System.out.println(privateStr);
}
}
Case1 (Sub Class in the Same Package)
Now let us create a subclass for the class base in the same package.
package pack1;
public class Derived extends Base
{
public void print()
{
System.out.println(Same Package Sub class);
System.out.println( publicStr );
System.out.println( protectedStr);
System.out.println(defaultStr);
System.out.println(privateStr); //will not compile
}
}
From this example we can note that a private variable cannot be accessed by a
sub class even if the subclass resides in the same package.

267

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Case 2(Same Package and Other Classes)


package pack1;
public class Someclass
{
public void print()
{
System.out.println(Same Package Some class);
Base b=new Base ();
System.out.println(b. publicStr );
System.out.println(b.protectedStr);
System.out.println(b.defaultStr);
System.out.println(b.privateStr); //will not compile
}
}
A variable that is declared private cannot be accessed from any other class.
Case 3(Other Package Sub Class)
package pack2;
import pack1.Base;
public class Derived1 extends Base
{
public void print()
{
System.out.println (Other Package Sub Class);
System.out.println (publicStr);
System.out.println (protectedStr);
System.out.println(b.defaultStr); //will not compile
System.out.println(b.privateStr); //will not compile
}
}
In a subclass of another package only public and protected variables are accessible.
Case 4(Other Package Other Class)
package pack2;
import pack1.Base;
public class Someclass
{
public void print()

Anna University Chennai

268

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

System.out.println (Other Package Other Class);


Base b=new Base();
System.out.println (b.publicStr);
System.out.println (protectedStr); //will not compile
System.out.println(b.defaultStr); //will not compile
System.out.println(b.privateStr); //will not compile
}
}
Only public variables are accessible by a non subclass residing in some other
package.
Have you understood?
1. A variable has a default scope, is it possible to access that variable from
another class from the same package (Yes/No)
2. What access specifier should be specified if you wish to access a variable from a sub class present in another package?
3. A variable with _________ scope can be accessed from a non subclass
present in another package.
15.5

Hiding Classes

When a package is imported to your program all the public classes will be imported to your program. Sometimes it may be desired to hide some classes in the
package because accessing them may lead to some problems. To hide such classes
these classes must be declared with a access specifier other than public. These
non public classes will be hidden when the package is imported to another program. Consider the example
package pack1;
public class Publicclass
{
//body of the class
}
class Defaultclass
{
//body of the class
}
In this example the class Publicclass with the public scope is visible to programs
importing the package pack1. The class Defaultclass with no access specifier is
hidden to programs importing the package pack1. Thus,
269

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

import pack1.*;
class test
{
public static void main(String args[])
{
Publicclass p1;
//OK
Defaultclass d1;
//ERROR
..
..
}
}
Have you understood?
1.

How will you hide a class in a package?

Summary
A Java package is a mechanism for organizing java classes and interfaces. Packages are also called as containers of classes.
A package in java can contain classes,interface,enumerations and annotations
The Java Package name consists of words separated by periods. The
first part of the name contains the name java. The remaining words of
the Java Package name reflect the contents of the package
To import a class from the package into our program you have to use
the import statement.
A package can contain any number of classes; however one of the
classes should have the public access specifier.
A private variable cannot be accessed by a sub class even if the subclass resides in the same package
In a subclass of another package only public and protected variables
are accessible.
Only public variables are accessible by a non subclass residing in some
other package.
These non public classes in a package will be hidden when the package is imported to another program.
Exercises
Short Questions
1. List the members of a package
2. What is a JAR file?
Anna University Chennai

270

DCS 115

OBJECT ORIENTED PROGRAMMING

3. List the Java API packages


4. Write some contents of java..util package
5. Bringing the entire package to your program increases the compilation
time (True/False)
6. Give a note on protected specifier
7. Which has a wider scope protected (or) default? Why?

NOTES

Long Questions
1. Explain the various steps involved in creating a user defined package
2. Give a brief note on access specifiers applied to packages.
Programming Exercises
1. Create a package with a class called Bank. Add constructors and methods
to compute simple and compound interest. Import the package into another program and make use of the methods. Apply appropriate access
specifiers to the variables and methods.
Answers to Have you Understood Questions
Section 15.3
1. A Java package is a mechanism for organizing java classes and interfaces.
Packages are also called as containers of classes.
2. Buit in Packages (or) Java API packages and User defined packages
3. import statement
Section 15.4
1.Yes
2.public or protected
3.public.
Section 15.5
1. By making that class non public.
References
1.

Java 2 Certification Guide


Author: Jamie Jaworski
Publisher: New Riders 2000

271

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

2.

http:\\www.sun.com

3.

Thinking in Java
A uthor: Bruce Eckel
Publisher : Prentice Hall 2000

4.

Programming with Java


A uthor: E Balagurusamy
Publisher: Tata M cgraw Hill 2000

5.

Java 2: The Complete Reference


A uthor: Patrick Naughton & Herbert Schildt
Publisher: Tata M cgraw Hill 2000

6.

Java in a Nutshell
A uthor: David Flanagan
Publisher: O Reilly 1999

Anna University Chennai

272

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 16
MULTITHREADED PROGRAMMING

16.1

Threads in Java
Sleep Method
Creating Threads
Yield Method
Extending Thread class
Stop Method
Implementing Runnable Interface
Thread Priority
Life Cycle of Thread
Synchronization
Thread Methods
Introduction

The earliest computers did only one job at a time. All programs were run sequentially, one at a time; and each had full run of the computer. However two programs couldnt be run at once. This kind of processing is called batch processing.
It is one of the earliest computing technologies
Time sharing systems were invented after batch processing to allow multiple people
to use the computer at the same time. On a time sharing system many people can
run programs at the same time. The operating system is responsible for splitting
the time among the different programs that are running.
Once systems allowed different users to run programs at the same time the next
step is to allow the same user run multiple programs simultaneously. Each running program (generally called a process) had its own memory space, its own set
of variables, its own stack and heap, and so on. The ability to execute more than
one task at the same time is called Multitasking.
The terms multitasking and multiprocessing are often used interchangeably, although multiprocessing sometimes implies that more than one CPU is involved.
In multitasking, only one CPU is involved, but it switches from one program to
273

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

another so quickly that it gives the appearance of executing all of the programs at
the same time.
The systems terminology of multitasking is multithreading. In multithreading a
process is divided into two or more sub processes, these sub processes are allowed to execute simultaneously. For example a program, can print a file at the
same time it can downloads a page and formats the page as it downloads. Threads
are also called as lightweight processes. This chapter introduces to multithreaded
programming. You will learn how to create multiple threads in your program and
execute them simultaneously. This chapter also discuss about life cycle of a thread.
This chapter also introduces you to thread priority and synchronization.
16.2
1
2
3
4
5
6
7
8
16.3

Learning Objectives
To introduce thread concept
To present the two ways of creating threads
To show how to create threads by extending Thread class
To show how to create threads by implementing runnable interface
To discuss life cycle of thread
To discuss some thread methods
To present thread priority
To introduce synchronization concept
Threads in Java

Thread is a sequential flow of control. In Java every program consists of at least


one thread - the one that runs the main method of the class provided as a startup
argument to the Java virtual machine (JVM). Thread in java has a beginning
part, the body part and the termination part. All the programs discussed in the
previous chapters are single threaded programs however Java supports
multithreading and hence in Java it is possible to create multiple flow of control
and allow them to execute simultaneously. A program that has multiple flow of
control is called Multithreading.
Multithreading is one of the most powerful feature available in java. As mentioned earlier every java program has a single default thread (the one that runs the
main method) that controls the execution of the code. This main() method thread
is the first thread that will start its execution. We can use this main method thread
to create many child threads to implement multithreaded programming. All the
child threads created by the main thread will complete its execution part before
the main thread. Thus in a java program main() method thread is the first thread
to start and it is the last one to finish its execution.
In a multithreaded program all the threads executes concurrently and share resources. Since one processor is responsible for executing all the threads, the java
Anna University Chennai

274

DCS 115

OBJECT ORIENTED PROGRAMMING

interpreter performs switching of control between the running threads. This concept is known as context switching in a thread.

NOTES

MAIN THREAD
Start

Start

Start

CHILD
THREAD1

Start

CHILD
THREAD2

CHILD
THREAD3

CHILD
THREAD n

..

Fig 16.1 Multithreaded Program

Have you understood?


1. Define Thread.
2. All the child threads are created by __________ thread
3. What do you mean by Context Switch?
16.4

Creating Threads

To create threads, Java has a class called Thread and this class is available in the
java.lang package. Java supports two different ways of creating threads. They are
1
2

Extending the Thread class


Implementing the Runnable interface

In both the cases we have to override the method called run(). The run() method
will contain the code required by the thread. The syntax of run() method is given
below.
public void run()
{
// body of method
}

275

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

16.4.1 Extending Thread class


The simple way to create a threaded program is to extend the thread class. Any
class that extends Thread class can access all the methods available in the thread.
The steps to create a threaded program are given below.
Step1:
Create a class that extends thread. For example
class myclass extends Thread
{
// Body of the class
}
Step 2:
Override the run() method and write the code required by the thread
class myclass extends Thread
{

public void run()


{
//body of the run method.
}

}
Step 3:
Create the object for the threaded class and start the thread using start() method.
For example
myclass mc=new myclass()
mc.start()
Example 1:
The following is a simple example for multithreaded program
class Two_table extends Thread

Anna University Chennai

276

DCS 115

OBJECT ORIENTED PROGRAMMING

{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println(i + * 2 = + i*2)
}
}

NOTES

}
class Three_table extends Thread
{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println(i + * 3 = + i*3)
}
}
}
class Four_table extends Thread
{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println(i + * 4 = + i*4)
}
}
}
class mainprg
{
public static void main(String args[])
{
Two_table two=new Two_table();
Two.start();
Three_table three=new Three_table();
Three.start();
Four_table four=new Four_table();
four.start();
}
}
The output of the program is given here.
277

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

From the output we can note that all the three threads were executed simultaneously.
16.4.2 Implementing Runnable Interface
The next method of creating a thread is to create a class and making that class to
implement runnable interface. Since java does not support multiple inheritance
directly we often use runnable interface for creating threads. The various steps
for creating a multithreaded program in this method are listed below.
Step1:
Create a class that implements runnable interface. For example
class myclass implements Runnable
{
// Body of the class
}

Anna University Chennai

278

DCS 115

OBJECT ORIENTED PROGRAMMING

Step 2:

NOTES

Override the run() method and write the code required by the thread
class myclass implements Runnable
{

public void run()


{
//body of the run method.
}

}
Step 3:
Create the object for the Thread and pass the object of the class myclass as a
parameter. For example
myclass mc=new myclass()
Thread t=new Thread(mc);
Example 2:
The program given in the example1 is modified by implementing the runnable
interface.

class Two_table implements Runnable


{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println(i + * 2 = + i*2)
}
}
}
class Three_table implements Runnable
{
public void run()
{
279

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

for(int i=1;i<=10;i++)
{
System.out.println(i + * 3 = + i*3)
}

NOTES
}
}

class Four_table implements Runnable


{
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println(i + * 4 = + i*4)
}
}
}
class mainprg
{
public static void main(String args[])
{
Two_table two=new Two_table();
Three_table three=new Three_table();
Four_table four=new Four_table();
Thread t1=new Thread(two);
t1.start();
Thread t2=new Thread(three);
t2.start()
Thread t3=new Thread(four);
T3.start();
}
}

Anna University Chennai

280

DCS 115

OBJECT ORIENTED PROGRAMMING

Output of the Program

NOTES

Have you understood?


1. What are the two ways of creating Threads?
2. Write the signature of run() method.
3. How will you make a thread to run?

16.5

Life Cycle of Thread

When a new thread is created it passes through various states before it gets terminated and this process is called the Life Cycle of the Thread. The following figure
shows the states a thread can pass in during its life and illustrates which method
calls cause a transition to another state.

281

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES
Runnable

Suspend

New Thread

Not Running
Start

Running

Notify

The Run Method Terminates/Killed


Dead
Fig 16.2 Life Cycle of a Thread

Once the Thread class is instantiated a new thread is created and its life
cycle begins
A newly created thread enters the active running state when the start()
method of the thread is invoked
A running thread may be blocked, when blocked it enters the inactive not
running state and waits until it is notified to run. A thread may be blocked
because
o It has been put to sleep for a set amount of time
o It is suspended with a call to suspend() and will be blocked until a
resume() message
o The thread is suspended by call to wait(), and will become runnable
on notify or notifyAll message.
Once the thread completes its run() method or when killed by some other
process it enters the dead state, that is the end of threads life cycle.
Have you understood?
1. What do you mean by life cycle of a thread ?
2. List out the various thread states ?
3. How will you make a suspended thread to run ?
16.6

Thread Methods

Apart from the start() and run() method, a thread class supports the following
methods that causes the state transition of a thread.

Anna University Chennai

282

DCS 115

OBJECT ORIENTED PROGRAMMING

sleep() method
yield method()
stop() method
16.6.1

NOTES

Sleep Method

The sleep method is static and pauses execution for a set number of milliseconds,
here is an example of putting a Thread to sleep. The sleep method throws
InterruptedException. Here is an example for sleep method.
Example 3:
The following program illustrates sleep method of Thread class.
public class ThreadSleep extends Thread
{
public void run()
{
try
{
for(int i=0;i<5;i++)
{
this.sleep(1000);
System.out.println(looping for + i + time);
}
}catch(InterruptedException ie){}
}
public static void main(String args[])
{
ThreadSleep t = new ThreadSleep();
t.start();
}
}
16.6.2 Yield Method
Java Thread class has a static method called yield which causes the currently
running thread to yield its hold on CPU cycles. This thread returns to the ready
to run state and the thread scheduling system has a chance to give other threads
the attention of the CPU. If no other threads are in a ready to run state the thread
that was executing may restart running again. Here is an example for yield method

283

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Example 4:
The following program illustrates yield method of Thread class.
class ThreadYeild extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
System.out.println(looping for + i + time);
if(i==4) yield();
}
}
}
16.6.3 Stop Method
Stop method in java forces the thread to stop executing.
Example 5:
The following program illustrates stop method of Thread class.
class ThreadStop extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
System.out.println(looping for + i + time);
if(i==4) stop();
}
}
public static void main(String args[])
{
ThreadStop st=new ThreadStop();
st.start();
}
}
The output of the code is given below.

Anna University Chennai

284

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Output of the Program


looping for 1 time
looping for 2 time
looping for 3 time
looping for 4 time

Have you understood?


1. Which exception is thrown when sleep method is called ?
2. What is the purpose of yield method ?
3. What is the purpose of stop method ?
16.7

Thread Priority

When a Java thread is created, it inherits its priority from the thread that created
it.Each Thread has a priority, ranging between Thread.MIN_PRIORITY and
Thread.MAX_PRIORITY (defined as 1 and 10 respectively). The higher the integer, the higher the priority. At any given time, when multiple threads are ready
to be executed, the runtime system chooses the Runnable thread with the highest priority for execution. Only when that thread stops, yields, or becomes not
runnable for some reason the lower priority thread start executing. If two threads
of the same priority are waiting for the CPU, the scheduler chooses one of them
to run in a round-robin fashion. Here are some important points regarding thread
priority.

By default, each new thread has the same priority as the thread that
created it. The initial thread associated with a main by default has
priority Thread.NORM_PRIORITY (5).

The current priority of any thread can be accessed via method


getPriority.

The priority of any thread can be dynamically changed via method


setPriority.

Example 6:
This program creates threads with different priorities.
class A extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
285

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

System.out.println(i+ From A )

NOTES

}
}
}
class B extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println(i+ From B )
}
}
}
class C extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println(i+ From C)
}
}
}
class mainprg
{
public static void main(String args[])
{
A a=new A();
A.setPriority(Thread.MIN_PRIORITY);
a.start();
B b=new B();
b.setPriority(b.getPriority()+1);
b.start();
C c=new C();
c.setPriority(Thread.MAX_PRIORITY);
four.start();
}
}

Anna University Chennai

286

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Output of the Program


1 From A
1 From B
1 From C
2 From C
2 From B
3 From C
2 From A
3 From B
4 From C
5 From C
3 From A
4 From B
4 From A
5 From B
5 From A

Have you understood?


1. What is the value for MIN_PRIORITY, MAX_ PRIORITY, and
NORM_ PRIORRITY?
2. How will you get the priority of the running thread?
16.8

Synchronization

Generally in a multithreaded environment all the threads share some critical resources such as a block of code. In many situations these resources has to be
exclusively accessed, otherwise strange bugs can arise. Java provides a way to
lock the shared resources for a thread which is currently executing it, and making
other threads that wish to use it wait until the first thread is finished. These other
threads are placed in the waiting state.
To lock such shared resources java supports synchronization of threads i.e. providing an exclusive access to a thread currently accessing the shared resource.
Java has a keyword called synchronized that has to be prefixed before the method
declaration that contains the code to access the shared resource. For example
synchronized void access_resource()
{
//block of the code to be synchronized.
.
.
}
287

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

When we declare a method as synchronized, Java creates a monitor (which is the


basis of thread synchronization). A monitor is an object that can block and revive
threads.
A monitor is simply a lock that serializes access to an object or a class. To gain
access, a thread first acquires the necessary monitor, and then proceeds. This
happens automatically every time when a thread enters a synchronized method.
During the execution of a synchronized method, the thread holds the monitor for
that methods object, or if the method is static, it holds the monitor for that methods
class. If another thread is executing the synchronized method, the current thread
is blocked until that thread releases the monitor (by either exiting the method or
by calling wait()).
Have you understood?
1. What do you mean by synchronization of threads?
2. What do you mean by a monitor ?
Summary
Thread is a sequential flow of control. In Java every program consists of
at least one thread - the one that runs the main method of the class.
Thread in java has a beginning part, the body part and the termination
part.
Java supports two different ways of creating threads. The first way is to
extend the Thread class and the next method is to implement the Runnable
interface. In both the cases we have to override the method called run().
When a new thread is created it passes through various states before it
gets terminated and this process is called the Life Cycle of the Thread.
The newly created thread will pass through the following states in its life
time. They are New thread (Born state), Running state, Not running state
,Dead state
A running thread may be blocked, when blocked it enters the inactive not
running state and waits until it is notified to run
Once the thread completes its run() method or when killed by some other
process it enters the dead state, that is the end of threads life cycle.
The sleep method is static and pauses execution for a set number of milliseconds
Java Thread class has a static method called yield which causes the currently running thread to yield its hold on CPU cycles.
Stop method forces the thread to stop its execution
Each Thread has a priority, ranging between Thread.MIN_PRIORITY and
Thread.MAX_PRIORITY (defined as 1 and 10 respectively).

Anna University Chennai

288

DCS 115

OBJECT ORIENTED PROGRAMMING

The initial thread associated with a main by default has priority


Thread.NORM_PRIORITY (value 5)
The current priority of any thread can be accessed via method getPriority.
The priority of any thread can be dynamically changed via method
setPriority
Synchronization of threads is used to provide an exclusive access to a
thread currently accessing the shared resource
A monitor is an object that can block and revive threads.A monitor is
simply a lock that serializes access to an object or a class.

NOTES

Exercises
Short Questions
1.
2.
3.
4.
5.
6.
7.
8.

What do you mean by Multitasking?


Define process
What is Multithreading concept?
In which situations extending thread will not be possible?
When the thread go to the dead state?
what is the purpose of stop() method
Write the steps to change the priority of the current thread
In which situations synchronization of threads will be necessary?

Long Questions
1. Briefly explain the different ways of creating threads with examples
2. Explain the Life cycle of Threads
3. Explain the Synchronization concept
Programming Exercises
1. Create a multithreaded program by extending Thread classes. Create two
simultaneously executing thread , one thread to display hello and another
thread to display world
2. Create a multithreaded program by implementing the runnable interface.
Create two simultaneously executing thread , one thread to generate odd
numbers and another thread to generate even numbers
3. Modify program 2 by assigning priorities to threads.

289

Anna University Chennai

DCS 115

NOTES

OBJECT ORIENTED PROGRAMMING

Answers to Have you Understood Questions


Section 16.3
1. Thread is a sequential flow of control. In Java every program consists of
at least one thread - the one that runs the main method of the class.
2. main
3. Since one processor is responsible for executing all the threads, the java
interpreter performs switching of control between the running threads.
This concept is known as context switching in a thread.
Section 16.4
1. Java supports two different ways of creating threads. They are
o Extending the Thread class
o Implementing the Runnable interface
2. public void run()
{
//body of the run method.
}
3. By calling the start method of the thread class
Section 16.5
1. When a new thread is created it passes through various states before it
gets terminated and this process is called the Life Cycle of the Thread.
2. New thread (Born state), Running state, Not running state ,Dead state
3. By calling notify() (or) notifyall() method.
Section 16.6
1. The sleep method throws InterruptedException.
2. Yield method causes the currently running thread to yield its hold on CPU
cycles.
Section 16.7
1. 0,5,10
2. The current priority of the running thread can be accessed via method
getPriority
Section 16.8
1. Synchronization of threads is used to provide an exclusive access to a
thread currently accessing the shared resource

Anna University Chennai

290

DCS 115

OBJECT ORIENTED PROGRAMMING

2. A monitor is an object that can block and revive threads. A monitor is


simply a lock that serializes access to an object or a class.

NOTES

References
1.

Java 2 Certification Guide


Author: Jamie Jaworski
Publisher: New Riders 2000

2.

http:\\www.sun.com

3.

Thinking in Java
Author: Bruce Eckel
Publisher : Prentice Hall 2000

4.

Programming with Java


Author: E Balagurusamy
Publisher: Tata Mcgraw Hill 2000

5.

Java 2: The Complete Reference


Author : Patrick Naughton & Herbert Schildt
Publisher : Tata Mcgraw Hill 2000

6.

Java in a Nutshell
Author:David Flanagan
Publisher :OReilly 1999

291

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES
NOTES

Anna University Chennai

292

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES
NOTES

293

Anna University Chennai

DCS 115

OBJECT ORIENTED PROGRAMMING

NOTES

Anna University Chennai

294

You might also like