找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1167|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题% t$ [+ O0 T) u" z$ D8 |

' j4 Z* G) R4 u& C$ j* v& ZZz+ D: m2 T6 _! l) w5 ^. s
- I% [* N- ]+ P1 U6 Z9 _, b9 x
(1)下面程序运行结果是什么:$ H0 i. x; U+ y! H; j$ |4 H+ e. M# j
#include "stdio.h"
& x" N- P7 D+ Z: k: Eclass test$ k6 Y) y6 _3 u1 \. o. M$ J( o
{5 ?7 e; [2 ]& i$ \
public:
6 ^, o* d3 h/ h( C+ V( L& Z% A( gtest(){}; o! @# [* @) J/ v3 K: [* z0 ?# l
void hello(){ printf("hello\n");}
- Y/ u8 X# h  ]/ g$ A' r9 ]};
" L# n8 R. _$ e. u9 Q1 _% @8 l7 Xvoid main()& ~, ]. ]  z( u$ y1 M( @
{. d" ]# v  _5 I4 R% v+ \1 [
    test* p=new test();: V; x# j" n$ D# M
    p=NULL;
9 K" A, ^; O4 i9 T6 q    p->hello();
9 z. E& X. F) |}$ `# S9 c# K! f1 d$ p
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
, {" S; ]# ~! r9 u1 D#include "stdio.h"
6 c+ _) V' L0 }' k7 B4 ]* j. l* B& m4 Fclass test" X6 J& E" y6 d- D; S6 I6 k  W
{8 N9 k  {) s- l5 ~+ Y9 }
private:2 H+ u  ^' W. x9 W  _
int i;
: B) O9 I! d9 B6 N  u, }+ s4 opublic:. o2 \7 f1 t7 X7 W+ X& ^
test(){i=1;}0 D) }: X) {9 f% \2 Z
void hello(){printf("%d\n",i);}' M9 n. x( O" K& \
};
& U1 N# x) R9 T6 v. h) W3 {' u. Zvoid main()" t* {( J" H* `3 i2 Q5 c
{8 ], @6 w" ]6 |
    test* p=new test();7 {! Z& x$ i" {  N) C7 p8 g1 Q
p=NULL;- P! _# D3 k# Y/ M! g  x. u9 Y4 k
p->hello();
$ {) G. h/ g: b. N1 A! @, M$ `}+ H+ A* e' L) A9 i' g
如果将p=NULL注释掉就无误,就会输出1.
  n+ v2 {* {+ i3 M注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。* c. |( g) u6 I" \
(1)C++的构造以及析构顺序
2 T# I9 F7 l% ?2 B#include <iostream>
" _& h# t. K$ J! ^using namespace std;0 L' z# A5 K4 o2 ?/ ]
class A. g2 _- S: ~! ]. C: B6 v/ k8 Q
{
7 w( V8 p& c% q7 Y! U0 j% d/ E+ Lpublic:4 @" U' w( W. x8 Z
A(){cout<<"A"<<endl;}/ e) \' [3 x! {7 j$ V
~A(){cout<<"~A"<<endl;}, v' E, O- |* w1 E$ U* q/ z: l
};
7 C' F7 T: Y' P! \# v, Hclass B : public A
; V+ l8 C4 ~: E& O! O: s{
, e5 H  E) y( p+ Kpublic:% m1 D& X" {  n5 U- q' M
B(){cout<<"B"<<endl;}* D1 J/ J8 T2 M
virtual ~B(){cout<<"~B"<<endl;}
1 ^& f& h7 `, |};  ?* Y0 C8 N" @6 \7 V5 V
class C : public B
6 o" G0 w0 h7 T  `- e8 b, A{
1 Q$ y. l$ R* S; Lpublic:. ~5 \- e4 t* J8 e
C(){cout<<"C"<<endl;}
  T" {4 ]- `. S7 H5 r~C(){cout<<"~C"<<endl;}
# W% T  \" I6 r) Q4 @};  W# B9 a& j( V. V

$ G1 N; U/ A/ Z# |void main()6 ]  g7 d1 i- u, |6 S" ?' q- h
{
7 O* T( t. V7 O7 R2 M2 }  m3 m/ Q! E4 I9 R! A- C0 X; p5 `
A *a=new A();# f6 f7 p, z2 ?  R; D  A5 @6 n
B *b=new B();- j; \- G8 {2 f6 C2 c
  C *c=new C();
5 y- l  \: V8 [0 tA *d=new B();6 w1 {* R7 {9 T- r2 A
A *e=new C();
6 c% J2 w. [4 y  W+ T6 iB *f=new C();$ b' y3 r7 p% W1 _; F4 B
' w5 b8 c+ O# S2 s% o5 k" k5 {( U
delete a; cout<<"---------------\n";. S+ |; l; Y: ]
delete b;   cout<<"---------------\n";
0 Q8 W* S5 e& }delete c;   cout<<"---------------\n";- `( \5 |2 B" b+ r$ ]
delete d;   cout<<"---------------\n";
( T4 P( q3 J" |0 S5 d1 @delete e;   cout<<"---------------\n";; k9 \+ D* n5 F) ?
delete f;   cout<<"---------------\n";0 c7 }: n& d) M4 B, T# c; l$ E0 j' S
}8 o+ h6 ]: c% f$ U: J
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
" V% p) ^+ d$ y. k+ U这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。6 R" @+ f0 i# ^% `. t' k, p
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
6 q2 J7 u1 W8 ]/ W(2)面试的诡异题目$ L; H) O4 W( c8 [; u( p! ?  C4 W, b
大意就是如果你 test *p=new test[20];+ U1 k- G2 c8 S2 l
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
8 V; V* u5 r# B8 o  o% j答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……) [( r7 I! u# l0 l1 g' T% f

7 k- I# g% F7 ?. r* b" IZz) B9 {, b1 v+ e" {
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
( s" }$ j2 F+ w4 t8 \& _上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
6 S/ E+ \. T5 W# E  S爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
9 s9 A2 j, K  ]——
4 j: Z& w4 P' P0 X! E7 Y百度2011年实习招聘专题* ^6 D/ H+ d; \$ S" L# \
http://www.aftjob.com/portal.php?mod=topic&topicid=222 g( a3 Y" g; ]
爱立信2011年实习招聘专题
( k, Z0 ], I  s' X0 H# R% Thttp://www.aftjob.com/portal.php?mod=topic&topicid=23
& c" p: y* n; d9 k新浪微博2011年实习生招聘
  l' X# R* S$ ~. K1 l4 d, Uhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
1 b4 I8 m' z' b( Z: |! I阿凡提招聘http://job.aftjob.com/job6 F# _* X6 X$ \
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
1 q7 X6 V0 J# H0 o- R阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
9 y3 f/ o+ r* x( K  I阿凡提职位搜索
, |# n; K" p3 Q5 g( ^) E& U——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2026-4-6 10:57

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表