程序段3:以下代码编译时会产生错误的是哪条语句?
#include <iostream>
using namespace std;
struct Foo {
Foo() {}
Foo(int) {}
void fun() {}
};
int main(void) {
Foo a(10); //语句1
a.fun(); //语句2
Foo b(); //语句3
b.fun(); //语句4
return 0;
}
分析:
调用无参构造函数即编译器默认生成的构造函数时,直接定义一个对象,不能在后面加一个括号,否则就为函数的定义,会产生错误。语句四出错来源于语句三。编译器认为语句三声明了一个返回Foo无参数的函数b,然后编译语句四时发现语法错误。
程序段4:以下不能正确定义二维数组的选项是哪个?
(1)int a[2][2]={{1},{2}};
(2)int a[][2]={1,2,3,4};
(3)int a[2][2]={{1},2,3};
(4)int a[2][]={{1,2},{3,4}};
分析:
对于二维数组,行数可以省略,但列数一定要指定,因为编译器根据列数来进行寻址。声明多维数组只有最靠近数组名的那一维的大小可以省略。
程序段5:代码运行结果是?
#include<iostream>
#include<string>
using namespace std;
class A
{
friend long fun(A s)
{
if (s.x<3) {
return 1;
}
return s.x+fun(A(s.x - 1));
}
public:
A(long a)
{
x = a--;
}
private:
long x;
};
int main()
{
int sum=0;
for( int i=0; i<5; i++) {
sum += fun(A(i));
}
cout<<sum;
}
分析:
x=a--相当于 x=a;a=a--;具体到这题a--对结果不会产生影响。
i | 0 1 2 3 4 |
A(i) | 0 1 2 3 4 |
f(A(i)) | 1 1 1 4 8 |
sum | 1 2 3 7 15 |