【01】华勤技术股份有限公司——华勤C++笔试,题目记录及解析
- 30个先择题
- 1.已知,int m=10,在下列表示引用的方法中正确的是( )
- 2 .用户自定义标识符
- 3.—个深度为4的平衡二叉树,其节点数最少有()个?
- 7. 有以下定义
- 8.已知枚举类型声明语句为:
- 9.关于析构函数描述正确的是()
- 14、下面哪种类型转换可以用作基类指针到派生类指针?
- 15.C++中,下面设置的默认参数正确的是()
- 17 new出来的内存无需释放,超出作用于系统会自动释放
- 29.如果指针变量p进行自加运算(即执行p++)后的地址偏移值为1,则其数据类型为 char.
- 30.包含虚函数的类不能生成相应的对象
30个先择题
1.已知,int m=10,在下列表示引用的方法中正确的是( )
C
int &x=m;
int &y=10;
int &x;
float &t=&m;
2 .用户自定义标识符
①只能字母或下划线开头;
②后面跟字母、数字、或 _(下划线);
③区分大小写;
3.—个深度为4的平衡二叉树,其节点数最少有()个?
D
4
5
6
7
最少7个,最多是满二叉树15个;
7. 有以下定义
class MyClass {
public:MyClass() { cout << 1; };
};
则执行语句MyClass a, b[2],*p[2];
后,程序的输出结果是()
111
MyClass a, b[1], * p[2];
输出 11
MyClass a, b[5], * p[2];
输出 111111
8.已知枚举类型声明语句为:
enum COLOR{
WHITE,
YELLOW,
GREEN=5,
RED,
BLACK=10};
则下列说法中错误的是:
A,枚举类型的第一个常量默认值是0;
A. 枚举常量YELLOW的值为1
B. 枚举常量RED的值为6
C. 枚举常量BLACK的值刀10
D. 枚举常量WHITE的值为1
使用枚举类型时应该注意以下几点:
枚举类型的第一个常量默认值是0;
枚举类型常量的值允许彼此相同;
虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。
9.关于析构函数描述正确的是()
B
析构函数可以重载 ---》不可以重载
析构函数可以是虚函数
析构函数名与类同名 ---》前面的~也是函数名的一部分
析构函数的范围值类型为void ---》无返回类型,不能说返回值是void类型
12.请选出下面代码的输出结果:
5 1 11
class A {
public:static int value;
};int value = 5;
int A::value;int main() {int value = 10; A::value++; value++;std::cout <<::value << " " << A :: value << " " << value << std::endl;return 0;
}
::value //全局valueA :: value //class A作用域下valuevalue //局部变量value
14、下面哪种类型转换可以用作基类指针到派生类指针?
dynamic_cast
static_cast
const_cast
dynamic_cast
以上都不行
C++ static_cast、dynamic_cast、const_cast和reinterpret_cast(四种类型转换运算符)
继承中类型转换的两种方式:
1.向上转型
将子类对象转换成父类类型,例如:
- Pet pet=new Dog();
- 此类型转换为自动转换;
- 因为子类的功能比父类更加强大,相当于让一个能力强的对象去做一件简单的事情,因此可以自动转换完成;
2.向下转型
将父类对象转换为子类类型,例如:
- Pet pet=new Pet();
- Dog dog=(Dog)pet;
- 此类型转换为强制转换;
- 因为反之,父类的功能要弱于子类,因此需要强制转换;
15.C++中,下面设置的默认参数正确的是()
D
void fun(int x=O,int y,int z)
short fun(int x=O,int y=0,int z)
float fun(int x=O,int y,int z=O)
double fun(int x,int y=O,int z=0)
C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。 实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。
下面的写法是正确的:
void func(int a, int b=10, int c=20){ }
void func(int a, int b, int c=20){ }
但这样写不可以:
void func(int a, int b=10, int c=20, int d){ }
void func(int a, int b=10, int c, int d=20){ }
17 new出来的内存无需释放,超出作用于系统会自动释放
错
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。局部变量,参数变量存放在栈中,当离开作用范围后,分配的内存在作用范围外会被系统自动回收。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。new出来的内存空间存放在堆中,不受作用域管理,不会被系统自动回收,只有在使用delete删除或者整个程序结束后才会释放内存。
29.如果指针变量p进行自加运算(即执行p++)后的地址偏移值为1,则其数据类型为 char.
对
#include <stdio.h>int main() {char a[5] = { 'a','b','c' };char* p = a;printf("%p\n",p);p++;printf("%p\n\n", p);int b[5] = { 'a','b','c' };int* q = b;printf("%p\n", q);q++;printf("%p\n", q);return 0;
}
可以看到p++后,地址加一后;
char型地址加1,int型地址加4;
指针标记本身所占大小,不管是char还是int 在64位系统中都是8字节,32位系统则是4字节;
printf("sizeof(p) = %d\n", sizeof(p));
printf("sizeof(q) = %d\n", sizeof(q));
30.包含虚函数的类不能生成相应的对象
对
这得分清楚含有纯虚函数的类与虚基类是两个不同的概念。
(1)含有纯虚函数的类是不能创建对象
(2)虚基类是指在继承的时候,通过虚继承的方式,继承的基类。
含有纯虚函数的类在继承的时候,可以不加virtual关键字,因此可以不是虚基类
只要在继承的时候,加了virtual关键字,都是虚基类,这与基类中是否有纯虚函数无关