Open In App
Related Articles

C++ | Constructors | Question 12

Improve Article
Improve
Save Article
Save
Like Article
Like

Predict the output of following program.




#include<iostream>
using namespace std;
class Point {
    int x;
public:
    Point(int x) { this->x = x; }
    Point(const Point p) { x = p.x;}
    int getX() { return x; }
};
  
int main()
{
   Point p1(10);
   Point p2 = p1;
   cout << p2.getX();
   return 0;
}

(A) 10
(B) Compiler Error: p must be passed by reference
(C) Garbage value
(D) None of the above


Answer: (B)

Explanation: Objects must be passed by reference in copy constructors. Compiler checks for this and produces compiler error if not passed by reference.

The following program compiles fine and produces output as 10.

#include <iostream >
using namespace std;
class Point {
    int x;
public:
    Point(int x) { this->x = x; }
    Point(const Point &p) { x = p.x;}
    int getX() { return x; }
};

int main()
{
   Point p1(10);
   Point p2 = p1;
   cout << p2.getX();
   return 0;
}

The reason is simple, if we don’t pass by reference, then argument p1 will be copied to p. So there will be a copy constructor call to call the copy constructor, which is not possible.

Quiz of this Question

Last Updated : 28 Jun, 2021
Like Article
Save Article
Similar Reads