Beruflich Dokumente
Kultur Dokumente
Ans.
There are three steps in executing a c++ program: Compiling, Linking and
Running the program. The c++ programs have to be typed in a compiler.
All the programs discussed in the book will be compiled on turbo c++
compiler. The turbo c++ compiler comes with an editor to type and edit c+
+ program. After typing the program the file is saved with an extension
.cpp. This is known as source code. The source code has to be converted to
an object code which is understandable by the machine. This process is
known as compiling the program. You can compile your program by
selecting compile from compile menu or press Alt+f9. After compiling a file
with the same name as source code file but with extension .obj. is created.
When you execute the program, the compiler displays the output of
the program and comes back to the program editor. To view the output and
wait for user to press any key to return to the editor, type getch() as the
last statement in the program. Getch() is an inbuilt predefined library
function which inputs a character from the user through standard input.
However you should include another header file named conio.h to use this
function. Conio.h contains the necessary declarations for using this
function. The include statement will be similar to iostream.h.
During compilation, if there are any errors that will be listing by the
compiler. The errors may be any one of the following
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
1. Syntax error
2. Logical error
This error occurs due to the flaw in the logic. This will not be identified
by the compiler. However it can be traced using the debug tool in the
editor. First identify the variable which you suspect creating the error and
add them to watch list by selecting Debug ->Watches->Add watch. Write
the variable name in the watch expression. After adding all the variables
required to the watch list, go to the statement from where you want to
observe. If you are not sure, you can go to the first statement of the
program. Then select Debug ->Toggle Breakpoint (or press ctrl + f8). A red
line will appear on the statement. Then Run the program by selecting Ctrl +
f9 or Run option from run menu. The execution will halt at the statement
where you had added the breakpoint. The watch variables and their values
at that point of time will be displayed in the bottom in the watch window.
Press F8 to execute the next statement till you reach the end of the
program. In this way you can watch closely the values in the watch
variables after execution of each and every statement in the program. If
you want to exit before execution of the last statement press Ctrl + Break.
To remove the breakpoint in the program go to the statement where you
have added breakpoint select Debug ->Toggle Breakpoint (or press ctrl +
f8). Select Debug -> watch ->remove watches to remove the variables in
the watch list. This tool helps in knowing the values taken by the variable at
each and every step. You can compare the expected value with the actual
value to identify the error.
3. Linker error
This error occur when the files during linking are missing or mispelt
4. Runtime error
2. Describe the theory with programming examples the selection control statements in
C++.
Ans.
If statement
Syntax : if (expression or condition)
{ statement 1;
statement 2;
}
else
{ statement 3;
statement 4;
}
// evenodd.cpp
# include <iostream.h>
# include <conio.h>
void main()
{
int num;
cout<<”Please enter a number”<<endl;
cin>>num;
if ((num%2) == 0)
cout<<num <<” is a even number”;
else
cout<<num <<” is a odd number”;
getch();
}
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
The above program accepts a number from the user and divides it by
2 and if the remainder (remainder is obtained by modulus operator) is zero,
it displays the number is even, otherwise as odd. We make use of the
relational operator == to compare whether remainder is equal to zero or
not.
Nested If statement
If (condition1)
{ if (condition 2)
{ statement1;
Statement2;
}
else if (condition3)
{statement3;
}
}
else statement4;
If ((condition1 || (condition2))
statement1;
else
statement2;
//Large.cpp
# include <iostream.h>
void main()
{ int a,b,c;
cout<<”Please enter three numbers”;
cin>>a>>b>>c;
if ((a>b) && (b>c))
cout<<a<< “ is the largest number”;
else if ((b>a) && (b>c))
cout<<b<< “ is the largest number”;
else if ((c>a) && (c>b))
cout<<c<< “ is the largest number”;
}
The above program accepts three numbers from the user and
displays which is the largest number among the three.( assumption is that
all the numbers are unique, the program has to be modified if you would
like to allow same number twice)
Switch statement
Syntax :
Switch (variablename)
{ case value1: statement1;
break;
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
position.cpp
# include<iostream.h>
void main()
{ char pos;
int x=15, y=15;
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
The above program asks the user to enter l,r,u,d for allowing him to
move left,right,up and down respectively. The position is initialised to 15
and 15 which are x and y coordinates of his position. Depending upon the
what user has selected the the x and y co-ordinates are incremented or
decremented by one(x++ is same as x=x+1). If the user types a letter
other than l,r,u,d, he gets an error message. Since the switch variable is a
character, l,u,r,d and enclosed within single quote.
789
-- 7 is Saddle_Pt. at position (3,1)
Write a program in C++ to check and print for saddle points in a matrix.
Ans.
#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
int a[3][3],i,j,k,sp,minr,pos,flag=1;
cout<<"Enter the contents of the array ";
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cin>>a[i][j];
}
cout<<"
The matrix representation of array is: ";
for(i=0;i<3;i++)
{
cout<<"
";
for(j=0;j<3;j++)
cout<<a[i][j]<<" ";
}
cout<<endl;
for(i=0;i<3;i++)
{
flag=1;
sp=a[i][0],pos=0;
for(j=1;j<3;j++)
{
if(a[i][j]<sp)
{ sp=a[i][j];
pos=j;
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
}
}
for(k=0;k<3;k++)
{
if(a[k][pos]<sp)
{
flag=0;
break;
}
}
if(flag==1)
cout<<"The saddle point of row "<<i+1<<" is "<<sp<<endl;
}
getch();
}
Ans.
Pass by Value
Consider a pair of C++ functions defined in Program. The function One calls
the function Two. In general, every function call includes a (possibly empty)
list of arguments. The arguments specified in a function call are called
actual parameters . In this case, there is only one actual parameter y.
void Two(int x)
{
x=2;
cout << r << endl;
}
void One()
{
int y=1;
Two(y);
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
Since the formal parameters give rise to local variables, if a new value is
assigned to a formal parameter, that value has no effect on the actual
parameters. Therefore, the output obtained produced by the function One
defined in Program is:
2
1
Pass by Reference
Consider the pair of C++ functions defined in Program . The only difference
between this code and the code given in Program is the definition of the
formal parameter of the function Two: In this case, the parameter x is
declared to be a reference to an int. In general, if the type of a formal
parameter is a reference, then the parameter passing method is pass-by-
reference .
void Two(int& x)
{
x=2;
cout << r << endl;
}
void One()
{
int y=1;
Two(y);
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
Ans.
Derivation
'-+-public----+--+---------+-'
+-private---+ '-virtual-'
'-protected-'
In the declaration of a derived class, you list the base classes of the derived
class. The derived class inherits its members from these base classes.
The following example shows the declaration of the derived class D and the
base classes V, B1, and B2. The class B1 is both a base class and a derived
class because it is derived from class V and is a base class for D:
class V { /* ... */ };
class B1 : virtual public V { /* ... */ };
class B2 { /* ... */ };
Classes that are declared but not defined are not allowed in base lists.
For example:
class X;
// error
class Y: public X { };
The compiler will not allow the declaration of class Y because X has not
been defined.
When you derive a class, the derived class inherits class members of the
base class. You can refer to inherited members (base class members) as if
they were members of the derived class. For example:
class Base {
public:
int a,b;
};
class Derived : public Base {
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
public:
int c;
};
int main() {
Derived d;
d.a = 1; // Base::a
d.b = 2; // Base::b
d.c = 3; // Derived::c
}
The derived class can also add new class members and redefine existing
base class members. In the above example, the two inherited members, a
and b, of the derived class d, in addition to the derived class member c, are
assigned values. If you redefine base class members in the derived class,
you can still refer to the base class members by using the :: (scope
resolution) operator. For example:
#include <iostream>
using namespace std;
class Base {
public:
char* name;
void display() {
cout << name << endl;
}
};
int main() {
Derived d;
d.name = "Derived Class";
d.Base::name = "Base Class";
// call Derived::display()
d.display();
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
// call Base::display()
d.Base::display();
}
You can manipulate a derived class object as if it were a base class object.
You can use a pointer or a reference to a derived class object in place of a
pointer or reference to its base class. For example, you can pass a pointer
or reference to a derived class object D to a function expecting a pointer or
reference to the base class of D. You do not need to use an explicit cast to
achieve this; a standard conversion is performed. You can implicitly convert
a pointer to a derived class to point to an accessible unambiguous base
class. You can also implicitly convert a reference to a derived class to a
reference to a base class.
#include <iostream>
using namespace std;
class Base {
public:
char* name;
void display() {
cout << name << endl;
}
};
int main() {
Derived d;
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
// call Base::display()
bptr->display();
Base Class
The reverse case is not allowed. You cannot implicitly convert a pointer or a
reference to a base class object to a pointer or reference to a derived class.
For example, the compiler will not allow the following code if the classes
Base and Class are defined as in the above example:
int main() {
Base b;
b.name = "Base class";
The compiler will not allow the statement Derived* dptr = &b because the
statement is trying to implicitly convert a pointer of type Base to a pointer
of type Derived.
If a member of a derived class and a member of a base class have the same
name, the base class member is hidden in the derived class. If a member of
a derived class has the same name as a base class, the base class name is
hidden in the derived class.
Inheritance
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
#include <iostream>
using namespace std;
class A {
int data;
public:
void f(int arg) { data = arg; }
int g() { return data; }
};
class B {
public:
A x;
};
int main() {
B obj;
obj.x.f(20);
cout << obj.x.g() << endl;
// cout << obj.g() << endl;
}
In the main function, object obj accesses function A::f() through its data
member B::x with the statement obj.x.f(20). Object obj accesses A::g() in a
similar manner with the statement obj.x.g(). The compiler would not allow
the statement obj.g() because g() is a member function of class A, not class
B.
The inheritance mechanism lets you use a statement like obj.g() in the
above example. In order for that statement to be legal, g() must be a
member function of class B.
Inheritance lets you include the names and definitions of another class's
members as part of a new class. The class whose members you want to
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
include in your new class is called a base class. Your new class is derived
from the base class. The new class contains a sub object of the type of the
base class. The following example is the same as the previous example
except it uses the inheritance mechanism to give class B access to the
members of class A:
#include <iostream>
using namespace std;
class A {
int data;
public:
void f(int arg) { data = arg; }
int g() { return data; }
};
class B : public A { };
int main() {
B obj;
obj.f(20);
cout << obj.g() << endl;
}
Class A is a base class of class B. The names and definitions of the
members of class A are included in the definition of class B; class B inherits
the members of class A. Class B is derived from class A. Class B contains a
subobject of type A.
You can also add new data members and member functions to the derived
class. You can modify the implementation of existing member functions or
data by overriding base class member functions or data in the newly
derived class.
You may derive classes from other derived classes, thereby creating
another level of inheritance. The following example demonstrates this:
struct A { };
struct B : A { };
struct C : B { };
A direct base class is a base class that appears directly as a base specifier
in the declaration of its derived class.
An indirect base class is a base class that does not appear directly in the
declaration of the derived class but is available to the derived class through
one of its base classes. For a given class, all base classes that are not direct
base classes are indirect base classes. The following example demonstrates
direct and indirect base classes:
class A {
public:
int x;
};
class B : public A {
public:
int y;
};
class C : public B { };
Ans.
Friend function
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
The friend function is written as any other normal function, except the
function declaration of these functions is preceded with the keyword friend.
The friend function must have the class to which it is declared as friend
passed to it in argument.
The keyword friend is placed only in the function declaration of the friend
function and not in the function definition.
When a class is declared as a friend, the friend class has access to the
private data of the class that made this a friend.
A friend function, even though it is not a member function, would have the
rights to access the private members of the class.
The function can be invoked without the use of an object. The friend
function has its argument as objects, seen in example below.
#include
class exforsys
{
private:
int a,b;
public:
void test()
{
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
a=100;
b=200;
}
friend int compute(exforsys e1)
//Friend Function Declaration with keyword friend and with the object of
class exforsys to which it is friend passed to it
};
main()
{
exforsys e;
e.test();
cout<<"The result is:"< //Calling of Friend Function with object as
argument.
}
Friend Class
C++ provides the friend keyword to do just this. Inside a class, you can
indicate that other classes (or simply functions) will have direct access to
protected and private members of the class. When granting access to a
class, you must specify that the access is granted for a class using the class
keyword:
friend class aClass;
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
class Node
{
private:
int data;
int key;
// ...
friend class BinaryTree; // class BinaryTree can now access data directly
};
Now, Node does not need to provide any means of accessing the data
stored in the tree. The BinaryTree class that will use the data is the only
class that will ever need access to the data or key. (The BinaryTree class
needs to use the key to order the tree, and it will be the gateway through
which other classes can access data stored in any particular node.) Now in
the BinaryTree class, you can treat the key and data fields as though they
were public:
class BinaryTree
{
private:
Node *root;
Ans.
So far we have seen just one way to open a file, either for reading,
either for writing. But it can be opened another way too. So far, you should
be aware of this method:
ifstream OpenFile(“cpp-home.txt”);
Well, this is not the only way. As mentioned before, the above code
creates an object from class ifstream, and passes the name of the file to be
opened to its constructor. But in fact, there are several overloaded
constructors, which can take more than one parameter. Also, there is
function open() that can do the same job. Here is an example of the above
code, but using the open() function:
ifstream OpenFile;
OpenFile.open(“cpp-home.txt”);
Other use of open() is for example if you open a file, then close it, and
using the same file handle open another file. This way, you will need the
open() function.
#include <fstream.h>
void read(ifstream &T) { //pass the file stream to the function
//the method to read a file
char ch;
while(!T.eof()) {
T.get(ch);
cout << ch;
}
cout << endl << "——–" << endl;
}
void main() {
ifstream T("file1.txt");
read(T);
T.close();
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
T.open("file2.txt");
read(T);
T.close();
}
So, as long as file1.txt and file2.txt exists and has some text into, you will
see it.
You should know that filename is the name of the file (a string). What
is new here is the open_mode. The value of open_mode defines how to a
file can be opened. Here is a table of the open modes:
All these values are int constants from an enumerated type. But for
making your life easier, you can use them as you see them in the table.
Here is an example on how to use the open modes:
#include <fstream.h>
void main() {
ofstream SaveFile("file1.txt", ios::ate);
SaveFile << "That’s new!n";
SaveFile.close();
}
As you see in the table, using ios::ate will write at the end of the file.
If it wasn’t used, the file would have been overwritten. So, if file1.txt has
this text:
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
Running the above code, will add “That’s new!” to it, so it will look this way:
If you want to set more than one open mode, just use the OR operator (|).
This way:
ios::ate | ios::binary
Using different open modes helps make file handling an easy job. Having
In fact, that is only the declaration. The code line above creates a file
stream handle, named File. As you know, this is an object from class
fstream. When using fstream, you should specify ios::in and ios::out as open
modes. This way, you can read from the file, and write in it, in the same
time, without creating new file handles. Well, of course, you can only read
or write. Here is the code example:
#include <fstream.h>
void main() {
fstream File("test.txt", ios::in | ios::out);
File << "Hi!"; //put “Hi!” in the file
static char str[10]; //when using static, the array is automatically
//initialized, and very cell NULLed
File.seekg(ios::beg); //get back to the beginning of the file
//this function is explained a bit later
File >> str;
cout << str << endl;
File.close();
}
This line, creates an object from class fstream. At the time of execution, the
program opens the file test.txt in read/write mode. This means, that you
can read from the file, and put data into it, at the same time.
I am sure the reader is aware of this and hence the explanation for this
statement is redundant.
This makes a char array with 10 cells. The word static initializes the array
when at the time of creation.
File.seekg(ios::beg);
while(!OpenFile.eof()) {
OpenFile.get(ch);
cout << ch;
}
This is a while loop, that will loop until you reach the end of the file.
But how does the loop know if the end of the file is reached? The answer is;
when you read the file, there is something like an inside-pointer (current
reading/writing position) that shows where you are up to, with the reading
(and writing, too). Every time you call OpenFile.get(ch) it returns the
current character to the ch variable, and moves the inside-pointer one
character after that, so that the next time this function is called, it will
return the next character. And this repeats, until you reach the end of the
file.
Going back to the code line; the function seekg() will put the inside-pointer
to a specific place (specified by you). One can use:
Or you can also set the number of characters to go back or after. For
example, if you want to go 5 characters back, you should write:
File.seekg(-5);
File.seekg(40);
It is imperative to mention that the seekg() function is overloaded, and it
can take two parameters, too. The other version is this one:
File.seekg(-5, ios::end);
In this example, you will be able to read the last 4 characters of the text,
because:
Why you will read 4 but not 5 characters? One character is lost, because
the last thing in the file is neither a character nor white space. It is just
position (i.e., end of file).
Why this function was used the program above. After putting “Hi!” in the
file, the inside-pointer was set after it, i.e., at the end of the file. And as we
want to read the file, there is nothing that can be read at the end. Hence,
we have to put the inside-pointer at the beginning. And that is exactly what
this function does.
I believe this line reminds us of cin >>. In fact, it has much to do with it.
This line reads one word from the file, and puts it into the specified array.
For example, if the file has this text:
Using File >> str, will put just “Hi!” to the str array. And, as what we put in
the file was “Hi!” we don’t need to do a while loop, that takes more time to
code. That’s why this technique was used. By the way, in the while loop for
reading, that was used so far, the program reads the file, char by char. But
you can read it word by word, this way:
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
Ans.
A class template definition looks like a regular class definition, except it is
prefixed by the keyword template. For example, here is the definition of a
class template for a Stack.
template <class T>
class Stack {
public:
Stack(int = 10);
~Stack() { delete [] stackPtr ; }
int push(const T&);
int pop(T&);
int isEmpty()const { return top == -1; }
int isFull() const { return top == size – 1; }
private:
int size; // number of elements on Stack.
int top;
T* stackPtr;
};
When compiling B.cpp, the compiler has both the declarations and
the definitions available. At this point the compiler does not need to
generate any definitions for template classes, since there are no
instantiations. When the compiler compiles main.cpp, there are two
instantiations: template class B<int> and B<float>. At this point the
compiler has the declarations but no definitions.
//stack.h
#pragma once
template <class T>
class Stack {
public:
Stack(int = 10);
~Stack() { delete [] stackPtr; }
int push(const T&);
int pop(T&); // pop an element off the stack
int isEmpty()const { return top == -1; }
int isFull() const { return top == size – 1; }
private:
int size; // Number of elements on Stack
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
int top;
T* stackPtr;
};
//constructor with the default size 10
template <class T>
Stack<T>::Stack(int s) {
size = s > 0 && s < 1000 ? s : 10;
top = -1; // initialize stack
stackPtr = new T[size];
}
// push an element onto the Stack
template <class T>
int Stack<T>::push(const T& item) {
if (!isFull())
{
stackPtr[++top] = item;
return 1; // push successful
}
return 0; // push unsuccessful
}
// pop an element off the Stack
template <class T>
int Stack<T>::pop(T& popValue) {
if (!isEmpty())
{
popValue = stackPtr[top--];
return 1; // pop successful
}
return 0; // pop unsuccessful
}
#include <iostream>
#include "stack.h"
using namespace std;
void main() {
typedef Stack<float> FloatStack;
typedef Stack<int> IntStack;
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
FloatStack fs(5);
float f = 1.1;
cout << "Pushing elements onto fs" << endl;
while (fs.push(f))
{
cout << f << ‘ ‘;
f += 1.1;
}
cout << endl << "Stack Full." << endl
<< endl << "Popping elements from fs" << endl;
while (fs.pop(f))
cout << f << ‘ ‘;
cout << endl << "Stack Empty" << endl;
cout << endl;
IntStack is;
int i = 1.1;
cout << "Pushing elements onto is" << endl;
while (is.push(i))
{
cout << i << ‘ ‘;
i += 1;
}
cout << endl << "Stack Full" << endl
<< endl << "Popping elements from is" << endl;
while (is.pop(i))
cout << i << ‘ ‘;
cout << endl << "Stack Empty" << endl;
}
Output:
Stack Empty
August 2010
Master of Computer Application (MCA) – Semester 2
MC0066 – OOPS using C++ – 4 Credits (Book ID: B0681 & B0715)
Assignment Set – 1 (40 Marks)
· typedef’s are very useful when "templates of templates" come into usage.
For example, when instantiating an STL vector of int’s, you could use: