151-160

注:以下问题的部分解析并非全部是自己原创,只是为了便于以后复习,直接粘贴总结的答案,主要来源是七月在线中的解析部分。https://www.julyedu.com/question/selectAnalyze/kp_id/4/cate/C

1、 已知有如下的变量定义,那么第二行的表达式的值是多少( )

int main(void)
{
int x = 3 , y = 4 , z = 5;
!(x + y) + z-1 && y + z/2;
return 0;
}
A 6
B 2
C 0
D 1

解释:选D

&&运算符的优先级要低于算术运算符,故上式相当于
( !(x + y) + z-1 )&& (y + z/2);
运算符/的优先级要大于+的优先级,故:
(x+y) = 7
!(7) = 0
0+z-1 = 5
z/2 = 2
y+2 = 6
&&两边均为真 故该表达式值为1

2、 下列运算符函数中,肯定不属于类Value的成员函数是( )

A Value operator/(Value);
B Value operator-(Value,Value);
C Value operator+(Value);
D Value operator*(int);

解释:选B

上述四个选项中/ + *均为二元运算符,- 可能是一元(负号),也可能是二元(减法)。
由于这些重载函数属于类,故他们都有一个默认的参数this指针,其形参列表应该比实际的参数个数少1,对于 - ,其参数个数只能是0或者1。

3、 以下关于函数模板和模板函数的描述中,错误的是( )

A 函数模板是定义重载函数的一种工具
B 模板函数在编译时不生成可执行代码
C 函数模板是一组函数的样板
D 模板函数是函数模板的一个实例

解释:选B

函数模板是一个独立于类型的函数,可作为一种产生函数的特定版本。而模板函数是函数模板经实例化后生成的具体函数。对于一个具体函数,编译时需要生成可执行代码,故B选项错误。
函数模板的形式
template <class 类型参数1, class类型参数2, …>
返回值类型 模板名(形参表)
{
函数体
}
这里的class也可以用typename替代。
编译器由模板自动生成代码,编译器由模板自动生成函数的过程叫模板的实例化,由模板实例化而得到的函数称为模板函数。

4、 在64位系统上,定义的变量int *a[2][3]占多少字节( )

A 8
B 16
C 32
D 48

解释:选D

a是一个指针数组,其中有2*3个元素,每个元素均为一个指针,在64为系统中,指针占8个字节,故该变量共占48个字节。

5、下面的程序的输出结果为( )

#include < stdio.h >
void main(void)
{
a = 1;
unsigned int b = 10;
int ret1 = (a - b > 0);

unsigned short c = 1;
unsigned short d = 10;
int ret2 = (c - d > 0);

printf(“ret1 = %d ; ret2 = %d\n”,ret1, ret2);

}
A ret1 = 0 ; ret2 = 0
B ret1 = 0 ; ret2 = 1
C ret1 = 1 ; ret2 = 0
D ret1 = 1 ; ret2 = 1

解释:选C

-9 对应正数的原码为: 00000000 00000000 00000000 00001001
\quad\quad\quad\quad\quad 反码为: 11111111 11111111 11111111 11110110
\quad\quad\quad\quad\quad 补码为: 11111111 11111111 11111111 11110111
故unsigned -9 = 4294967287>0为真,ret1=1。
在计算c-d时,由于0为int类型,c和d被隐式转换为int类型,c-d=-9< 0,因此ret2=0.

6、 以下程序段的输出结果是( )

#include< iostream >
using namespace std;
class A
{
public:
A(int i )
{
cout << "A ";
}
~A() { }
};
class B
{
public:
B(int j )
{
cout << "B ";
}
~B() { }
};
class C
{
public:
C(int k )
{
cout << "C ";
}
~C() { cout << "~C "; }
};

class D : public C
{
public:
D(int i , int j , int k ) : a(i) , b(j) , C(k)
{
cout << "D ";
}
~D() { cout << "~D "; }
private:
B b;
A a;
};

int main()
{
C *pc = new D(1 , 2 , 3);
delete pc;
return 0;
}
A A B C D ~D
B A B C D ~C
C C B A D ~D
D C B A D ~C

解释:选D

C *pc = new D(1 , 2 , 3); 父类指向子类,当创建类D的对象时,首先调用D的构造函数,在D的构造函数初始化列表中。首先调用C的构造函数,输出C,然后用参数列表中的1,2初始化a,b,注意这里的初始化顺序之于变量a,b声明时的顺序相关,故先初始化b,调用对应的构造函数,输出B,然后是a, 输出A,之后执行D构造函数的函数体,输出D,最后由于这里的析构函数不是虚函数,故只调用父类C的析构函数,输出~C。

7、关于运算符重载,下列说法正确的是( )

A 重载时,运算符的结合性可以改变
B 重载时,运算符的优先级可以改变
C 重载时,运算符的功能可以改变
D 重载时,运算符的操作数个数可以改变

解释:选C

在C++中,运算符的重载指的是运算符与类结合,是对已有的运算符重新进行定义,产生新的含义。C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。
重载之后运算符的优先级和结合性都不会改变,并且不能改变原运算符的操作对象个数,但是重载可以改变运算符的功能。

8、下面哪一个不是由标准模板库提供的合法的哈希表( )

A hash_multiset
B hash_table
C hash_set
D hash_multimap
E hash_map

解释:选B

标准模板库(Standard Template Library, STL)提供了一系列组件操作,主要包括容器、迭代器、基本算法、函数对象,内存分配器和配接器六个部分。选项A hash_multiset允许集合中存在相同的元素。选项B hash_table是不合法的。选项C hash_set允许数据元素与键值是同一个,但是不能存入相同的元素。选项D hash_multimap允许相同的键值对存在。选项E hash_map在存储键值对时,一个键只能与一个元素相互关联。

9、 int x = 2 , y = 3 , z = 4; 则表达式!x+y>z的值为( )

A 1
B FALSE
C TRUE
D 0

解释:选D

在C++中,单目运算符’!’的优先级>算术运算符’+’>关系运算符’>’。因此!x=0, !x+y=3, 3>4的结果为0。

10、 下面的程序段的输出结果是( )

void main()
{
char *x = “abcd”;
x += 2;
cout << x;
}
A 指针变量x的地址
B 字符c的地址
C c
D cd

解释:选D

"abcd"是字符串常量,指针x指向字符串常量的首地址。x += 2;使指针指向第2个字符(字符从0开始编号),因此输出结果为cd。
cout << *x; 将会只输出c。

发布了31 篇原创文章 · 获赞 4 · 访问量 2451

猜你喜欢

转载自blog.csdn.net/weixin_44412429/article/details/95735503