0% found this document useful (0 votes)
40 views304 pages

DCS115

This document provides notes on Chapter 1 of the course material - Introduction to C++ Programming. It discusses basic I/O statements and manipulators in C++, various tokens, data types, control structures, and expressions. The chapter aims to introduce fundamental C++ concepts and provide background to understand topics covered in subsequent chapters. Key concepts covered include basic I/O, keywords, identifiers, constants, operators, conditional expressions, built-in and user-defined data types, and control structures.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views304 pages

DCS115

This document provides notes on Chapter 1 of the course material - Introduction to C++ Programming. It discusses basic I/O statements and manipulators in C++, various tokens, data types, control structures, and expressions. The chapter aims to introduce fundamental C++ concepts and provide background to understand topics covered in subsequent chapters. Key concepts covered include basic I/O, keywords, identifiers, constants, operators, conditional expressions, built-in and user-defined data types, and control structures.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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 Professor
Department of Computer Science Department of Computer Science
and Engineering and Engineering
Anna University Chennai Anna University Chennai
Chennai – 600 025 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 1

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  Data Types


 Basic I/O Manipulators  Built in Data Types
 C++ Tokens  User Defined Data Types
 Keywords  Derived Data Types
 Identifiers  Control Structures
 Constants  Expressions
 Operators  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 OBJECT ORIENTED PROGRAMMING

NOTES 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 2


DCS 115 OBJECT ORIENTED PROGRAMMING

Output of the Program NOTES


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 ; will output
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 ,then the output will be

H E l l o
Apart from these manipulators C++ allows us to create our own manipulators.

3 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES 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 and_eq asm auto bitand bitor


bool break case catch char class
compl const const_cast continue default delete
do double dynamic_cast else enum explicit
export extern false float for friend
goto if inline int long mutable
namespace new not not_eq operator or
or_eq private protected public register reinterpret_cast
return short signed sizeof static static_cast
struct switch template this throw true
try typedef typeid typename union unsigned
using virtual void volatile wchar t while
xor xor eq

Anna University Chennai 4


DCS 115 OBJECT ORIENTED PROGRAMMING

1.5.2 Identifiers NOTES


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 Invalid variable name since its starts with a number.


 Basic pay Invalid variable name since it has a space
 ABC,1 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 Integer constant


25.789 Floating point constant
“Hello World” String constant
‘a’ 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 ?: Right to left =, +=, -=, /=, %=, >>=, &=

Left to right throw


Left to right ,

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 6


DCS 115 OBJECT ORIENTED PROGRAMMING

Unsigned integer: NOTES


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.

 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 OBJECT ORIENTED PROGRAMMING

NOTES  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 Size in Bytes for


Windows NT Linux System

Char 1 1
Short int 2 2
Int 4 4
Float 4 4
Double 8 8
long double 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 8


DCS 115 OBJECT ORIENTED PROGRAMMING

single area of storage, without embedding any machine-dependent information in the NOTES
program.The syntax is based on structures:
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 God’s Own Country”;
and
 cin>>money;
 if(money==rupees)
{
//do this

9 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES }
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. Mention the three categories of data types available in C++


2. How a structure does differ from union?
3. What do you mean by enumeration data type?
4. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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: NOTES


statements
default:
statements
}

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
 Do…While Loop
 For Loop

While Loop

The Syntax of while loop is


while (expression)
{

13 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES statements ;
}

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

Example NOTES
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 do-
while, 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 OBJECT ORIENTED PROGRAMMING

NOTES 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

An expression such as NOTES


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 OBJECT ORIENTED PROGRAMMING

NOTES 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

NOTES 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.

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 Return by Reference
Functions with Return Values Inline Functions
Call by Value Functions with Default Arguments
Call by Reference Function Overloading

2.1 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

 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

2.3 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 OBJECT ORIENTED PROGRAMMING

NOTES
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 NOTES
function just displays the value of x. Since the function is not returning anything its
return type is made void.

2.3.2 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 OBJECT ORIENTED PROGRAMMING

NOTES parameters. The main effect is that even if the dummy parameters are modified the
corresponding parameter will not change the argument’s 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 OBJECT ORIENTED PROGRAMMING

2.3.4 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

