2014

来源:互联网 发布:如何更改淘宝店铺名 编辑:程序博客网 时间:2024/04/29 18:48

转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11482103
温馨提示:客观题和主观题得分都要超过一定标准,才能获得面试资格,如果一项得分很高,而另外一项得分很低,可能无法获得面试资格。
一、单选题(20题,每题2分)
1
、有变量int i= 0; int a = i++; int b=++a; int c = a+b; 请问表达式 a?b:c 的值是()
A
、0             B、1             C2             D3
           1
112
2
、32位环境下,int*p=new int[10];请问sizeof(p)的值为()
A、             B、10             C、40              D、8

           32位指针4字节

3、有语句char str[] = "abcde";请问表达式sizeof(str)的值是()    

A1              B4               C5                D、6

后面还有\0

5、请问以下说法,哪个是正确的()
A
、每个类都有一个无参数的构造函数
B
、每个类都有一个拷贝构造函数
C、每个类能有多个构造函数
D
、每个类能有多个析构函数

6
、用class关键字定义的类,其成员默认的访问属性为()
A、private         B、protected      C、public           D、无定义


7、类的成员有三种访问属性,分别是public、protected、private,子类能够访问的成员是()
A
、都能访问
B、public和protected
C
、public和private
D
、protected和private


8
、请问对一个排好序的数组进行查找,时间复杂度为()
A
、O(n)            B、O(lgn)        C、O(nlgn)          D、O(1)

       二分查找

10、看以下代码:
A *pa = new A[10];

delete pa;
则类A的构造函数和析构函数分别执行了几次()
A
、1 1 B、10 10 C、1 10 D、10  1
答案:D,析构一次

 

11class A { public: ~A(); };

A::~A() {printf("delete A "); }

class B :publicA

 { public: ~B(); };

 B::~B() { printf("delete B "); }
请问执行以下代码
A *pa = new B();

delete pa;
输出的串是()
A
、delete A B、delete B C、delete B delete A D、delete A delete B
答案:A,这里就提到析构函数为虚函数的问题了:http://www.cplusplus.me/1108.html

北京一搜索挖掘公司:析构函数为什么要用虚函数

作用:一句话,避免内存泄漏!

用处:在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员.如果想要用基类对非继承成员进行操作,则要把基类的这个函数定义为虚函数.

先看一段虚析构函数代码:

01

#include<iostream>

02

using namespace std;

 

03

class Base

04

{

 

05

public:

06

virtual ~Base()

 

07

{

08

cout<<"~Base"<<endl;

 

09

}

10

};

 

11

 

12

class Derived:public Base

 

13

{

14

public:

 

15

virtual ~Derived()

16

{

 

17

cout<<"~Derived"<<endl;

18

}

 

19

};

20

 

 

21

int main()

22

{

 

23

Base *pb = new Derived;

24

delete pb;

 

25

return 0;

26

}

输出结果是:
~Derived
~Base
如果不是析构函数不是虚函数,输出结果是:
~Base

深入了解如下:如果不需要基类对派生类及对象进行操作,则不能定义虚函数,因为这样会增加内存开销.当类里面有定义虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间.所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数.

12、文件长度是一个大于0的整数,用变量unsigned file_length;来表示,把文件分成块,每块的长度也是一个大于0的整数,用变量unsigned block_length;来表示,则文件被分成的块数为()
A
、file_length/block_length                        B、file_length/block_length+1        
C
、(file_length+block_length-1)/block_length    D((file_length-1)/block_length+1 

13、整数int i = 0xFE78DA45; int k = 0xAC3189B2;i^k的值为()
A、0x524953f7         B0xAC308800          C0xFE79DBF7           D0X0000001

^异或运算,取F^A1111^1010 = 0101,等于5,所以A

14、class parent

{

public:

         virtualvoid output();

};

void parent::output()

{

         printf("parent!");

}

 

class son : public parent

{

public:

         virtualvoid output();

};

void son::output()

{

         printf("son!");

}

则以下程序段:
son s;

::memset(&s , 0, sizeof(s));
parent& p = s;
p.output();
执行结果是()
A
、parent!       B、son!       C、son!parent!           D、没有输出结果,程序运行出错

15、函数的局部变量所需存储空间,是在哪里分配的()
A
、进程的数据段 B、进程的栈上 C、进程的堆上 D、以上都可以

局部变量保存在栈里
栈和堆的区别是
栈是系统根据变量大小自动分配空间的
堆是你用new,malloc等手动分配空间的

http://bbs.csdn.net/topics/80165653

局部变量保存在栈内存区;
栈内存区的地址是连续的,由系统控制速度较快而
堆内存区的地址是不连续的,它是系统将空闲内存块链接起来的链表,
用户用new/malloc请求分配时,找到第一个满足大小要求的块从链表中删除此节点,
然后分给用户,没有栈内存速度快,但是很灵活。

http://www.xuebuyuan.com/1601721.html

操作系统给程序运行的内存非了4个区域:
1 代码区:顾名思义就是存放运行的代码的
2 全局数据区: 存放全局数据和静态数据以及常量.
3 栈区 函数调用时的返回地址,参数压栈,局部变量,返回数据等都存放在栈区.
4 堆区,存放程序动态分配的内存(new,malloc等函数分配的)
栈内存是由系统自己分配和释放的,而堆内存要由程序员自己全全控制的,否则会出现内存泄露

16、以下STL的容器存放的数据,哪个肯定是排好序的()
A
、vector        B、deque         C、list             D、map

18、以下关于头文件,说法正确的是()
A
、#include<filename.h>,编译器寻找头文件时,会从当前编译的源文件所在的目录去找
B
、#include“filename.h”,编译器寻找头文件时,会从通过编译选项指定的目录去找
C
、多个源文件同时用到的全局整数变量,它的声明和定义都放在头文件中,是好的编程习惯
D
、在大型项目开发中,把所有自定义的数据类型、全局变量、函数声明都放在一个头文件中,各个源文件都
只需要包含这个头文件即可,省去了要写很多#include语句的麻烦,是好的编程习惯。
答案:C,解释:

对于#include<filename.h>,编译器先从标准库路径开始搜索filename.h,然后从本地目录搜索,使得系统文件调用较快。

而对于#include“filename.h”,编译器先从用户的工作路径开始搜索 filename.h,后去寻找系统路径,使得自定义文件较快。

19、某棵完全二叉树上有699个节点,则该二叉树的叶子节点数为()
A
、349            B、350              C188               D187
n0=n2+1;

n=n0+n1+n2=n0+n1+n0-1=699 
由于完全二叉树中度为1的节点只有0个或1个两种情况,所以,将0或1带入上面公式,整理后得:  n0=(n+1)/2或者n0=n/2; 看看n是否能被2整除,能则用n0=n/2。否则用n0=(n+1)/2 既叶子节点为n0=(n+1)/2=350

20、在一个指向字符串的指针char *p_str,要把字符串中第4个字符的值改为'a',正确的做法是()
A
、p_str[3]='a'            B、*( p_str +3)='a'       Cp_str[4]='a'       D*( p_str +4)='a'

0 0
原创粉丝点击