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。