2.4 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

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

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); //two argument missing


m=add(10,20); //one argument missing
m=add(10,20,30)

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 NOTES
right
int add(int x,int y=100,int z) //default parameters should be assigned from left to
right

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 OBJECT ORIENTED PROGRAMMING

NOTES #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 NOTES
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.

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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

NOTES 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. How does functions reduce complexity of a program


2. What do you mean by function overloading? Explain its advantages.
3. List some advantages of Inline functions
4. In call by reference you use ___________ symbol
5. 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

Answers to Have you Understood Questions NOTES


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 OBJECT ORIENTED PROGRAMMING

NOTES 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  Classes and Objects


 Copy Constructers  Defining the Member Functions
 Destructors  Creating Objects
 Passing Objects to Functions  Accessing Class Members.
 Returning Objects from Functions  Member Functions with Parameters
 Static Data Members  Inline Functions outside Classes.
 Static Member Functions  Constructors
 Const Members Functions  Constructors That Take Parameters
 Friend Functions  Constructer Overloading
 Friendly Function for Two Classes

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  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

3.3 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 doesn’t 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 doesn’t provide data hiding
 Structures contains only data while class bind both data and member functions

Anna University Chennai 38


DCS 115 OBJECT ORIENTED PROGRAMMING

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

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 OBJECT ORIENTED PROGRAMMING

NOTES
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 NOTES
accessed. The syntax for accessing the object is given below.

<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 OBJECT ORIENTED PROGRAMMING

NOTES 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 function’s 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

} NOTES
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;
}
};
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 OBJECT ORIENTED PROGRAMMING

NOTES 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. What is a class and what is an object?


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

3.5 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 class’s
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. NOTES
 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.

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 OBJECT ORIENTED PROGRAMMING

NOTES
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 function’s 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

NOTES
Although the previous example has used a constant value, you can pass an object’s
constructor any valid expression, including variables.

3.5.2 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 OBJECT ORIENTED PROGRAMMING

NOTES
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. What is a constructer?
2. Is it possible to overload constructer?

49 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES 3. What is purpose of copy constructer?


3.6 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 class’s 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. What is a destructor?
2. 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 function’s 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 OBJECT ORIENTED PROGRAMMING

NOTES 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) NOTES


{
rs=r;
ps=p;
}
money add(money m1,money m2);
void display();
}
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 OBJECT ORIENTED PROGRAMMING

NOTES
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 there’s 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 (); NOTES


03. display ();
}

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

NOTES cout<<count;
}

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. What is the default value for static integer value?


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

3.9 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. NOTES


Have you Understood Questions?

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

3.10 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

NOTES ——-
callme( );
}

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 OBJECT ORIENTED PROGRAMMING

NOTES }
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. In which situation you will declare a function as friend ?


2. How will you call a friend function ?
3. 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 class’s 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
there’s 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. List out the advantages of classes over structures


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

61 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES 7. List out any three properties of static member functions.


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

Long Questions

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

Programming Exercises

1. Create a class called calculator and implement all basic functions of


the calculator as member functions.
2. 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
3. Write a program to add two weights (Weights are represented in
Kilograms and Grams) use passing and returning objects concept.
4. Write a friend function to add objects of two complex numbers.

Answers to Have you Understood Questions

Section 3.4

1. 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
2. Just by prefixing the keyword inline before the function prototype.
3. <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 NOTES
3. Copy constructer is used to copy the value of one object to another.
Section 3.6

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. 0
2. Just by prefixing with the keyword static before variable declaration
3. True.
4. c1::fn()

Section 3.9

1. False
Section 3.10

1. 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.
2. Friend functions are called like an ordinary member function without
the help of the object.
3. 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 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 64


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 4

OPERATOR OVERLOADING AND TYPE


CONVERSIONS

 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

4.1 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  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.

4.3 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.

 Class member access operators (. , .*)


 Scope Resolution operator ( :: )
 Size operator( sizeof)
 Conditional operator ( ? :).

4.3.1 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 OBJECT ORIENTED PROGRAMMING

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


4.3.2 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

4.3.4 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 ++( ); //UNARY PREFIX INCREMENT


