C Plus Plus Questions Part 2 - Online Article

Note: All the programs are tested under Turbo C++ 3.0, 4.5 . It is assumed that,

  • Programs run under Windows environment,
  • Program is compiled using Turbo C/C++ compiler. The program output may depend on the information based on this assumptions (for example sizeof(int) == 2 may be assumed).

Question 1

const int size = 5;
void print(int *ptr)
{
	cout<<ptr[0];
}

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

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.

Question 2

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

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.

Question 3

#include <iostream.h>
class fig2d
{
	int dim1;
	int dim2;
	public: fig2d()
	{
		dim1=5;
		dim2=6;
	}
	virtual void operator<<(ostream & rhs);
};

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

void main()
{
	fig2d obj1;
	obj1 << cout;
} 

Answer

5 6

Explanation

In this program, the << operator is overloaded with ostream as argument. 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 << as virtual member function becomes handy when the class in which 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.

Question 4

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.

Question 5

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.

Question 6

class complex
{
	double re;
	double im;
	public: complex(): re(0),im(0) {}
	complex(double n)
	{
		re=n,im=n;
	};
	complex(int m,int n)
	{
		re=m,im=n;
	}
	void print()
	{
		cout<<re;
		cout<<im;
	}
};

void main()
{
	complex c3;
	double i=5;
	c3 = i;
	c3.print();
}

Answer

5,5

Explanation

Though no operator= function taking complex, double is defined, the double on the rhs is converted into a temporary object using the single argument constructor taking double and assigned to the lvalue.

Question 7

void main()
{
	int a, *pa, &ra;
	pa = &a;
	ra = a;
	cout <<"a="<<a <<"*pa="<<*pa <<"ra"<<ra;
}

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.

About the Author:

No further information.




Comments

m rani on 2012-10-31 12:18:03 wrote,

good one it helps alot thank u by providing this type of ques