Monday, December 1, 2008

Technical Placement C++ Question with Solution

1. void main()
{
int a, *pa, &ra;
pa = &a;
ra = a;
}

/*
Answer : 
Compiler Error: 'ra',reference must be initialized

Explanation : 
Pointers are different from references. One of the main 
differences is that the pointers can be both initialized and assigned,
whereas references can only be initialized. So this code issues an error.
*/

2.
const int size = 5;
void print(int *ptr)
{
cout<
}

void print(int ptr[size])
{
cout<
}

void main()
{
int a[size] = {1,2,3,4,5};
int *b = new int(size);
print(a);
print(b);
}
/*
Answer:
Compiler Error : function 'void print(int *)' already has a body

Explanation:
Arrays cannot be passed to functions, only pointers (for arrays, base addresses) 
can be passed. So the arguments int *ptr and int prt[size] have no difference  
as function arguments. In other words, both the functoins have the same signature and
so cannot be overloaded. 
*/

3.class some{
public:
~some()
{
cout<<"some's destructor"<
}
};

void main()
{
some s;
s.~some();
}
/*

Answer:
some's destructor
some's destructor
Explanation:
Destructors can be called explicitly. Here 's.~some()' explicitly calls the 
destructor of 's'. When main() returns, destructor of s is called again,
hence the result.
*/

4.
#include

class fig2d
{
int dim1;
int dim2;

public:
fig2d() { dim1=5; dim2=6;}

virtual void operator<<(ostream & rhs);
};

void fig2d::operator<<(ostream &rhs)
{
rhs <dim1<<" "<dim2<<" ";
}

/*class fig3d : public fig2d
{
int dim3;
public:
fig3d() { dim3=7;}
virtual void operator<<(ostream &rhs);
};
void fig3d::operator<<(ostream &rhs)
{
fig2d::operator <<(rhs);
rhs<dim3;
}
*/

void main()
{
fig2d obj1;
// fig3d obj2;

obj1 <<>
// obj2 <<>
}
/*

Answer : 
5 6 
Explanation:
In this program, the <<>
This enables the 'cout' to be present at the right-hand-side. Normally, 'cout' 
is implemented as global function, but it doesn't mean that 'cout' is not possible 
to be overloaded as member function.
    Overloading <<>
it is overloaded is inherited, and this becomes available to be overrided. This is as opposed 
to global friend functions, where friend's are not inherited.
*/

6. class opOverload{
public:
bool operator==(opOverload temp);
};

bool opOverload::operator==(opOverload temp){
if(*this  == temp ){
cout<<"The both are same objects\n";
return true;
}
else{
cout<<"The both are different\n";
return false;
}
}

void main(){
opOverload a1, a2;
a1= =a2;
}

Answer : 
Runtime Error: Stack Overflow

Explanation :
Just like normal functions, operator functions can be called recursively. This program just illustrates that point, by calling the operator == function recursively, leading to an infinite loop. 


7.class complex{
double re;
double im;
public:
complex() : re(1),im(0.5) {}
bool operator==(complex &rhs);
operator int(){}
};

bool complex::operator == (complex &rhs){
if((this->re == rhs.re) && (this->im == rhs.im))
return true;
else
return false;
}

int main(){
complex  c1;
cout<<  c1;
}

Answer : Garbage value

Explanation:
The programmer wishes to print the complex object using output
re-direction operator,which he has not defined for his lass.But the compiler instead of giving an error sees the conversion function
and converts the user defined object to standard object and prints
some garbage value.

No comments:

Post a Comment

Thanks to given comments.......

My Blog List