void operator — ( ) ; //UNARY PREFIX DECREMENT
void operator ++(int); //UNARY POSTFIX INCREMENT
void operator — ( int ) ; //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 OBJECT ORIENTED PROGRAMMING

NOTES {
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”; NOTES


free(p);
}

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

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


return temp;
}
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. When we overload a operator will its meaning change ?


2. Give the general form of operator function
3. Write examples for unary and binary operators
4. Which operator cannot overloaded using friend function ?

4.4 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 OBJECT ORIENTED PROGRAMMING

NOTES }

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 NOTES


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

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 NOTES
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.

Exercises

Short Questions

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


2. Write the various rules for overloading operators.
3. Write the advantage of overloading operators using friend functions.
4. 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 OBJECT ORIENTED PROGRAMMING

NOTES  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

The access mode may be public, protected or private. NOTES


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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

NOTES 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; NOTES


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

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 PRIVATE PROTECTED PUBLIC


RIGHTS SCOPE SCOPE SCOPE

same class yes yes yes


subclass no yes yes
Other classes no no 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 OBJECT ORIENTED PROGRAMMING

NOTES 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; NOTES
}
void showy( )
{
cout << y << “\n”;
}
};

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 OBJECT ORIENTED PROGRAMMING

NOTES 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, don’t even support
multiple inheritance) and should be avoided. However, sometimes it makes
programming easier. The multiple inheritance diagram is depicted below.

A B C

Fig. 5.2 Multiple Inheritance

93 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES 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 SALARY EDUCATION


DETAILS DETAILS 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


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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 Protected Variables

Anna University Chennai 98


DCS 115 OBJECT ORIENTED PROGRAMMING

void get1() (From person class) name, age (From person class) NOTES
void get2() basic,hra

 Class manager

Public Functions Protected variables


void get1() (From person class) name, age (From person class)
void get2() (From emp class) basic,hra (From emp class)
void get3() deptcode(private variable)
void display()

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.

B C D

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 OBJECT ORIENTED PROGRAMMING

NOTES 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. Hierarchical inheritance is useful when we have _____________ of


classes

5.9 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

} NOTES
void disp_bpay()
{
cout<<” BASIC PAY IS = ”<<bpay<<endl;
}
};
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

NOTES obj.get_addpay();

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 NOTES
{
public:
A( )
{
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 OBJECT ORIENTED PROGRAMMING

NOTES 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

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

}
~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 OBJECT ORIENTED PROGRAMMING

NOTES 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. Write the order in which constructers are executed in inheritance


2. 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 NOTES
Short Questions

1. Mention the different scheme of inheritance supported by C++


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

Long Questions

1. Discuss the various types of inheritance available in C++


2. Give a brief note on hybrid inheritance with an example
3. Explain Constructers and destructors in inheritance.
4. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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. Inheritance is a feature by which new classes are derived from the
existing classes.
2. 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

2. class derived classname : access mode base classname NOTES


Section 5.5

1. private
2. FALSE
3. Protected
4. private, protected and public

Section 5.6

1. If a derived class directly inherits from more than one base class.then
this scheme of inheritance is said to be multiple inheritance.
2. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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
 Binding  Virtual Base Classes
 Virtual Functions  Pure Virtual Function
 Virtual Destructors  Abstract Classes

6.1 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

 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

6.3 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 OBJECT ORIENTED PROGRAMMING

NOTES 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

}; NOTES
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
}

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

NOTES cout<<”I AM IN BASE”;


}
};
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. NOTES
 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.

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

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 OBJECT ORIENTED PROGRAMMING

NOTES 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 NOTES
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

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 OBJECT ORIENTED PROGRAMMING

NOTES Section 6.4


1. False
2. True

Section 6.5

1. If we declare the base class as virtual to ensure that all the sub classes
share the same object of the base class
2. 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
 File Stream Operations  Input And Output Operations With
Binary Files
 File I/O  Reading And Writing Objects In A
Binary File
 Sequential Input And Output  Error Handling In File Operations
Operations
 Random Access Files

7.1 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

 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.

7.3 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 NOTES
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.

 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 NOTES
below.
c:\tc\bin>type student (press enter key)

AHAMED 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 OBJECT ORIENTED PROGRAMMING

