找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1236|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
: U& @% @6 A# b' \* b2 z; L% u9 e/ L9 G$ y7 n
Zz9 P+ [% W2 u  ^) k) l/ |) w/ f/ |/ J

8 K. B& T1 J" P! N) p7 ^( s(1)下面程序运行结果是什么:1 b6 F$ r$ I0 I7 g/ g6 F: y3 l
#include "stdio.h"- M6 ^' M: g6 ^! D& t: V
class test) A! X' U" R- E
{
; ]/ [9 K$ Z/ N0 p' m2 ]public:. g; Q) A( k+ Q; z9 ~# ^! r6 h5 @, A' u
test(){}: ?5 r* l: X& B/ P  G
void hello(){ printf("hello\n");}5 |8 q: ]. @" N# \6 X" A
};
; I7 {2 I( z0 x# x( w1 Uvoid main()
! @' Z/ d" I" i: Y7 q" S, R{4 ]& U+ q9 Y7 T3 I6 W) m
    test* p=new test();" q7 a( D$ U9 q; ]% ^& n9 K* Y
    p=NULL;
) ]7 d. R6 \+ }& D% ~0 Y6 |3 y& y    p->hello();
" b) M# n8 a5 e; ~0 N: L6 n4 ^' [7 S}
6 `+ f: {& `0 B; ^) `事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:% f2 z7 H9 D* R0 @
#include "stdio.h"
0 [+ k: R9 j5 ?/ }) Y' Oclass test
. Q: a$ a2 o6 q{2 f1 ~' e; O& A% t4 K! s4 V
private:
  D7 o  |0 J; h4 [% J, kint i;. M$ A. _% D1 B! r
public:
. M- T. A# Y; ]% S3 p1 mtest(){i=1;}
3 q# L- x% E5 ?) kvoid hello(){printf("%d\n",i);}
" f8 O6 X2 V4 B- q2 H};
/ ]) S0 H8 e- Kvoid main()- x. P! F9 D. Z! @: j: t- G
{+ l  B$ ?4 ^1 O% S- r" G8 q
    test* p=new test();: T8 c- `& t/ B; g8 u$ B
p=NULL;2 z: Q. b: l7 B; {; T3 I) X
p->hello();2 }0 s/ A8 V, n! z  m
}
! |8 f5 }5 O. E" @0 }如果将p=NULL注释掉就无误,就会输出1.6 G0 i) `9 M' {5 U  V/ ], N
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
1 u' _: B: _. g# s+ I9 S(1)C++的构造以及析构顺序6 C6 Y+ e' ~- t" [8 [2 U
#include <iostream>, X! D" \! Y  w* P+ k0 _8 J: K
using namespace std;' W: N5 F0 M2 Y( p
class A0 _& F2 t0 e4 A5 C7 W
{
, X3 z% x" E" m$ Y2 H3 N- Mpublic:
& Q9 \( c( o' {A(){cout<<"A"<<endl;}: B' _+ E1 h( h1 Y
~A(){cout<<"~A"<<endl;}6 R$ _" V  o% ^  c5 i; |
};
/ T$ C3 g* N6 Uclass B : public A5 h: z2 d  g5 E) v" ~
{" [* i! ~7 Z* F+ D, g
public:! ^* l, ]" g9 d5 `& @4 R
B(){cout<<"B"<<endl;}
0 s0 [" W/ b$ E" O4 Mvirtual ~B(){cout<<"~B"<<endl;}
/ \. ~# S5 P& ?% h8 m' V};( f% I# s" h$ o; \7 o0 }4 x
class C : public B4 C2 ?# v$ P( ]  j2 }' D3 _
{
* G8 S% Y* X/ C  H. wpublic:
- L1 E$ \0 {- V' N5 r2 SC(){cout<<"C"<<endl;}. O9 M7 D, L; y- q
~C(){cout<<"~C"<<endl;}
6 l. O$ }: A9 Q, S5 s' U/ q};
& G) ]9 @4 q* N" h5 q
4 P" d; V. |( j* Dvoid main()+ ~  s$ A! A) `# ^) X; j  ?
{' I* S# ?0 B$ y+ v/ D* Q, e" k

' x" h5 V* V( n$ dA *a=new A();
7 N4 ]" C* A+ M2 W& nB *b=new B();' \* m6 ]! ]% H/ {! F& Z. x
  C *c=new C();
: @7 _. ~9 L, H, d+ ^8 J) eA *d=new B();
( \8 h" T7 \* x. S. BA *e=new C();4 _; W& ^* T: N) U6 l! `" y
B *f=new C();
: B' |7 d1 S3 I9 y) A  X- \7 r& g( W) y0 W/ T7 U$ j% I* G6 O
delete a; cout<<"---------------\n";' b; }2 H$ l5 a4 A+ ~- p
delete b;   cout<<"---------------\n";
; S+ |. i& ^) odelete c;   cout<<"---------------\n";  k. i2 S" N& [) K' {
delete d;   cout<<"---------------\n";) W, i; K' ]4 X9 l5 p, {& T
delete e;   cout<<"---------------\n";
! ], {: [8 p" L4 g* Z* t) Mdelete f;   cout<<"---------------\n";
" g8 x7 z( i& @3 ]5 f5 U% q}
2 g* K. m$ N4 D; B6 l. w这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。9 `) s" e1 T7 X2 q4 D% Z; K# Y
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。8 T9 G7 O4 i- j! p  @, V
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)2 P# R/ F7 @1 B0 v7 n/ s' S
(2)面试的诡异题目5 G; \/ |# {: ?) m
大意就是如果你 test *p=new test[20];6 _% ?) L% u# x1 Z
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
! |' d4 I8 A9 s& q) ^" c6 J* ^答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……, R8 a( B: c# ]) q% H) g0 |8 u/ D
- d/ }: o# ^, d9 I, B7 R, {. p) o: U
Zz
% E7 Y% S' V4 g( @爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
( C( g( k5 H& S% q+ \+ _上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html. m+ C8 v. b' `4 ~. g
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
  a% a4 ]& H( }9 N4 b  g——
6 V+ @0 {( o- \4 G% ~; M6 u百度2011年实习招聘专题& Q& q7 ^  K% v; G- K
http://www.aftjob.com/portal.php?mod=topic&topicid=22- s' z' r  }9 I" y- Z
爱立信2011年实习招聘专题. E% ~) Z! A' x. X0 u
http://www.aftjob.com/portal.php?mod=topic&topicid=23
3 K# j, S' Q9 [' e- s. }# ]. O新浪微博2011年实习生招聘; X; t/ F% P# L9 w) h
http://www.aftjob.com/portal.php?mod=topic&topicid=21
) U  G+ f, O& M8 p) J( Z5 `: d阿凡提招聘http://job.aftjob.com/job4 U6 \5 \# o' p
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
% _8 s+ a9 Q. s# M( Z/ e4 L' i2 d阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum6 A' d1 }3 y. Q) p" k/ o  x
阿凡提职位搜索! |1 t  k1 s5 J1 P- K; T
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-18 14:33

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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