Difficulty Level: Rookie
Predict the output of below C++ programs.
Question 1
#include<iostream> using namespace std;
int x = 10;
void fun()
{ int x = 2;
{
int x = 1;
cout << ::x << endl;
}
} int main()
{ fun();
return 0;
} |
Output: 10
If Scope Resolution Operator is placed before a variable name then the global variable is referenced. So if we remove the following line from the above program then it will fail in compilation.
int x = 10;
Question 2
#include<iostream> using namespace std;
class Point {
private :
int x;
int y;
public :
Point( int i, int j); // Constructor
}; Point::Point( int i = 0, int j = 0) {
x = i;
y = j;
cout << "Constructor called" ;
} int main()
{ Point t1, *t2;
return 0;
} |
Output: Constructor called.
If we take a closer look at the statement “Point t1, *t2;:” then we can see that only one object is constructed here. t2 is just a pointer variable, not an object.
Question 3
#include<iostream> using namespace std;
class Point {
private :
int x;
int y;
public :
Point( int i = 0, int j = 0); // Normal Constructor
Point( const Point &t); // Copy Constructor
}; Point::Point( int i, int j) {
x = i;
y = j;
cout << "Normal Constructor called\n" ;
} Point::Point( const Point &t) {
y = t.y;
cout << "Copy Constructor called\n" ;
} int main()
{ Point *t1, *t2;
t1 = new Point(10, 15);
t2 = new Point(*t1);
Point t3 = *t1;
Point t4;
t4 = t3;
return 0;
} |
Output:
Normal Constructor called
Copy Constructor called
Copy Constructor called
Normal Constructor called
See following comments for explanation:
Point *t1, *t2; // No constructor call
t1 = new Point(10, 15); // Normal constructor call
t2 = new Point(*t1); // Copy constructor call
Point t3 = *t1; // Copy Constructor call
Point t4; // Normal Constructor call
t4 = t3; // Assignment operator call
|
Please write comments if you find any of the answers/explanations incorrect, or you want to share more information about the topics discussed above