NOTES {
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; NOTES
}
in.close();

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 OBJECT ORIENTED PROGRAMMING

NOTES  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> NOTES
#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();
}

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() Moves get pointer to specified position


 seekp() Moves put pointer to specified position
 tellg() Returns the position of get pointer
 tellp() 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 seek from the beginning


 ios::cur seek from the current position
 ios::end 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> NOTES
#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();
}

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 OBJECT ORIENTED PROGRAMMING

NOTES 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> NOTES
#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;
}

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

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

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 NOTES
ENTER PUBLISHER ID
101
ENTER BOOK NAME
JAVA
ENTER AUTHOR NAME
H.SCHILDT
ENTER COST OF THE BOOK
400
ENTER PUBLISHER ID
102

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. How will you perform read/write operations in binary files?

7.8 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 MEANING


goodbit No errors occurred
failbit A non fatal I/O error has occurred
eofbit 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; NOTES


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;

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. Which function we use to detect end of file?


2. 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 OBJECT ORIENTED PROGRAMMING

NOTES  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. Draw the hierarchy of C++ IO streams


2. Mention the advantage of using binary files
3. List out the various file opening modes
4. ifstream in(“emp.dat”); opens the file in ____________________
mode
5. __________ symbol is used to combine file opening modes
6. Mention the use of get() and put() pointers
7. Write the syntax of seekg and seep function.
8. Mention the members of the iostate object
9. To close a file we will call _______________ function.
10. 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. Write a program to create a file called “emp.dat” and write employee


details into that file
2. 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 OBJECT ORIENTED PROGRAMMING

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

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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

NOTES 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() NOTES


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

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 OBJECT ORIENTED PROGRAMMING

NOTES 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 NOTES
function with multiple parameters.

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 OBJECT ORIENTED PROGRAMMING

NOTES 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 it’s 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 NOTES
a non template function takes precedence over template functions. Consider the
example given below.

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. What do you mean by Generic programming?


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

149 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES 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

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

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 OBJECT ORIENTED PROGRAMMING

NOTES 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<<”1PUSH”;
cout<<”2POP”;
cout<<”3PEEK”;
cout<<”4->SIZE”
cout<<”5EXIT”;
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 OBJECT ORIENTED PROGRAMMING

NOTES 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 OBJECT ORIENTED PROGRAMMING

8.4.2 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

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


obj.print();

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 NOTES
operations
(Note: Rational number will be in the form a/b (b <> 0) )

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 it’s 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 er-
rors 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 re-
spond to run time errors. This chapter briefly explores the various exception han-
dling 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 OBJECT ORIENTED PROGRAMMING

NOTES • 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 “throw-
ing” 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 oc-
cur.

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

NOTES 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;
}

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 OBJECT ORIENTED PROGRAMMING

NOTES • throw (exception)


• throw exception
• throw
If an exception is thrown during execution of the guarded section or in any rou-
tine 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 state-
ment is executed (all other are bypassed). When an exception is caught, arg will
receive its value. If you don’t need access to the exception itself, specify only
type in the catch clause (arg is optional). Any type of data can be caught, includ-
ing 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

try NOTES
{
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 excep-
tion 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 excep-
tion, 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 OBJECT ORIENTED PROGRAMMING

NOTES 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

Have you understood? NOTES


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 excep-
tions.

#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> NOTES
#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;
}
}

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 OBJECT ORIENTED PROGRAMMING

NOTES 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 excep-
tions.
• C++ exception handling mechanism is built upon three important key-
words. They are try, catch and throw.
• When any statement present in the try block causes an exception (i.e er-
ror) 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 NOTES


• Throw statement must be executed either from within the try block or
from any function that the code within the block calls (directly or indi-
rectly).
• 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 ex-
ception 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 cer-
tain 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.

Exercises

Short Questions

1. How does compile time errors differs form run time errors
2. Memory overflow is an example for ___________
3. What do you mean by asynchronous exceptions
4. Write the three keywords used to handle exceptions
5. Explain guarded section
6. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 han-
dling 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 excep-
tions.
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 er-
ror) 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

3. throw exception. NOTES


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 cer-
tain 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 OBJECT ORIENTED PROGRAMMING

NOTES 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
 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

