1.1 Introduction:
Like C, C++ began its life at Bell Labs,
where Bjarne Stroustrup developed the language in the early 1980s. In his own
words, “C++ was designed primarily so that my friends and I would not have to
program in assembler, C, or various modern high-level languages. Its main
purpose was to make writing good programs easier and more pleasant for the
individual programmer”.
A computer simulation
language called Simula67 inspired C++’s OOP aspect. Stroustrup added OOP
features to C without significantly changing the C component. Thus, C++ is a
superset of C, meaning that any valid C program is a valid C++ program,
too. There are some minor discrepancies,
but nothing crucial. C++ programs can
use existing C software libraries.
Libraries are collections of programming modules that you can call up
from a program. They provide proven
solutions to many common-programming problems, thus saving you much time and
effort. This has helped the spread of
C++.
The name C++ comes from the
C increment operator ++, which adds 1 to the value of a variable. The name C++ correctly suggests an augmented
version of C. While the OOP aspect of C++ gives the language the ability to
relate concepts involved in the problem, the C part of C++ gives the language
the ability to get close to the hardware. This combination of abilities has
helped the spread of C++. It may also involve a mental shift of gears as you
turn from one aspect of a program to another.
Also, because C++ grafts OOP onto C, you can ignore C++’s object
oriented features.
The three most important
facilities that C++ adds on to C are classes, function overloading and operator
overloading. These features enable us to
create abstract data types, inherit properties from existing data types and
support polymorphism, thus making C++ a truly object oriented language.
The object-oriented features
in C++ allow programmers to build large programs with clarity, extensibility
and ease of maintenance, incorporating the spirit and efficiency of C.
The addition of new features
has transformed C from a language that currently facilitates top down,
structured design, to one that provides bottom-up, object-oriented design.
Simple program.
#include <iostream.h> / / include header file
main( )
{
cout
<<"C+ + is better c.";
/ / C++ statement
}
1.2 Program Features:
Like C, the C++ program is a
collection of functions. The example contains only one function, main( ). As usual, execution begins at main( ). Every C++ program must have a main( ). C++ is a free-form language. With a few exceptions, the compiler ignores
carriage returns and white spaces. Like C, the C++ statements terminate with
semicolons.
1.3 Comments:
C++ introduces a new comment
symbol // (double slash). Comments start with a double slash symbol and
terminate at the end of the line. A comment may start anywhere in the line and
whatever follows till the end of the line is ignored. Note that there is no
closing symbol:
The double slash comment is
basically a single line comment. Multiline comments can be written as follows:
// This is an
example of
//C++ program to illustrate
//some of its features
The C comment symbols /*, *1 are still valid and are more
suitable for multiline comments. The
following comment is allowed:
I* This is an example of
C++ program to illustrate
some of its features
*/
We can use either or both
styles in our programs. However, remember that we cannot insert a // style
comment within the text of a program line. For example, the double slash
comment cannot be used in the manner as shown below:
for ( j = 0; j
< n; / * loops n times */ j++)
The only statement in
example Program is an output statement. The statement
cout « "C++ is better C.";
causes the string in
quotation marks to be displayed on the screen. This statement introduces two
new C++ features, cout and «. The identifier cout (pronounced as 'C out') is a predefined object that represents
the standard output stream in C++. Here,
the standard output stream represents the screen. The operator << is
called the insertion or put to
operator. It inserts (or sends) the
contents of the variable on its right to the object on its left. The object
cout has a simple interface. If string
represents a string variable, then the following statement will display its
contents:
cout « string;
You may recall that the
operator << is the bit-wise left-shift operator and it can still
be used for this purpose. This is an example of how one operator can be used
for different purposes, depending on the context. This concept is known as operator overloading.
We have used the following
#include directive in the program:
# include
<iostream.h>
This directive causes the
preprocessor to add the contents of the iostream.h
file to the program. It contains declarations for the identifier cout and the operator <<. Some
old versions of C++ use a header file called stream.h instead of iostream.h.
The header file iostream.h should be included at the beginning of all programs
that use input/output statements.
We must include appropriate
header files depending on the contents of the program. For example if we want
to use the very familiar printf( ) and
scanf( ) functions, the header file stdio.h
should be included.
1.4 Saving Your Program:
Once you've typed in your
program, you should save it to the disk by selecting Save from the File menu, or by pressing F2. It’s good to do this
before compiling and running your program, so that if a bug crashes the system,
you won't lose the changes to your source file.
1.5 Compiling And
Linking:
The program that you type
into the Edit window constitutes the source
file. When it is saved to disk, it is an ASCII file similar to that
generated by a word processor. It has the .CPP file extension. Remember that a
source file is not an executable program; it is only the instructions on how to
create a program. Transforming your source file into an executable program
requires two steps.
First, you must compile the source file into an object
tile. The object file, which has an .OBJ extension, contains machine-language
instructions that can be executed by the computer. However, these instructions
are not complete. A second step, called linking,
is required. The linking step is necessary because an executable program
almost always consists of more than one object file. Linking combines the
object files into a single executable program.
Why does a program consist
of more than one object file? There are two major reasons. First, the programmer
may have divided the program into several source files. Each of these source
files is then compiled into a separate object file, and these object files must
be1inked together. Thus turning your
source file into an executable file is a two-step process. First you compile
your source file into an object file, and then you link it with the necessary
library routines.
Compiling:
To compile the source file,
select Compile to OBJ from the File
menu. A window called Compiling will
appear. An entry called Lines compiled will
change as compiling progresses. When the process is finished, the window will
display Success: Press any key. The
entries for Warnings and Errors will be 0.
As we noted, compilation
creates all object file, which has the OBJ file extension. The object file in
our case is FIRST. OBJ
Linking:
To link your object file,
select Link EXE file from the Compile
menu. The FIRST OBJ file will be combined with the one or more library files.
The result is an executable file.
1.6 Functions:
Functions are one of the
fundamental building blocks of C++. The FIRST program consists almost entirely
of a single function called main ( ). Functions have undergone major changes in
C++. While some of these changes are simple, others require a new way of thinking
when organizing our programs. Many of these modifications and improvements were
driven by the requirements of the object-oriented concept of C++. Some of these
were introduced to make the C++ program more reliable and readable. The only
part of this program that is not part of the function is the first line – the
one that starts with #include. A function can be part of a class, in which case
it is called a member function. However, functions can also exist independent
of classes.
1.7
Function Name:
The parentheses following
the word main are the distinguishing
feature of a function. Without the parentheses the compiler would think that
main referred to a variable or to some other program element. The parentheses
aren't always empty. They're used to hold function arguments: value passed from the calling program to the function.
The word void
preceding the function name indicates that this particular function does not
have a return value.
1.8 Braces and the Function Body:
Braces (sometimes called
curly brackets) surround the body of a function. They surround or delimit a
block of program statements. Every function must use this pair of braces. In
this example there is only one statement within the braces: the line starting
with cout. However, a function body can consist of many statements.
Always
Start with main( ) : When you run a c++ program, the first statement
executed will be at the beginning of a function called main ( ) .The
program may consist of many functions, classes, and other program elements, but
on start-up control always goes to main( ). If there is no function
called main ( ) in your program, the linker will signal an error.
1.9 White Space:
Actually, the C++ compiler
ignores white space almost completely. White space is defined as spaces,
carriage returns, linefeeds, tabs, vertical tabs, and form feeds. These
characters are invisible to the compiler. You can put several statements on one
line, separated by any number of spaces or tabs, or you can run a statement
over two or more lines. It’s all the same to the compiler.
1.10
Keywords:
The keywords implement
specific C++ language features. They are explicitly reserved identifiers and
cannot be used as names for the program variables or other user-defined program
elements.
1.11
Identifiers:
Identifiers refer to the
names of variables, functions, arrays, classes, etc. created by the programmer.
They are the fundamental requirement of any language. Each language has its own
rules for naming these identifiers.
Table of C+ + keywords
asm double
new switch
auto else operator
template
break enum private this
case extern protected
throw
catch float public try
char for register typedef
class friend return union
const goto short unsigned
continue if signed virtual
default inline sizeof void
delete int static volatile
do long struct while
* Only alphabetic
characters, digits and underscores are permitted.
* The name cannot start with
a digit.
* Uppercase and lowercase
letters are distinct.
* A declared keyword cannot be used as a variable
name.
major
difference between C and C++ is the limit of a name. While ANSI C recognizes
the first 32 characters in a name, C++ laces no limit on its length and,
therefore all the characters in a name are significant. Care should be taken
while exercising a variable that is being shared by more than one file
containing C and C++ programs. Some operating systems impose a restriction on
the length of such a variable name.
1.12 Basic Data Types:
Data types in C++ can be
classified under various categories. Both C and C++ compilers support all the
built-in (also known as basic-or
fundamental) data types. With the exception of void, the basic data types
may have several modifiers preceding
them to serve the needs of various situations. The modifiers signed, unsigned,
long, and short may be applied to character and integer basic data types.
However, the modifier long may also be applied to double.
Table showing Size and range
of C++ basic data types
Type Bytes
Range
char 1 -128
to 127
unsigned char 1 0
to 255
signed char 1 -128
to 127
int 2 -32768 to 32767
unsigned int 2 0
to 65535
signed int 2 -32768
to 32767
short int 2
-32768 to 32767
unsigned short int 2 0 to 65535
signed short int 2 -32768
to 32767
long int 4 -2147483648
to 2147483647
signed long int 4 -2147483648
to 2147483647
unsigned long int 4
0 to
4294967295
float 4 3.4E
-38 to 3.4E + 38
double 8 1.7E
-308 to 1 .7E + 308
long double 10 3.4E
-4932 to 1.1 E + 4932
1.13 User-Defined Data Types:
Structures and Classes:
We have used user-defined
data types such as struct and union in C. While these data types are
legal in C++, some more features have been added to make them suitable for
object-oriented programming. C++ also permits us to define another user-defined
data type known as class, which can
be used, just like any other basic data type, to declare variables. The class
variables are known as objects.
Enumerated Data Type: An enumerated data type is another user-defined type, which provides a way for attaching names to numbers, thereby increasing comprehensibility of the code. The enum keyword (from C) automatically enumerates a list of words by assigning them values O,1, 2, and so on. This facility provides an alternative means for creating symbolic constants. The syntax of an enum statement is similar to that of the struct statement. Examples:
enum shape
{circle, square, triangle};
enum colour {red,
blue, green, yellow};
enum position
{off, on};
The enumerated types differ
slightly in C++ when compared with those in ANSI C. In C++, the tag name shape, colour, and position become new
type names. That means we can declare
new variables using these tag names.
Examples:
shape
ellipse; // ellipse is of type shape
colour
background; // background is of type colour
ANSI C
defines the types of enums to be int’s. In C++, each enumerated data type
retains its own separate type. This means that C++ does not permit an int value
to be automatically converted to an enum
value. Examples:
colour background
= blue; // allowed
colour background
= 7; // Error in C++
colour background
= (colour) 7; //OK
1.14 Derived Data Types:
Arrays: The application
of arrays in C++ is similar to that in C. The only exception is the way
character arrays are initialized. When initializing a character array in ANSI
C, the compiler will allow us to declare the array size as the exact length of
the string constant. For instance,
char string[3] =
"xyz";
is valid in ANSI C. It
assumes that the programmer intends to leave out the null character \0 in the
definition. But in C++, the size should be one larger than the number of
characters in the string.
char string[4] =
"xyz"; II O.K. for C++
Pointers: Pointers are declared and initialized as in C.
Examples:
int * ip; II
Int pointer
ip = &x; II
address of x assigned to ip
*ip = 10; II
50 assigned to x through indirection
C++ adds the concept of constant pointer and pointer to a constant
Char *const
ptr1=”GOOD”; //constant pointer
We cannot modify the address
that ptr1 is initialized to.
int const *ptr2 =
&m; // pointer to a constant
ptr2 is declared as
pointer to a constant. It can point to any variable of correct type, but the
contents of what it points to cannot be changed. We can also declare both the
pointer and the variable as constants in the following way:
const char *const cp=”xyz”;
The statement declares cp
as a constant pointer to the string, which has been declared as a
constant. In this case, neither the
address assigned to the pointer cp
nor the contents it points to can be changed. Pointers are extensively used in
C++ for memory management and achieving polymorphism.
1.15
Declaration Of Variables:
We know that, in C, all
variables must be declared before they are used in executable statements. This
is true with C++ as well. However, there is a significant difference between C
and C++ with regard to the place of their declaration in the program. C
requires all the variables to be defined at the beginning of a scope. When we
read a C program, we usually come across a group of variable declarations at
the beginning of each scope level. Their actual use appears elsewhere in the
scope, sometimes far away from the place of declaration. Before using a
variable, we should go back to the beginning of the program to see whether it
has been declared and, if so, of what type it is.
C++ allows the declaration of a variable
anywhere in the scope. This means that a variable can be declared right at the
place of its first use. This makes the program much easier to write and reduces
the errors that may be caused by having to scan back and forth. It also makes
the program easier to understand because the variables are declared in the
context of their use. The example below illustrates this point.
main ( )
{
float x; II declaration
float sum = a;
for(int i = 1;
i<5; i++) Il declaration
{
cin >>x;
sum = sum+x;
}
float average; Il
declaration
average = sum I
i;
cout <<
average;
}
The only disadvantage of
this style of declaration is that we cannot see at a glance all the variables
used in a scope.
1.16
Dynamic Initialization Of Variables:
One additional feature of
C++ is that it permits initialisation of the variables at run time. This is
referred to as dynamic initialisation. Remember
that, in C, a variable must be initialised using a constant expression and the
C compiler would fix the initialisation code at the time of compilation: However,
in C++, a variable can be initialised at run time using expressions at the
place of declaration. For example, the following are valid initialisation
statements:
…………..
…………..
int n =
strlen(string);
……………
float area =
3.14159 * rad * rad;
This means that both the
declaration and initialisation of a variable can be done simultaneously at the
place where the variable is used for first time. The example program
illustrates this.
// program to
convert temperature from Fahrenheit to Celsius
#include
<iostream.h>
main( )
{
int ftemp;
cout <<
“Enter temperature in Fahrenheit” ;
cin >>
ftemp;
int ctemp =
(ftemp-32) * 5/9;
cout <<
“Equivalent in Celsius is: “ << ctemp << '\n';
}
The statement cin
>>ftemp;
causes the program to wait
for the user to type in a number. The resulting number is placed in the
variable ftemp. The keyword cin (pronounced "C in") is an
object, predefined in C++ to correspond to the standard input stream, This
stream represents data coming from the keyboard (unless it has been
redirected). The » is the extraction or
get from operator. It takes the value
from the stream object on its left and places it in the variable on its right.
Cascading <<:
The extraction operator
<< is used repeatedly in the second cout statement in FAHREN This is
perfectly legal. The program first sends the phrase Equivalent in centigrade is to cout, then it sends the value of
ctemp, and finally the newline character
‘\n'.
The insertion operator >>
can be cascaded with cin in the same way, allowing the user to enter a series
of values. However, this capability is not used so often, since it eliminates
the opportunity to prompt the user between inputs
1.17 Manipulators:
Manipulators are operators
used with the insertion operator << to modify -- or manipulate -- the way
data is displayed. We’ll look at two of
the most common here: endl and setw.
The endl
Manipulator: This is a manipulator that
causes a linefeed to be inserted into the stream. It has the same effect as
sending the single ‘/n’ character.
The setw Manipulator:
You can think of each value displayed by cout as occupying a field: an
imaginary box with a certain width. The
default field is just wide enough to hold the value. That is, the integer 567
will occupy a field three characters wide, and the string "pajamas"
will occupy a field seven characters wide. However, in certain situations this
may not lead to optimal results.
// width2.tpp
// demonstrates setw
maniputator
#include <iostrearo.h>
#include <iomanip.h>
main()
{
long
pop1=2425785, pop2=47, pop3=9761;
cout <<
setw(8) << "LOCATION" << setw(12) <<
"POPULATION" << endl
<< setw(8) <<
"Porttity" << setw(12) << pop1 << endl
<< setw(8) <<
"Hightown" << setw(12) << pop2 << endl
<< setw(8) <<
"Lowville" << setw(12) << pop3 << endl;
}
The setw manipulator causes the number (or string) that follows it in
the stream to be printed within a field n characters wide, where n is the
argument to setw (n). The value is right justified within the field.
1.18 Type Conversion:
C++ like C, is more
forgiving than some languages in the way it treats expression involving several
different data types. As an example, consider the program below.
//shows mixed expression
#include <iostream.h>
void main( )
{
int count = 7;
float avgWeight = 155.5;
double totalWeight = count * avgWeight;
cout<<
“TotalWeight =”<< totalWeight<<endl;
}
Here a variable of type int
is multiplied by a variable of type float to yield a result of type double. This program compiles without error, the
compiler considers it normal that you want to multiply numbers of different
types. Not all languages are this relaxed. Some don’t permit mixed expressions,
and would flag as an error the line that performs the arithmetic in the above
program.
Casts: the term applies to data conversions specified by the programmer, as opposed to the automatic data conversions. Sometimes a programmer needs to convert a value from one type to another in a situation where the compiler will not do it automatically, resulting in an erroneous result. In such case we might be able to solve the problem by using a cast. Here's an example:
//
Program to illustrate the effect of casts
#include <iostream.h>
main( )
{
int intvar =
25000;
intvar = (intvar * 10) / 10; // result too large
cout << “intvar = “ << intvar << endl; // wrong answer
int intvar = 25000;
intvar
=(long (intvar * 10) / 10; // cast to long
cout << “intvar = “ << intvar << endl; // right answer
}
When we multiply the
variable intvar by 10, the result –250,000 is far too large to fit in a
variable of type int, or unsigned int.
This leads to the wrong answer, as shown in the first part of the
program. We could redefine the data type of the variables to be long; this
provides plenty of room, since this type holds numbers up to 2.147,483.647. But
suppose that for some reason, such as keeping the program small, we don’t want
to change the variables to type long. We can cast intvar to type long before multiplying. This is sometimes called coercion; the data is coerced into becoming another type. The
expression
long(intVar)
casts intVar to type long.
It generates a temporary variable of type long with the same value as intVar.
It is this temporary variable that is multiplied by 10. Since it is type long,
the result fits. This result is then divided by 10 and assigned to the normal int
variable intVar. Here's the program's output:
intVar = -1214
intVar = 25000
The first answer, without
the cast, is wrong; but in the second answer, the cast produces the correct
result. You can use another syntax for casts. You can say
(long)intvar
with the parentheses around
the type rather than around the variable. This is the only syntax acceptable in
C, but in C++ the first approach (called "functional notation") is
preferred, because it is similar to the way to functions.
1. 19 Operators:
Arithmetic
operators: C++ uses operators to do arithmetic. It
provides operators for five basic arithmetic calculations: addition,
subtraction, multiplication, division and taking the modulus. Each of these
operators uses two values (called operands) to calculate a final answer.
Together, the operator and its operands constitute an expression. For example,
consider the following statement:
int wheels = 4 + 2;
The values 4 & 2 are
operands, the + symbol is the addition operator, and 4 + 2 is an expression
whose value is 6.
Some of the basic arithmetic
operators are +, -, *, / and %.
Logical Operators: These operators allow
you to logically combine Boolean (true/ false) values. For example, today is a
weekday has a Boolean value, since it’s either true or false.
Some of the logical
operators are:
Logical AND -&&
Logical OR - ||
Logical NOT - !
Relational Operators: A relational
operator compares two values. The values can be any built-in C+ + data type,
such as char, int or float or they can be user-defined class.
Some of the relational
operators are:
Greater than > Less than <
Equal to = = Not equal to ! =
Greater than or equal to > = Less
than or equal to < =
1.20 Decision Statements:
Programs also need to make
these one-time decisions. In a program a decision causes a one-time jump to a
different part of the program, depending on the value of an expression. The most important is with if … else
statement, which chooses between two alternatives. This statement can be used without the else,
as a simple if statement. Another
decision statement, switch, creates branches for multiple alternative
sections of code, depending on the value of a single variable. Finally the conditional operator is used in
specialized situations.
if construct: The if statement
is the simplest of the decision statements. The programs below illustrate this.
void main ( )
{
int x;
cout<< “Enter a number”;
cin>> x;
if(x >100)
cout<<”That number is greater
than 100 \n”;
}
The if keyword is followed
by a test expression in parentheses. The statements following the if are
executed only once if the test expression is true.
if...else construct: The if statement lets you do
something if a condition is true. If it isn't true, nothing happens. But
suppose we want to do one thing if a condition is true, and do something else
if it's false. That's where the if ...else statement comes in. It
consists of an if
statement, followed by a statement or block of statements, followed by the
keyword else, followed by another statement or block of statements.
if( condition)
statement;
// if true
else
statement;
// if false
if the test expression in
the if statement is
true, the program prints one message; if it isn’t, it prints the other.
else...if construct: The nested if
…else statements can look clumsy and can
be hard to interpret, especially if they are nested more deeply. However
there's another approach to writing the same statements.
if( first
condition)
statement;
// if true
else if( second condition )
statement; // if false
else
statement; // default
The compiler sees this as identical to if…
else, but rearranged the if's so that they directly follow the else's.
The program goes down the ladder of else … if's until one of the test
expressions is true. It then executes the following statement and exits from
the ladder.
switch construct: If you have a large decision tree, and all the decisions depend on the value of the same variable, you can probably consider a switch statement instead of a series of if ...else or else if constructions. Here’s a simple example.
// program to demonstrates
SWITCH statement
# include <iostream.h>
void main( )
{ int speed;
cout
<<"\nEnter 33,45, or 78: "; cin
>> speed;
switch(speed) {
case 33:
cout
<<"Green\n"; break;
case 45:
cout
<<"Yellow\n"; break;
case 78:
cout
<<"Red\n"; break;
} }
This program prints one of
three possible messages depending on whether the user inputs the number 33, 45
or 78 The keyword switch is followed by a switch
variable in parentheses
switch(speed)
Braces then delimit a number
of case statements. Each case keyword is followed by a constant, which is not in parentheses
but is followed by a colon
case 33:
The data type of the case
constants should match that of the switch variable. Before entering the switch,
the program should assign a value to the switch variable. This value will
usually match a constant in one of the case
statements. When this is the case, the statements immediately following the
keyword case will be executed, until
a break is reached.
break construct: The break keyword causes the entire switch statement to exit. Control goes
to the first statement following the end of the switch.
The Conditional operator: This operator
consists two symbols, which operate on three operands. It’s the only such
operator in C+ +; other operators operate on two or one operands. For example:
X = (a>b) ? a : b
The part of this statement
to the right of the equals sign is called conditional
expression. The question mark and the colon make up the conditional
operator. The expression before the question mark is the test expression. If
the test expression is true, then the entire conditional expression takes on
the value of the operand following the question mark. If it is false, the
conditional expression takes on the value of the operand following the colon.
1.21 Iteration statements:
do … while statement: The do … while
is an exit – controlled loop. Based on a condition, the control is transferred
back to a particular point in the program.
do {
statement 1;
statement N;
} while(condition is true);
while statement: This is also a
loop structure, but it an entry – controlled one.
while( condition is true)
{
statement 1;
statement N;
}
for statement: The for is an
entry – controlled loop and is used when an action is to be repeated for a
predetermined number of times.
for( initial value; test condition; update expression)
{
statement 1;
statement N;
}
1.22 Methods to Include
‘#include’:
We can use the #include
directive in two ways in your programs. In the first method the angle brackets <
and > surrounding the filenames, for example
#include<iostream.h>
Angle brackets indicate that
the compiler should begin searching for these files in the standard INCLUDE
directory. This directory holds the header files supplied by Borland for the
system. You can see what Turbo C++
thinks this directory is (and change it if you want) by selecting Directory
from the Options menu.
In the second method you can
also use quotation marks around the filename, for example
#include
"myheader.h"
Quotation marks instruct the
compiler to begin its search for the header file in the current directory; this is usually the directory that contains the
source file. You normally use quotation marks for header files you write
yourself. Either quotation marks or angle brackets work in anywise, but making
the appropriate choice speeds up the compilation process slightly by giving the
compiler a hint about where to find the file.
Exercise:
- Assume there are 7,841 gallons in a cubic foot, write a program that asks the user to enter a number of gallons, and then display the equivalent in cubic feet.
- Write a program that generates the following table:
10 19
20 20
19
10
use only a single
variable for the program.
- Write a program that asks for a distance in furlongs and converts it to yards (one furlong us 220 yards).
- Write a program using for loop that displays only even numbers between the ranges 100 to 50 in descending order.
- Create a calculator program, which asks the user to enter two numbers of any precision and an arithmetic operator. And display the result. Continue the operation this until user wish to end.
- Write a program to generate multiplication table of any number entered by the user up to the multiples of 50, with each row have 10 values.