📜  C++程序的输出|设置 4

📅  最后修改于: 2022-05-13 01:56:10.957000             🧑  作者: Mango

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