📜  C++ |构造函数|问题12

📅  最后修改于: 2021-05-26 00:01:16             🧑  作者: Mango

预测以下程序的输出。

#include
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)编译器错误:必须通过引用传递p
(C)垃圾价值
(D)以上都不是答案: (B)
说明:对象必须在副本构造函数中通过引用传递。编译器会对此进行检查,如果未通过引用传递,则会产生编译器错误。

下面的程序可以正常编译,并输出为10。

#include 
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;
}

原因很简单,如果我们不通过引用传递,则参数p1将被复制到p。因此,将有一个复制构造函数调用来调用复制构造函数,这是不可能的。
这个问题的测验

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。