找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1323|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题2 Z+ j0 i& g- G, D1 Q. y) m( [

" ]8 K& r- J: V( ~Zz7 L8 S1 z  [+ I1 |  O

; q" U6 h8 u: ^; s6 I6 ](1)下面程序运行结果是什么:% D, \$ u: q& u4 _
#include "stdio.h"& D' a) A# Y- w) A
class test9 r1 ?' _. F9 U3 @, }* g
{
% y) j# ~; n0 p+ R* Opublic:( g% K- l+ U* z4 k4 t
test(){}
; o, D/ W6 H& s# V" T, |7 _void hello(){ printf("hello\n");}
2 U, S2 W1 a4 {1 S: W};% h8 {% y! O$ l- {& w' m! g% g( a
void main()3 C4 r, ^# p: ]0 n! o  m* h9 y( q1 b
{' X& }% u0 v$ i7 J( R: Q
    test* p=new test();2 {2 b) k  ?, Y3 ?
    p=NULL;
/ t  m4 L! I' S/ I    p->hello();  P. \5 |5 o! U
}
& [6 k$ e1 n, J& w/ H: ^! _  g事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:& u) j- ~; \6 k: h/ ^4 }9 z
#include "stdio.h"+ H8 g& S* C* u2 A
class test" @; @/ h; T4 D8 M" J9 b0 g" }
{4 i" j2 g1 R% r  G# X! i
private:
, B$ J5 g! Z9 N" [! B  ]int i;
( |2 P5 F# J8 p1 Cpublic:9 S: v; o" W- G$ @+ Z3 r
test(){i=1;}6 v& t& c, C- M7 a( h8 q) P2 t/ A
void hello(){printf("%d\n",i);}6 L2 E3 j! n1 e
};" \' e5 Z0 P, e7 Q* T% C* z; N2 ~
void main()
0 Q0 W( I3 o9 ^' j8 g' _; v{
7 U/ Y; W7 ^% N& c' ?+ I    test* p=new test();* k: ]5 H8 K9 m# V. G! a' ]! Q
p=NULL;* }: }. t$ `, [
p->hello();2 e7 d2 V- f; K- ~( ]0 g0 n) U
}
- |& n& }- J. Q2 C/ e+ J如果将p=NULL注释掉就无误,就会输出1.% ~% j: v1 ^  Z8 _6 G6 {
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
2 D6 f! M" t; L! ?# q( m(1)C++的构造以及析构顺序
% a' b( h; O) j( c  R$ Q#include <iostream>
8 A5 \2 h% Q% Y0 d) jusing namespace std;6 m$ m- `: R8 m% }" K" [) D2 D, @
class A
) B: H$ o! }% @4 B  v/ M' [{& @0 j# Y9 [  I0 a! \- w- q4 G
public:5 X2 O( P# m/ H( Q3 ?' M2 U
A(){cout<<"A"<<endl;}
% ?7 c* A2 a$ t! M! J- I$ v~A(){cout<<"~A"<<endl;}
! {, O+ i; u3 m" W* J9 a};
9 A6 v- m+ w# X( r( t+ x$ Lclass B : public A
$ w9 _# w( Y! e5 M6 T{
* y! e" {- e' H) h; \public:  E6 s8 o. }; i4 ^. _  g$ q
B(){cout<<"B"<<endl;}8 _! \% D7 J: l0 p0 p+ C+ [* O* A
virtual ~B(){cout<<"~B"<<endl;}
8 g. ^& `' O' s' f2 U9 _) v};/ F, S& g: }/ t; ?4 E8 K
class C : public B
( ~) ?& O# e& m! T{
% F# }4 `, `, C" G+ ?public:8 Z7 [, M1 l  i
C(){cout<<"C"<<endl;}
" d/ @! g- ?0 `6 |, v: r6 S5 z~C(){cout<<"~C"<<endl;}
2 h$ S# N. _6 ^  Q};+ h3 u9 U/ N4 n  H: |
# _! B( ^! t( K, C8 W7 ?
void main()* G4 M2 `! g: g# T+ ^  n5 ?
{5 r) S9 b  a: @
0 J; Z+ Z$ ?# o8 d/ _' c; X" n
A *a=new A();) F, Q; v9 O1 t7 }$ I7 i
B *b=new B();, |: |) ^4 A+ R) z- v
  C *c=new C();
. d8 l! b8 G* u0 J1 xA *d=new B();
- M, s% ~7 j$ P- c6 S) _A *e=new C();( b0 p) _/ X( d" E
B *f=new C();* Z4 r2 J6 c6 _
) q; s" v) q; v2 m$ I3 u
delete a; cout<<"---------------\n";
1 e' P* C  ~/ ~& U" Kdelete b;   cout<<"---------------\n";+ F- Q6 V8 W, u0 x
delete c;   cout<<"---------------\n";
' Q* y8 a0 u) l, ?$ d! ?delete d;   cout<<"---------------\n";
0 z3 E; G- S! o9 e* p6 S! Sdelete e;   cout<<"---------------\n";
* t3 Y8 h5 f3 r, V$ Xdelete f;   cout<<"---------------\n";
5 a, E/ D+ d, J}/ F4 C5 U- O% h: a# c/ k! X# r; f4 t0 ]
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。" C8 d* }' I8 t3 [6 ?' R
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
% \3 W1 a4 |% M! a+ m; R其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)4 r  o, q  [8 ]4 k8 f4 G& w) [6 e
(2)面试的诡异题目
. _! B/ `4 p; F+ P+ f大意就是如果你 test *p=new test[20];  u6 V! T: v+ B6 j4 M( I4 N
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……), T$ s2 F/ D4 T( h1 c3 ^! t1 S# |
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
$ r# I/ n5 u" _1 f6 M8 {
0 z. v. p+ m0 K5 eZz
' P2 Z: `) G5 E2 i& x8 w爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
( b& _$ H5 M3 h8 p, C上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
( S; B; S6 Q6 j  i爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html% V6 B  i. p% w3 I
——
1 E) `) x5 i. v9 l: |- E5 |+ ~百度2011年实习招聘专题
9 y2 [! ]! T- s. Q1 ehttp://www.aftjob.com/portal.php?mod=topic&topicid=223 ]9 e6 e; c* w) N
爱立信2011年实习招聘专题2 W' x, U) N0 K* q! q" u/ R
http://www.aftjob.com/portal.php?mod=topic&topicid=23# ?  A1 {, S- q1 k1 K& M
新浪微博2011年实习生招聘5 g- A8 k! t& w
http://www.aftjob.com/portal.php?mod=topic&topicid=21
% D) E1 w) P$ u$ [$ m: R: e阿凡提招聘http://job.aftjob.com/job3 P% W" a8 m5 V! D# J5 x- f$ T4 M8 T1 M/ @
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag$ I$ \' z+ X% Z
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum; ?3 j! }: T1 C/ y* s" w
阿凡提职位搜索* A% r/ w8 U+ q! r& g9 @, J
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-31 18:33

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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