找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1256|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题6 W* ^# U$ w+ x3 i- R  z

5 q" o+ {6 ^2 z; N- K, i( N3 DZz5 }5 E, l( o7 S& _2 Y2 b
! g0 Q" L( c) A* Q* L9 C$ _
(1)下面程序运行结果是什么:
4 p4 q) a* ~' c( r; {5 }#include "stdio.h"
" y8 o; _( k" Tclass test4 z  I+ i  F8 U  o9 i) l2 |
{" F5 |6 o6 o) l$ I
public:
9 {( z0 x: E: |1 stest(){}2 K" p6 ?8 x( M0 ^+ N
void hello(){ printf("hello\n");}7 }' k9 ?* Q9 l4 i8 v9 K
};
+ z* @1 \" z8 ^4 @) ^5 m/ ^5 R! evoid main()- @& Z0 B  ?6 @& g5 i6 o) E
{- j! v- A! e$ `6 Y7 z: V
    test* p=new test();
7 b- r+ o8 c+ q& _8 ^    p=NULL;, M  b% x3 l# n
    p->hello();8 w, g4 o' v- V3 ^: B8 g3 s
}/ L( q. t3 z3 v6 X4 _# b
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
; _8 l, \- S* [, g, ?& s: H% j5 g3 }% L6 Y#include "stdio.h"
- k  \2 l9 z2 ~/ Uclass test
! S3 o% ~$ g1 H4 C5 Z{
* _: o- i  E/ c# W; o& X+ f( Hprivate:6 a9 p8 u3 l+ O: u
int i;
5 y# x, @5 _( B- tpublic:9 T) p6 Z& h# K* P4 N
test(){i=1;}
$ A8 R% @) g  P, [. O  T) {void hello(){printf("%d\n",i);}
* c4 Z: T- m' q0 W8 x};9 V6 {- J+ L( v% u5 E3 v5 p
void main()/ ~& s5 f7 S0 i. q
{, k4 x" d% @( B# J) K
    test* p=new test();
) M1 L3 ^+ z) u! i  u& L* m5 W8 Vp=NULL;
5 I, C% q* _1 Zp->hello();
) B( z, K# ^) ?# f! z- ~0 F}) O4 H( o: |/ h4 S6 t
如果将p=NULL注释掉就无误,就会输出1.- t* C( i  F/ o+ k. I
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。, s% @3 e" E$ M' K. u# o
(1)C++的构造以及析构顺序
% Q9 ^5 r8 V0 q4 s2 p0 q#include <iostream>
9 V/ P( P' U1 _- Zusing namespace std;
1 ~. L" Y. Q( S# u+ \# u4 Y5 Tclass A
( A7 X* [3 }+ e' G* M& A5 V( A{. O; _( }6 s8 T; W. r" A! K
public:
0 N; [7 O' h* v5 K8 p! H9 xA(){cout<<"A"<<endl;}
# m4 S) y* |- Z) U~A(){cout<<"~A"<<endl;}
) r6 W1 k& q/ b1 x};# A; }; {1 N5 Q2 D7 x
class B : public A& N" ?' G* Z% \$ T8 O9 D) }
{& C: {( Y2 X8 k6 z+ C
public:: d3 A# S: |: g  u
B(){cout<<"B"<<endl;}+ v; c8 q" W1 ?- }3 L8 h
virtual ~B(){cout<<"~B"<<endl;}2 `" W  Y7 S5 X! R- R
};
- X- G3 S" e) I+ f0 ?% nclass C : public B  U( Y2 Q" z6 J
{
& Q5 L6 k2 Q) C& lpublic:) d+ g0 _' q& A* N/ G; b
C(){cout<<"C"<<endl;}
9 v: h8 X0 s$ r6 J, P) F- Q9 P. o~C(){cout<<"~C"<<endl;}
2 V4 v2 f- m. L/ X. |- i- F) X: X};
0 W% o9 I3 A: t  J6 B* Q9 ?4 ~# r9 ]; H0 b( C; N& C! K' I
void main()
. O' m* m9 o( ^# T{! t* p, L& v$ K3 r9 B/ w7 `

+ G" H: X  k  ~A *a=new A();
, Z& s+ H7 Q* cB *b=new B();
" ]0 f( p( i0 s: Z- ?6 `  C *c=new C();- H; }, g$ g& k( K) s6 F
A *d=new B();
( k- e" b1 p. y$ @% B& pA *e=new C();
" ?  x# y# ~. r; CB *f=new C();- v; X4 `* a& ?
3 m0 E# g( i7 y% S  O
delete a; cout<<"---------------\n";; k8 C; W) e  i
delete b;   cout<<"---------------\n";4 ]' E  J. z' W; W+ P+ D: d
delete c;   cout<<"---------------\n";* ?5 j8 N4 F9 _5 z
delete d;   cout<<"---------------\n";* Q9 s' e" H, g; r/ N8 I$ U
delete e;   cout<<"---------------\n";# }9 T; y6 S" K$ w& }
delete f;   cout<<"---------------\n";* u' C9 g; U1 O3 _) ]$ ~- T
}9 G0 Y& @* `( ~! p) F& N
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。* {" O! [9 @/ l- K* ]1 [5 y0 Z" L
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
) q6 Z, t3 L8 J其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
" L' I/ @. M& L8 d, ^(2)面试的诡异题目- W1 H6 [4 E8 t8 r  A5 n
大意就是如果你 test *p=new test[20];
) L. l# t5 ^  U4 K7 `) F$ w然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)2 Q! q$ W: D2 h4 ], Q6 ^* Y% }
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……. G0 r$ b* H3 g  _" u
) m- j, K3 C1 P
Zz" C  W6 i! I9 f6 H& ^$ F
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html1 r0 t4 [' x3 t- r/ X
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
# Y2 s, a3 y2 I! g4 f6 N3 a% F爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html% |$ ~! N5 Y1 H! Z: p
——1 \7 L) x& P7 B5 r
百度2011年实习招聘专题0 X1 N" c, ~% v
http://www.aftjob.com/portal.php?mod=topic&topicid=22* X, Z  W+ A7 F: L7 \7 {; G: C
爱立信2011年实习招聘专题, y* {6 G& Y% |4 g: O
http://www.aftjob.com/portal.php?mod=topic&topicid=23* Q- o  H, s' `& M
新浪微博2011年实习生招聘
2 M, ^( ?  f' N( Uhttp://www.aftjob.com/portal.php?mod=topic&topicid=21* x% |! }) _+ T& D8 B/ r$ a
阿凡提招聘http://job.aftjob.com/job. t/ D. \( \7 S( m
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag) t# \$ w+ ]& I6 f# ^  E2 V
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
1 e) r0 V0 I" N2 \9 T% x阿凡提职位搜索
& t& G9 s& l% g# I- q. q5 A5 ~# K——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-28 12:35

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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