找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1359|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
8 a% F# w+ M% g+ P# j' W6 L* |
( ]' z) C! y9 Q) W- U: AZz. r1 ^9 Y, _  F

& ?9 b5 C4 e; H/ E(1)下面程序运行结果是什么:
8 z  x& K& A, j6 r- p& i#include "stdio.h"& G1 c, h8 y* V& z/ M: W  H
class test
; p% z, \: U0 A{- I$ |9 X- B/ |! _
public:! X. U9 ?8 u' R8 Z
test(){}
3 e  j. a  v0 Xvoid hello(){ printf("hello\n");}
5 z- T$ v& u9 w: J' Q+ n+ q};
- k. |4 p9 F0 d' [7 [void main()
+ G5 l' S( y, U{
# Z* F+ T0 r0 x! h1 s0 m9 l    test* p=new test();
' p' v0 o' g* @! X7 c2 k4 G" `; N    p=NULL;* W& m* V0 W" w5 e- D3 z
    p->hello();/ r: B$ E  A+ @3 _' H2 k2 N  v; X9 Q
}" @! q+ v3 h8 P5 ]  \: b+ }
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:$ C8 @3 d% m% S! \
#include "stdio.h"
# x" {. n9 @+ T% nclass test  z* a& A0 ?( P; w, ]% P/ y
{. @$ t6 j7 A8 S
private:
+ u% R  X6 p0 Vint i;" [0 y, F3 O6 L( }! s2 Q
public:
5 W. V5 F) {1 [test(){i=1;}4 d1 X1 z. t$ o0 r* Z% P  b
void hello(){printf("%d\n",i);}8 M+ o$ Q- V0 o# F4 Q
};
; E$ g% z+ L" j! i; g" p* dvoid main()
$ L* \0 D8 t  {& g$ v) y{
% E2 e# {1 v2 @, c* [    test* p=new test();6 w* ?' M$ X7 S: z; @2 _# U
p=NULL;
" a" K! O6 y# R8 l' }3 f7 w* y  O# wp->hello();7 Q7 w! i7 K  w/ E
}) n) f; p/ o. }5 T& j! [3 o
如果将p=NULL注释掉就无误,就会输出1./ b. v& e8 S; L% q! _
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。6 H) k5 `; ^! B8 ]1 O) |4 l
(1)C++的构造以及析构顺序, g/ E$ X+ Q, K$ Z* x! J/ d
#include <iostream>
5 G7 o! o: P5 o7 a  Q* Z( l+ H. K8 y" Fusing namespace std;& k; c# S8 i" q# d* O5 w6 Q  u% z
class A% g: R) T' M( x& t1 j  k, ~
{+ S" i: T" t1 k+ w/ E' \7 g
public:
+ l  f9 V9 d/ q( q9 ?A(){cout<<"A"<<endl;}
. l/ U0 `& U- s1 A~A(){cout<<"~A"<<endl;}
3 F% c! I5 I* h; [$ Z6 d6 {: Z# h};
" v, A  b: ~: `- fclass B : public A
- J- @7 a$ {; {! U3 I  N+ d, i{4 H/ w3 T- ^- F% Q: f* u8 c* U
public:6 x3 c( N/ x1 T  F
B(){cout<<"B"<<endl;}" w) ^9 ^& @6 s7 _; {/ Q! ?
virtual ~B(){cout<<"~B"<<endl;}
' S# Q# o" ]7 M) P& \};
5 ]6 z! f9 M. n* ?class C : public B, {4 Z* T& @. i( r& k7 d9 n$ Y" _
{0 a7 D2 A: h4 ?' d1 m
public:
4 F9 i" a- E& R) KC(){cout<<"C"<<endl;}
3 ]) L4 B, F4 L~C(){cout<<"~C"<<endl;}
5 ?2 v. i4 j7 E& y; y};
, e# @8 y$ G: \* z: {+ @$ Y( F- t" [4 }, z9 l
void main()
8 ~: C9 w, A8 k+ Y' D{" L* U4 `" Y0 Y# N$ Y- K4 D: m7 s

4 \2 f* A% X+ Y0 `5 CA *a=new A();, u- w. I1 \# e
B *b=new B();
9 Q7 U: q: T1 s2 C; C/ A  C *c=new C();
3 Y( O7 U" I( |: {  hA *d=new B();- y9 ?! V" i* o( ]/ V3 v, C
A *e=new C();& J9 K. _9 ]+ G/ l7 G$ s2 Q
B *f=new C();- H: s' m$ s: O2 l2 [

; e8 @( b$ C5 T+ I0 v# n5 Mdelete a; cout<<"---------------\n";
2 W4 c# ?+ H) ndelete b;   cout<<"---------------\n";
" G/ c8 v8 B1 c- _  p. pdelete c;   cout<<"---------------\n";) ^# s& A: w4 f+ Y8 |. U% ?
delete d;   cout<<"---------------\n";* [0 m4 c5 `4 H3 L, \& L" N2 g
delete e;   cout<<"---------------\n";5 f1 C2 p$ n5 q% o& b/ d
delete f;   cout<<"---------------\n";
0 V5 g4 ~  H/ U6 d! y: D- v  B% K}' y6 g; G! Q( Y2 ~
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。0 |* g7 ?4 S" z/ ]  ~9 f* w( z
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。' j2 h( Q$ i' f& d3 r. m  v
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
  s6 e# n% i4 c6 `; N' r7 q(2)面试的诡异题目2 s. i% F- T) f8 Z
大意就是如果你 test *p=new test[20];
6 G' A- m: b3 }" k6 d: [然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
* A: H: }7 L, |3 j9 D1 }+ }答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
2 |1 W' S1 r: ?" ]/ e- ~4 F  d5 \9 R6 r) M6 v9 ]
Zz' Z8 w! G/ ]5 g# D
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html( \# u" R8 [* p* C
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
- i1 h5 Z( a8 T爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
+ b3 q% [1 X& j: a——
% _% A8 s8 M4 n' U+ x2 `百度2011年实习招聘专题* b( ^" I+ t( h
http://www.aftjob.com/portal.php?mod=topic&topicid=22/ O0 l. a2 `0 M* I5 Z# d; X& B
爱立信2011年实习招聘专题
: h* X6 @* F2 n! s5 ^http://www.aftjob.com/portal.php?mod=topic&topicid=23  t, W9 j6 P) {" _
新浪微博2011年实习生招聘' m1 X2 d0 H( e" B( M" N7 i
http://www.aftjob.com/portal.php?mod=topic&topicid=218 f, r/ r! \4 U. t
阿凡提招聘http://job.aftjob.com/job
9 z# |' |2 J( V4 i: t2 h阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
% T# {8 M) \7 v, ?1 ~, ?3 A% R阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum* K) v( q9 l5 K/ O3 D3 a* K2 X$ P
阿凡提职位搜索7 Q, T6 \; e' ]
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-19 12:51

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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