牛客C++专项训练5.20 构造函数+模板+malloc

1.以下叙述中正确的是(    )

正确答案: B D   你的答案: A B D

A在C++中数据封装是通过各种类型来实现的  C++通过类来实现封装性,把数据和与这些数据有关的操作封装在一个类中

B在C++中,数据封装可以由struct关键字提供   C++中虽然struct的默认封装类型为public,但是你也可以设置为private的形式

C数据封装就是使用结构类型将数据代码连接在一起  封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念(并不是单纯将数据代码连接起来,是数据和操作数据的函数.),这样能避免受到外界的干扰和误用,从而确保了安全。

D数据封装以后,仍然可以不通过使用函数就能直接存取数据  static成员采用类名可直接访问   若成员变量是public,可采用点运算符直接访问对象成员。

 

2.在C++里,同一个模板的声明和定义是不能在不同文件中分别放置的,否则会报编译错误。为了解决这个问题,可以采取以下哪些办法:

正确答案: A B C   你的答案: B C

A模板的声明和定义都放在一个.h文件中。

B模板的声明和定义可以分别放在.h和.cpp文件中,在使用的地方,引用定义該模板的cpp文件。

C使用export使模板的声明实现分离。

D以上说法都不对

组织模板代码有三种方式
1.包含模型(常规写法 将实现写在头文件中)
2.显式实例化(实现写在cpp文件中,使用template class语法进行显式实例化)
3.分离模型(使用C++ export关键字声明导出)

第三种方式理论最优,但是实际从C++标准提出之后主流编译器没有支持过,并且在最新的C++11标准中已经废除此特性,export关键字保留待用。

 

3.关于下列操作哪个复杂度为O(1)?

正确答案: C D   你的答案: B C

A  vector中插入元素的最差情况(动态数组)

B  set中查找元素              set由平衡二叉树实现,因此时间复杂度O(logn)

C  hash_map中查找元素

D  deque尾部删除元素

 

4.关于构造函数的描述下列说法正确的是

正确答案: B D   你的答案: C D

A构造函数不能被重载

B构造函数不能被覆盖             构造函数不能继承,只能调用

C一个构造函数可以返回一个私有的或一个对象的引用          构造函数是没有返回值的

D构造函数代码执行顺序时是从最远的祖先类到当前的类层级

 

5.下列关于内存分配和释放的函数及其区别描述正确的有?

正确答案: C D   你的答案: A B C

A  C++语言的标准内存分配函数:malloc,calloc,realloc,free等。  前面的是C中已有的,而new/delete则是C++特有的操作符

B  C中为new/delete函数。

C  malloc和calloc的区别是1块与n块的区别和初始化

D  realloc调用形式为(类型*)realloc(*ptr,size):将ptr内存大小增大到size。

malloc的函数原型:void* malloc (size_t size);申请1*size大小的空间
calloc的函数原型:void* calloc (size_t num, size_t size);申请num * size大小的空间
即1块 和 n块

void *realloc(void *ptr,size_t size)
扩容原有内存的大小。ptr表示扩容前的指针,是之前用malloc或者calloc申请的地址。或ptr等于nullptr,等同于malloc。size表示扩容后的内存大小。

 

6.最好通过引用变量来调用静态的方法,这句话是否正确?

正确答案: B   你的答案: A

A正确

B错误               静态方法中没有对象数据,传引用获取数据的话不常用   可以直接使用类名调用

上一篇:读书笔记--堆、栈和数据段


下一篇:QT 重写控件 圆形头像框