一些程序段分析(2)

程序段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--对结果不会产生影响。

i0 1 2 3 4
A(i)0 1 2 3 4
f(A(i))1 1 1 4 8
sum1 2 3 7 15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值