牛客网C++专项题目整理(2)

1.参加位运算的数据可以是任何类型的数据。请问这句话的说法是正确的吗?

答案:错误

位运算符主要用于整型数据(如intunsigned intlongunsigned long等)和字符型数据(如charunsigned char),因为这些类型的数据在内存中以二进制形式直接存储,位运算符可以直接对它们的二进制位进行操作。

如果尝试对非整型数据(如浮点数、字符串或对象等)使用位运算符,将会导致编译错误。他们的内部表示与整形不同。

2.一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围为_______

1

2

3

4

5

int tally=0;//全局变量

  void ThreadProc(){

     for(int i=1;i<=50;i++)

          tally+=1;

}

A[50,100]

B[100.100]

C[1275,2550]

D[2550,2550]

答案:A

在两个线程并发的过程中,a线程对tally加1后,还没有更新tally在内存中的值,线程b读取tally值,执行加1,更新tally为1,然后a线程重新读取tally值,这样交替运行,最终为50 最大值的情况: a线程对tally加到50后,更新tally在内存中的值为50,然后线程b读取tally值,再执行加50运算,结果为100;

如果对total+=1加上互斥锁,才会固定为100。

3.下面函数的输出结果是()

1

2

3

4

void func() {

    int k = 1^(1 << 31 >> 31);

    printf("%d\n", k);

}

A0

B-1

C-2

D1

答案: C

首先0000 0000 0000 0000 0000 0000 0000 0001左移31位得

1000 0000 0000 0000 0000 0000 0000 0000 (-2147483648)

与1异或 得1111 1111 1111 1111 1111 1111 1111 1110

补码转原码,-1并将除符号位的位取反 1000 0000 0000 0000 0000 0000 0000 0010(-2)

4.下列程序的运行结果是0.请为横线处选择合适的程序()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#include <iostream>

#include <cmath>

using namespace std;

class Base {

public:

    Base(int X = 0);

    Base(Base &p);

    static void GetC(Base a1, Base a2) {

        cout << a2.X - a1.X;

    }

private:

    int X;

};

Base::Base(int XX) {

    X = XX;

}

Base::Base(Base &p) {

    X = p.X;

}

int main() {

    Base a1(5);

    Base a2(a1);

    __________ = Base::GetC;

    (*q)(a1, a2);

    return 0;

}

Avoid (Base::*q)(Base,Base)

Bvoid *q(Base,Base)

Cvoid *q()

Dvoid (*q)(Base,Base)

答案 D 静态成员函数不用加作用域非静态成员函数要加作用域

5. 下列关于运算符重载的叙述中,正确的是(        )

A通过运算符重载,可以定义新的运算符

B有的运算符只能作为成员函数重载

C若重载运算符+,则相应的运算符函数名是+

D重载二元运算符时,必须声明两个形参

答案 B 

一般情况下,单目运算符最好重载为类的成员函数,双目运算符最好重载为类的友元函数。

关于选项 A,通过运算符重载不能创建全新的运算符符号,而只能改变已有的运算符的行为。

关于选项 B,有些运算符可以作为成员函数进行重载,而有些则不能。具体要根据运算符的性质和所需的操作数类型来决定。

关于选项 C,重载运算符时,相应的运算符函数名并不一定与运算符本身的符号相同,而是通过运算符函数的命名来定义。

关于选项 D,如果用成员函数重载,只写一个参数的话,默认就是调用者为第一个参数。
作者:陈让然
链接:牛客网公司真题_免费模拟题库_企业面试|笔试真题
来源:牛客网

6.以下说法不正确的是?

A类成员的定义必须放在类定义体内部

B类的一个成员只能具有一种访问控制属性

C在类中,不作特别说明的数据成员均为私有类型

D构造函数和析构函数是特殊的成员函数,因此不允许重载

E类成员的定义必须是成员变量在前、成员函数在后

答案 :ADE

A:类成员的声明要放在类定义体内部,而定义可以在外部

D:  构造函数可以重载,析构函数不可以

E: 没有顺序要求

7 阅读C语言代码输出()

1

2

3

4

5

6

7

8

int main()

{

    int arr[]={1,2,3,4,5,6,7};

    int *p=arr;

    *(p++)+=89;

    printf("%d,%d\n",*p,*(++p));

    return 0;

}

A3 3

B2 2

C2 3

D3 2

答案: A

prinf从右到左编译,从左到右输出,*p已经是++p之后的了

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值