C++程序的输出|设置 4
难度等级:菜鸟
预测以下 C++ 程序的输出。
问题 1
#include
using namespace std;
int x = 10;
void fun()
{
int x = 2;
{
int x = 1;
cout << ::x << endl;
}
}
int main()
{
fun();
return 0;
}
输出: 10
如果范围解析运算符放在变量名之前,则引用全局变量。因此,如果我们从上面的程序中删除以下行,那么它将在编译中失败。
int x = 10;
问题2
#include
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;
}
输出:调用的构造函数。
如果我们仔细看看语句“Point t1, *t2;:”,我们会发现这里只构造了一个对象。 t2 只是一个指针变量,而不是一个对象。
问题 3
#include
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;
}
输出:
调用普通构造函数
复制构造函数调用
复制构造函数调用
调用普通构造函数
有关解释,请参阅以下评论:
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