预测以下程序的输出。
#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基础课程》。