10.1 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 micro-
processors embedded in consumer items like PDA’s 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 lan-
guage 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 con-
cepts of Java.

10.2 Learning Objectives

 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.

10.3 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 lan-
guage. 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

Platform Independence NOTES


Java programs are capable of running on all platforms hence java programs pos-
sess 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 mini-
mized. 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) per-
forms 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 lan-
guage. 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

JAVA PROGRAM NOTES

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 let’s 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. class Welcome
2. {
3. public static void main(String args[])
4. {
5. // 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 program-
ming language In Java every statement is made up of smallest individual ele-
ments 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 continue For new switch


Assert default Goto package synchronized
Boolean do If private this
Break double implements protected throw
Byte else Import public throws
Case enum instanceof return transient
Catch extends Int short try
Char final Interface static void
class finally Long strictfp volatile
const float Native super 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 OBJECT ORIENTED PROGRAMMING

NOTES 10.5.2 Identifiers

Every named program component—class, 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

 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)

10.5.4 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

* Multiplication operator NOTES


/ 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

NOTES Operator Precedence

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 oper-
ands, 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 NOTES


x=a+b; //Simple expression
y=a*(b+c)/(m+n)*f //Complex expression
a+=b //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 (two’s complement). Covers values from -128 to 127.
 short
2 bytes, signed (two’s complement), -32,768 to 32,767
 int
4 bytes, signed (two’s 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 (two’s 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 OBJECT ORIENTED PROGRAMMING

NOTES  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; //declares a integer variable i
 int i,j //declares two integer variables i and j
 int i=3,j=7; //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 Integer constant


25.789 Floating point constant
“Hello World” String constant
‘a’ Character constant

Apart from these types of constants java also supports backslash character con-
stants. 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. Mention the range for a byte


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

Anna University Chennai 186


DCS 115 OBJECT ORIENTED PROGRAMMING

10.8 Java Statements NOTES


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.

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

NOTES 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”); }
}
}
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 OBJECT ORIENTED PROGRAMMING

NOTES Thus using wrapper classes you can convert the string to the corresponding sim-
pler 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 avail-
able 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[]) NOTES


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

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

NOTES a=b;
b=c;
}
}
}

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 program-
ming language.
 Java compiler converts the source code into intermediate byte code in-
structions Java Interpreter converts these bytes codes into machine ex-
ecutable statements
 Java programs are capable of running on all platforms hence java pro-
grams possess Write-Once-Run-Anywhere feature
 Java programs will run only within the Java Virtual Machine (JVM) sand-
box
 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. Expres-
sions 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. What is JVM?
2. Write the signature of main() method
3. Why main() method is declared as static?
4. The type comparison operator in java is ____________
5. When Boolean data type is used?
6. \\ is used as ___________
7. Mention the range for char data type
8. How will you make a early exit from a loop in Java?
9. What is a wrapper class?

193 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES 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 in-
structions Java Interpreter converts these bytes codes into machine ex-
ecutable statements
2. Java programs will run only within the Java Virtual Machine (JVM) sand-
box thus threats from malicious programs is minimized. Java does not
support pointers hence direct memory access is not allowed. Java sup-
ports 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 NOTES
with an alphabet (2) Identifiers are case sensitive(i.e. upper and lower
cases are different) (3)Underscore and dollor sign are two special charac-
ter allowed.
4. ~ (bitwise compliment) , & (bitwise AND)
5. TRUE.

Section 10.6

1. In Java expressions are used to implement some computation. Expres-


sions in java can be either a simple expression or a complex expression.

Section 10.7

1. Values from -128 to 127.


2. In IEEE 754 format
3. 8 bytes.
4. Characters are represented as unsigned Unicode values
5. \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 OBJECT ORIENTED PROGRAMMING

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

Anna University Chennai 196


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 11

OBJECT OREINTED CONCEPTS IN


JAVA
 Classes  Static Methods
 Objects  Inheritance
 Adding Variables to Classes  Super Keyword
 Adding Methods to Classes  Multilevel Inheritance
 Constructors  Method Overriding
 Access Specifiers  Uses of Super Keyword
 Default Access  Abstract Methods and Classes
 Method Overloading  Final Keyword
 Constructer Overloading  Finalizer Methods
 Static Data Members

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 pri-
mary concepts of object orientation like encapsulation, abstraction, inheritance
and polymorphism. This chapter introduces you to implement all the object ori-
ented 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 OBJECT ORIENTED PROGRAMMING

