Menu

Saturday, 4 July 2015

C++ PROGRAMMING BASICS

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:

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

  1. Write a program that generates the following table:
10        19
20        20
19                10
use only a single variable for the program.
           
  1. Write a program that asks for a distance in furlongs and converts it to yards (one furlong us 220 yards).

  1. Write a program using for loop that displays only even numbers between the ranges 100 to 50 in descending order.

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

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