📜  C++程序的输出| 12套

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

C++程序的输出| 12套

预测以下 C++ 程序的输出。

问题 1

#include 
using namespace std;
  
int fun(int a, int b  = 1, int c =2)
{
    return (a + b + c);
}
  
int main()
{
    cout << fun(12, ,2);
    return 0;
}

输出:函数调用 fun(12, ,2) 中的编译器错误
使用默认参数,我们不能跳过中间的参数。一旦跳过一个参数,必须跳过以下所有参数。调用 fun(12) 和 fun(12, 2) 是有效的。


问题2

#include
using namespace std;
  
/* local variable is same as a member's name */
class Test
{
private:
    int x;
public:
    void setX (int x) { Test::x = x; }
    void print() { cout << "x = " << x << endl; }
};
  
int main()
{
    Test obj;
    int x = 40;
    obj.setX(x);
    obj.print();
    return 0;
}

输出:



x = 40

当类成员被局部变量隐藏时,作用域解析运算符始终可用于访问类成员。所以“Test::x = x”这行和“this->x = x”是一样的


问题 3

#include
using namespace std;
  
class Test 
{
private:
    int x;
    static int count;
public:
    Test(int i = 0) : x(i) {}
    Test(const Test& rhs) : x(rhs.x) { ++count;  }
    static int getCount() { return count; }
};
  
int Test::count = 0;
  
Test fun() 
{
    return Test();
}
  
int main()
{
    Test a = fun();
    cout<< Test::getCount();
    return 0;
}

输出:依赖于编译器
“Test a = fun()”行可能会也可能不会调用复制构造函数。因此输出可能是 0 或 1。如果您的编译器中发生复制省略,则不会调用复制构造函数。如果复制省略没有发生,复制构造函数将被调用。 gcc 编译器产生的输出为 0。