C++ -- 每日选择题 -- Day2

第一题

1. 下面代码中sizeof(A)结果为()

#pragma pack(2)
class A
{
    int i;
    union U
    {
        char str[13];
        int i;
    }u;
    void func() {};
    typedef char* cp;
    enum
    {
        red,
        green,
        blue
    }color;
};

A:20

B:21

C:22

D:24

答案及解析 C

本题考查的是如何计算类所占空间大小,union(联合体)和enum(枚举类型)的空间计算;

相关博客:C/C++内存对齐规则(结构体、联合体、类)-CSDN博客

首先我们来梳理一下:

1. 只算成员变量的大小,不算成员函数;

2. typedef只是对类型重定义,没有开空间,也不用算;

3. 需要算的有

int i;

union;

enum;

第一步:算int i;我们首先要看对齐数是多少

上面的#pragma pack(2)是把默认对齐数设定为2

对齐数 = 默认对齐数和成员本身大小的较小值

所以int i的对齐数为2,但是每个都是从偏移量0的位置开始,然后占据自身大小的字节;

第二步:计算union的大小;

算union的大小,有两个原则

1. union联合体的大小至少是最大成员的大小

2. 联合体的大小不是最大对齐数的整数倍的时候,要扩大到最大对齐数的整数倍;

所以union中的char数组的对齐数为1,int的对齐数为2;

最后union所占空间为14

第三步:计算enum枚举类型的大小,记住枚举类型大小就是4字节,所以跟默认对齐数比较之后,对齐数为2;

第二题

2. 使用重载函数编程序的目的是()

A:使用相同的函数名调用功能相似的函数

B:共享程序代码

C:提高程序的运行速度

D:节省存储空间

答案及解析 A

A:正确:重载函数写出来的目的就是为了完成不同类型却相同的功能;比如你要实现个加法函数,肯定会有很多类型,我们就需要函数重载;

B:错误:不可以共享代码

C:错误:都是调用函数,说白了代码都一样,不会提高速度

D:错误:不会节省空间

第三题

3. 下列运算符重载函数中,属于友元函数的是()

A:Base operator+(Base);

B:Base operator--(Base);

C:Base operator&&(Base, Base);

D:Base operator++(Base,int);

答案及解析 BCD

在正常的成员函数中,会有一个隐藏的this指针,作为成员函数的第一个参数,但是有的时候,我们是不需要this指针作为函数的参数的;这个时候友元函数就出现了;

A:+运算符,是需要两个操作数的,A选项显式地给了一个Base对象,然后有一个隐藏的this指针;满足+运算符的语法要求;

B:前置--运算符,只需要一个操作数,所以B的函数必须是友元函数才能实现;

C:&&运算符,需要两个操作数,B选项中显式地传了两个参数作为操作数,所以也不需要this指针了;

D:后置++运算符,需要一个操作数,后置++在函数参数这里是有个int来区分的,带int的就是后置,不带的就是前置;所以这里显式传了一个参数作为操作数,不需要this,就为友元;

第四题

4. 下面关于C++缺省参数描述错误的是( ) 【多选】

A.缺省参数是声明或定义函数时为函数的参数指定一个默认值.

B.在调用有缺省参数的函数时,如果没有指定实参则采用该默认值,否则使用指定的实参

C.C和C++都支持缺省参数

D.全缺省就是参数全部给缺省值,半缺省就是缺省一半的值

答案及解析 C D

A:正确,缺省参数就是在声明或者定义的时候给函数参数一个缺省值;

B:正确,缺省参数就是为了我们没有给指定的实参时,给形参提供缺省值;

C:错误,C不支持,缺省参数是C++的;

D:错误,全缺省是所有参数都有缺省值,半缺省是有参数有缺省值,有的没有

第五题

5. 以下不是double compare(int,int)的重载函数的是( )

A.int compare(double,double)

B.double compare(double,double)

C.double compare(double,int)

D.int compare(int,int)

答案及解析 D

重载函数:参数的类型不同,参数个数不同,跟返回值无关;

A、B、C为重载函数

D不是,因为参数类型相同,个数相同;

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

实习秋招必胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值