找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1104|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题& H, d5 @! j& s) a

- E7 V4 |7 @9 O4 \! oZz
- n9 W3 a( @, f; W  T9 ~0 R
- y' @, d3 M$ U(1)下面程序运行结果是什么:; M* t) x9 k  d6 _0 j) }# |
#include "stdio.h". {' H, J/ N) B, l
class test
/ G% P) [# H- j0 e$ {1 s6 j{
: U' Y: @% W  h# M) Xpublic:
! D$ Y9 s# M3 o4 O" ~test(){}
  s* y9 B6 t9 q; k4 ?void hello(){ printf("hello\n");}$ v0 n, U8 X8 D* g& o9 W/ Q
};
1 o; B: v# I) ]8 ~$ uvoid main()
3 ~$ W8 [8 y3 I  e8 v& P- z{
$ V, M5 y, M& s8 j: ]3 B+ p: N    test* p=new test();2 c1 g- I3 r+ T% w. V
    p=NULL;
9 Y2 l5 V# H! m    p->hello();1 A! C8 Q' e4 l& {# ~' F8 X
}
1 x: e- q/ Q. A: T3 L事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:% k( _- |* n" z# u, ]
#include "stdio.h"' W5 @& r+ P/ m5 G% Q
class test, P3 W8 s. Z8 N8 z
{3 `- X6 h! h! ^2 M
private:
/ t: D5 Q- I- {* j1 t* V  Z: N+ Y. d4 jint i;2 F: s# a# w/ l' N
public:
2 f8 y2 L2 o) b2 m( D0 q# otest(){i=1;}
8 E6 a* Q5 a6 ]# nvoid hello(){printf("%d\n",i);}
& m& m% L* v- X% ?6 K};6 J) A" ~( D" `- k, C) q
void main()0 ]  k3 D5 p: T! J
{
1 I4 A5 Y) I4 Z9 Q& s* K    test* p=new test();
" M( r) _5 a* w( ?; ]( yp=NULL;2 R1 m' i2 p: i7 m0 G. X  t
p->hello();9 ^% D: i# U% d% m) M7 }
}
7 z. E8 @: P& I# @" h1 ~7 A如果将p=NULL注释掉就无误,就会输出1.
+ O  j- V7 P: X; d: ~0 s9 i" l0 p% ^注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
, |& Y& f" a! g# v% {- ~(1)C++的构造以及析构顺序
* ^% A- R* ~4 ~& f7 f9 s$ _#include <iostream>) Z, L! R5 {7 t' y
using namespace std;
- p8 k  X$ s) f/ J  A2 Lclass A
9 K7 l/ A: h- o$ }{
2 `, {  G( ?' R& Hpublic:; e1 K2 U8 R" H9 Q/ G
A(){cout<<"A"<<endl;}
" m" {3 A  B3 s9 P/ ^/ q( ~  }( ]; b~A(){cout<<"~A"<<endl;}; p* j5 k2 G# I* X. v
};
* D+ t2 p! j/ R/ Q' [5 xclass B : public A& J4 L, d- A) z  j) ]
{8 g) B/ o' u- T2 |; d* O
public:
4 S0 H, F' ]. c# T9 C3 p# }6 xB(){cout<<"B"<<endl;}2 t  c% O- c- Y
virtual ~B(){cout<<"~B"<<endl;}8 c; O) C, V- U5 ^
};
3 r. A4 t1 a9 I& d" o, {class C : public B
4 O) v; K0 Q* f$ {$ W; j5 ~0 B{
- c  J$ [4 z$ N' v! ~) Jpublic:
0 T, t# k5 K1 F/ ]3 e* XC(){cout<<"C"<<endl;}
; X* T4 r% u% F* D$ S~C(){cout<<"~C"<<endl;}
) y7 V( d. K# X% n* S& s};* l7 V! S* ?, L) O; ?

' u6 d9 u& y) J7 }9 u+ u( N/ V* ovoid main(); R% b5 H- b" _4 `. T- S
{
$ s6 r9 ]+ a3 ^* c1 z2 h) w0 n
1 Y2 D$ S2 X0 @: J) o- z' f9 yA *a=new A();
' ]" O/ C& x, V0 w9 z( p( PB *b=new B();
8 s' U  {" A: n* L9 e, ]- Z2 e. i  C *c=new C();8 U, w( M$ P& H) e
A *d=new B();
( D2 w4 r% u$ M! p3 X3 @A *e=new C();  ~7 ]! f& q4 q6 x6 s
B *f=new C();9 i- @$ J* H" i% z

, i1 M- q" m' m' |delete a; cout<<"---------------\n";. C( D- e3 ~& F
delete b;   cout<<"---------------\n";( t1 l% d3 N2 Y1 w, H
delete c;   cout<<"---------------\n";: H6 j& A. d- O$ G3 q! n
delete d;   cout<<"---------------\n";& V& Z7 [, a' }9 {6 \# ]( C6 t
delete e;   cout<<"---------------\n";* x& Z) [% s3 B! r- H6 o
delete f;   cout<<"---------------\n";
7 G1 L* p1 e$ e% h% N& a' i7 {}
, y2 V  ?% }8 G$ N$ n; a这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
! l! M3 x% ?& p' l( u: R这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。9 G8 |7 F4 D$ G/ l
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
8 C4 s7 V/ R' r+ K! d(2)面试的诡异题目+ m, ]7 y; C7 M3 `) e
大意就是如果你 test *p=new test[20];. E! O0 p* `/ D! h% O5 S: |5 C  Q. d
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)/ ?2 `/ q% O* ~6 j
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……2 R/ T0 S! ~# N/ C2 F1 S# L
1 k- e4 p- I  O! q3 t8 I2 T4 f
Zz
5 ^' x1 Z6 k6 R" Q% {9 R0 s爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
3 _8 k4 P1 E+ n2 r3 x3 m- p上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
5 x5 t0 W- q, G9 ~3 E爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html9 G( W0 `* M$ ^/ m$ L! N! h
——
8 Q9 V( {4 u/ C; Z; s  L百度2011年实习招聘专题
6 ?% m5 H: u3 }1 P0 ahttp://www.aftjob.com/portal.php?mod=topic&topicid=228 U+ K7 d$ n% Q, C
爱立信2011年实习招聘专题
; d$ P- J( f' W  [http://www.aftjob.com/portal.php?mod=topic&topicid=23: w4 U' ]: h: A. @
新浪微博2011年实习生招聘7 V9 }0 Q# X7 }* G4 R% ~$ m
http://www.aftjob.com/portal.php?mod=topic&topicid=21
  m0 M$ }# r: i$ C阿凡提招聘http://job.aftjob.com/job) V" j, K" V8 K% `
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
, M/ Z% c) W: Z5 X5 P阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum0 h3 C+ S6 N1 m) G  m2 Z
阿凡提职位搜索: L: C0 C) x5 g3 T) B
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-1-15 08:45

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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