NOTES  To show how method overriding is done in Java


 To introduce abstract classes and methods
 To introduce final keyword
 To discuss about finalizer method
11.3 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 It can be either abstract, final or with no modifier.
2 It must have the class keyword, and class must be followed by a legal
identifier.
3 It may optionally extend one parent class. By default, it will extend
java.lang.Object.
4 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 ob-
jects can be instantiated from one class. Objects of different classes can be cre-
ated, 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 NOTES
object for the GUI class we follow the given syntax.
GUI obj=new GUI(); //declare and instantiate

OR

GUI obj; //declare


Obj=new GUI(); //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 OBJECT ORIENTED PROGRAMMING

NOTES 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 pri-
vate. 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 imple-
mented 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 OBJECT ORIENTED PROGRAMMING

NOTES }
}

Have you understood?

1. What is a class?
2. All classes in java extend __________
3. What is an object?
4. Write the syntax of method declaration.
5. 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. Con-
structors 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, pro-
tected, 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); NOTES


}
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(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 OBJECT ORIENTED PROGRAMMING

NOTES  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 declara-
tion 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 argu-
ments 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 differ-
ences 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 in-
cluding the static data member.

 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.

 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. Inherit-
ance 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 sub-
class). 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 follow-


ing 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 multi-
level 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

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

//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? NOTES


1. What is inheritance? Mention the two forms of inheritance.
2. List the types of class inheritance supported in Java.
3. What is the purpose of super keyword ?
4. Write the syntax of super keyword.

11.9 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 defini-
tion 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 overrid-
den 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 implementa-
tion 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 ab-
stract 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

NOTES 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();
}
}

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 Variables
2 Methods
3 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 declara-
tion. 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 it’s final-
ize () 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 over-
ridden 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 OBJECT ORIENTED PROGRAMMING

NOTES  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 over-
loaded.
 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 it’s
finalize () method. The purpose of finalize () method is to release
system resources before the object gets garbage collected.

Exercises

Short Questions

1. Mention the OOPs concepts supported by Java


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

Anna University Chennai 220


DCS 115 OBJECT ORIENTED PROGRAMMING

Long Questions NOTES


1. Explain how classes, methods and objects are created in Java
2. Explain the various modifiers that can be used with methods
3. Explain the various access specifiers used in Java programs.
4. Explain the different context in which super keyword is used
5. Explain the different context in which final keyword is used
6. 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 synchro-
nized 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 NOTES
subclass.

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 :O’Reilly1999

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 OBJECT ORIENTED PROGRAMMING

12.3 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 struc-
ture 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 int data[];
data=new int[50];
2 int[] data;
data=new int[50];
3 int[] data=new int[50];
4 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 String args[]
2 double points[]

12.3.2 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 be-
low.

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 dimen-
sional, 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-dimen-

227 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES 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. What is an Array ?
2. Arrays in java extend _________
3. How will you access 10th element of an array ‘a’?
4. Write the statement to declare an integer array k with 50 elements.
5. How will you initialize 2D array?

12.4 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 dynami-
cally 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 fol-
lowing 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 NOTES
class supports two important methods to access Vector elements. They are

 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

NOTES The Output of this program is listed below.

Have you understood?

1. Vectors are available in _________ package


2. Mention the advantage of Vectors over arrays.
3. How will you add a float value to a vector?
4. Write the syntax to create the vector with size 15.
5. Which class is used display the elements stored in the Vector.
6. 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 NOTES


 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

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 follow-
ing 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 auto-
matically 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 :O’Reilly 1999

Anna University Chennai 234


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 13
STRING HANDLING
 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

13.1 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 charac-
ter 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 OBJECT ORIENTED PROGRAMMING

NOTES  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 us-
ing 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 String str=”Hello”
2 String str=new String(“Hello ”);
3 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 creat-
ing 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(int index) Returns the character at the specified in-


