知识点(6)

设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?

C c;
void main()
{
    A*pa=new A();
    B b;
    static D d;
    delete pa;
}

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

这道题主要考察的知识点是 :全局变量,静态局部变量,局部变量空间的堆分配和栈分配
其中全局变量和静态局部变量时从 静态存储区中划分的空间,
二者的区别在于作用域的不同,全局变量作用域大于静态局部变量(只用于声明它的函数中),
而之所以是先释放 D 在释放 C的原因是, 程序中首先调用的是 C的构造函数,然后调用的是 D 的构造函数,析构函数的调用与构造函数的调用顺序刚好相反。
局部变量A 是通过 new 从系统的堆空间中分配的,程序运行结束之后,系统是不会自动回收分配给它的空间的,需要程序员手动调用 delete 来释放。
局部变量 B 对象的空间来自于系统的栈空间,在该方法执行结束就会由系统自动通过调用析构方法将其空间释放。
之所以是 先 A  后 B 是因为,B 是在函数执行到 结尾 "}" 的时候才调用析构函数, 而语句 delete a ; 位于函数结尾 "}" 之前。

能够从输入流中提取指定长度的字节序列的函数是( )。
正确答案: C
get
getline
read
cin
在这里插入图片描述
1.
在创建派生类对象,构造函数的执行顺序()
正确答案: A
基类构造函数,派生类对象成员构造函数,派生类本身的构造函数
派生类本身的构造函数,基类构造函数,对象成员构造函数
基类构造函数,派生类本身的构造函数,派生类对象成员构造函数
对象成员构造函数,基类构造函数,派生类本身的构造函数

父类的静态域-子类的静态域 父类的非静态域-父类的构造函数 子类的非静态域-子类的构造函数 规律就是 父类先于子类 静态的先于非静态的
其中静态域包含静态代码块与静态方法,这个谁在前面,则先执行谁。
非静态域同理

设完全二叉树的第5层上有10个叶子结点,则二叉树最少有()个结点
正确答案: D
20
32
50
25

深度为k的二叉树最多有2^k-1个结点,本题要求结点数最少,那么第五层应该全为叶子结点,则前四层的结点数为2^4-1=15,因此总结点数最少为10+15=25

在C语言中,下列哪一个函数用于在其它函数中安全地终止main函数?
正确答案: B
return(expr);
exit(expr);
abort();
atexit(expr);

abort()函数用于不正常地终止一个正在执行的程序。
exit()函数用于正常终止程序。
atexit()函数可以把一些函数注册为退出函数(exit function)。
return 0;     一般0代表的是正常结束
return -1;    -1代表非正常结束
return ;       void 返回是空,void返回值可以什么也不写,可以写returnreturn NULL;   如果数据类型是指针类型,那我们一般成功的时候返回相应的地址,失败的时候返回NULL
关键在于,return它不是一个函数

下列表达式正确的是:
正确答案: C
9++
(x+y)++
c+++c+++c++
++(a-b–)

++--是单目运算符,只需要一个操作数,操作数只能是变量,不能是常量或表达式
A:9是常量
B:x+ y是一个表达式
C:正确
D:右值是一个表达式
前缀与后缀的区别:
1、当其单独使用时候,a++++a是等价的 、a----a也是等价的
2、若将其放入表达式中使用,其本质区别:
b = ++a;   前缀形式   a = a + 1; b = a;(先计算,再进行其他运算)
b = a++ ; 后缀形式    b = a; a = a++; (先运算,再进行自身计算)

一个C++项目中有3个.h文件,5个.cpp文件,编译之后生成的.obj文件的数量是:
正确答案: B
3
5
8
视编译器而定

一个.cpp文件会生成一个.obj文件,.h文件不会生成.obj文件

若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该二叉树的先序遍历序列中的最后一个结点。 ( )
正确答案: B
正确
错误

若一个结点是某二叉树的前序遍历序列中的最后一个结点,则它也一定是这颗二叉树的中序遍历序列中的最后一个结点------此命题是为假.
例:
A
/
B
其前序遍历序列为A-B,
中序遍历序列为B-A

对于根元素为最小值的二叉堆,下面说法正确的是
正确答案: A D
删除最小元素的复杂度是o(logn)
插入新元素的复杂度是o(1)
合并两个堆的复杂度是o(logn)
查询最小元素的复杂度是o(1)

A.删除最小元素,即要调整堆,复杂度为O(logn)
B.插入新元素,要和堆中元素进行比较,寻找插入位置,复杂度为O(logn)
C.合并两个堆,即堆1的每个元素插入堆2,由B可得,复杂度为O(nlogn)
D.查询最小元素,小顶堆的最小元素即为堆顶,复杂度为O(1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值