dex.
getChars(int srcBegin, int srcEnd,
char[] dst, int dstBegin) Copies characters from this string into the
destination character array.
indexOf(int ch) Returns the index within this string of the
first occurrence of the specified character
indexOf(int ch, int fromIndex) Returns the index within this string of the
first occurrence of the specified character,
starting the search at the specified index.

lastIndexOf(int ch) Returns the index within this string of the


last occurrence of the specified character.

237 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES lastIndexOf(int chint fromIndex) Returns the index within this string of the
last occurrence of the specified character,
searching backward starting at the speci-
fied index.
replace(char oldChar,char newChar) Returns a new string resulting from replac-
ing 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(String prefix) Tests if this string starts with the specified


prefix.

startsWith(String prefix, int toffset) Tests if this string starts with the specified
prefix beginning a specified index

endsWith(String suffix) Tests if this string ends with the specified suf-
fix

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(int beginIndex) Returns a new string that is a substring of


this string.

substring(int beginIndex, 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 OBJECT ORIENTED PROGRAMMING

13.3.6 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 ar-


gument.

getBytes(String enc) 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 OBJECT ORIENTED PROGRAMMING

NOTES 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. Write the two string handling classes
2. Strings in Java is represented as ____________
3. Which operator is used for concatenation of strings.
4. List the methods used to find the index of a particular character.
5. 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


2 StringBuffer strBuf3 = new StringBuffer(); //Default Capacity 16
3 StringBuffer strBuf1 = new StringBuffer(“Computer”); // Capacity is 24

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 fre-
quently 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 OBJECT ORIENTED PROGRAMMING

NOTES replace(int start, int end, String str) Replaces the characters in a substring of this
StringBuffer with characters in the speci-
fied 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. How does StringBuffer class differs from String class


2. Create a StringBuffer with a capacity 100.
3. What is the default StringBuffer capacity ?
4. 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 OBJECT ORIENTED PROGRAMMING

NOTES  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 speci-
fied 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 meth-
ods 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 NOTES


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

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. String and StringBuffer


2. 16 bit Unicode characters
3. +
4. indexOf() and lastindexOf()
5. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 :O’Reilly 1999

Anna University Chennai 248


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES

CHAPTER 14

I N T E R F A C E S

 Interfaces and Classes


 Interface Inheritance
 Defining an Interface
 Accessing Interface Variables
 Implementing Interfaces

14.1 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 inher-
itance. 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 inher-
itance is discussed in this chapter.

14.2 Learning Objectives

1 To introduce interface concept in Java


2 To present the difference between an interface and a class
3 To show how to define an interface
4 To discuss how to implement an interface
5 To introduce interface inheritance concept.

14.3 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 signa-
tures. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 A class will have methods with
of methods with their signatures their declaration and implementation
2. All the methods in an interface are A class can have methods in all
public methods visibility modes
3. All the variables declared in the A class can have both final and non
interfaces are final variables i.e final variables.
constant variable by default.
4. Interfaces must be implemented by A class if necessary can be extended
some class and that class should (inherited) by other classes.
override all the methods present in
the interface
5. Objects cannot be created for a Objects can be created for classes
interface however it is possible to
create reference for a interface

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 OBJECT ORIENTED PROGRAMMING

14.3.2 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 A class that implements the interface must override all the methods
present in the interface
2 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

NOTES void add(int x,int y);


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

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

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

}
public static void main(String args[])
{
client obj=new client();
obj.getx(10);
obj.gety(10);
obj.disp();
}
}

Have you understood?

1. Define an interface. Mention its contents.


2. All the methods in an interface are________ by default.
3. Objects can be created for an interface (True/False)
4. 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 “ex-
tends” 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(); NOTES


}
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();
}
}

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

NOTES client()
{
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 meth-
ods, then the class implementing that interface will not have any method to over-
ride .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 OBJECT ORIENTED PROGRAMMING

NOTES  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. How Java achieves multiple inheritance?


2. How an interface differs from classes?
3. How an interface differs from abstract class?
4. 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 :O’Reilly 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. Pro-
grammers bundle groups of related types into packages. A Java package is a mecha-
nism for organizing java classes and interfaces. Packages are also called as con-
tainers 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 con-
tain 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 OBJECT ORIENTED PROGRAMMING

15.2 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

15.3 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

image
util

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 OBJECT ORIENTED PROGRAMMING

NOTES 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 gen-
eration, system properties, notification, and enumeration of data struc-
tures.

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 inter-


face 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 snap-
shots.

java.awt.peer

Package that connects AWT components to their platform-specific imple-


mentations (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 NOTES
the package. The Java Package name also reflects its directory structure. For
example the statement

· 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 Ab-
stract 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 speci-
fied 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 pack-
age 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 syn-
tax is
package packagename;

263 Anna University Chennai


DCS 115 OBJECT ORIENTED PROGRAMMING

NOTES For example


package mypack;
2. 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
}
3. Add methods and variables to class as required
4. Create a subdirectory with name of the package and put it under the cur-
rent working directory.
5. 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 be-


low.

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 di-
rectory. 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(); NOTES


s.test();
}
}

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 let’s create another pack-
age 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

NOTES public static void main(String args[])


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

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 PRIVATE DEFAULT PROTECTED PUBLIC


RIGHTS SCOPE SCOPE SCOPE SCOPE

own class (Base) yes yes yes yes


subclass - same package
(SubA) no yes yes yes
class - same package
(AnotherA) no yes yes yes
subclass - another package
(SubB) no no Yes/No * yes
class - another package
(AnotherB) 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 acces-
sible.

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 vari-
able 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 im-
ported 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 pro-
gram. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 inter-


faces. Packages are also called as containers of classes.
 A package in java can contain classes,interface,enumerations and an-
notations
 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 sub-
class 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 pack-
age 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 NOTES


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?

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 an-
other 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 OBJECT ORIENTED PROGRAMMING

NOTES 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
 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

16.1 Introduction

The earliest computers did only one job at a time. All programs were run sequen-
tially, one at a time; and each had full run of the computer. However two pro-
grams couldn’t 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 run-
ning 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, al-
though 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 OBJECT ORIENTED PROGRAMMING

NOTES another so quickly that it gives the appearance of executing all of the programs at
the same time.

The system’s terminology of multitasking is multithreading. In multithreading a


process is divided into two or more sub processes, these sub processes are al-
lowed 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 Learning Objectives

1 To introduce thread concept


2 To present the two ways of creating threads
3 To show how to create threads by extending Thread class
4 To show how to create threads by implementing runnable interface
5 To discuss life cycle of thread
6 To discuss some thread methods
7 To present thread priority
8 To introduce synchronization concept

16.3 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 men-


tioned 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 re-
sources. 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 con- NOTES
cept is known as context switching in a thread.

MAIN THREAD

Start
Start
Start
Start

CHILD CHILD CHILD CHILD


THREAD1 THREAD2 THREAD3 … 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 Extending the Thread class
2 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 OBJECT ORIENTED PROGRAMMING

NOTES 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

{ NOTES
public void run()
{
for(int i=1;i<=10;i++)
{
System.out.println(i + “ * 2 = “ + i*2)
}
}
}

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 simulta-
neously.

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

NOTES for(int i=1;i<=10;i++)


{
System.out.println(i + “ * 3 = “ + i*3)
}
}
}

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 termi-
nated 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

Suspend
Runnable
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 thread’s 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 NOTES


 yield method()
 stop() method

16.6.1 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 OBJECT ORIENTED PROGRAMMING

NOTES 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

Output of the Program NOTES


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 in-
teger, 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 high-
est 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

NOTES System.out.println(i+“ From A “)


}
}
}

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

Output of the Program NOTES


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 re-
sources 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. pro-
viding 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 method’s object, or if the method is static, it holds the monitor for that method’s
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 thread’s life cycle.
 The sleep method is static and pauses execution for a set number of mil-
liseconds
 Java Thread class has a static method called yield which causes the cur-
rently 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 NOTES
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.

Exercises

Short Questions

1. What do you mean by Multitasking?


2. Define process
3. What is Multithreading concept?
4. In which situations extending thread will not be possible?
5. When the thread go to the “dead” state?
6. what is the purpose of stop() method
7. Write the steps to change the priority of the current thread
8. 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 OBJECT ORIENTED PROGRAMMING

NOTES 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 NOTES
simply a lock that serializes access to an object or a class.

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 :O’Reilly 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