找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1151|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
# W1 n& ^; L+ D9 g# n# v+ U4 J9 D& y1 L# l: ^' x0 t
Zz8 v8 e5 m. P) H+ R" T$ M
, F9 n3 F3 r1 C: T2 ]
(1)下面程序运行结果是什么:9 l1 w& ^) `9 j  I0 L
#include "stdio.h"
+ c: B2 X' O5 C6 R, \' c7 q  \class test$ B; ], s0 W; M+ w+ m( ?+ U6 u; Y
{1 f6 Q& z. O: F
public:
+ o4 x9 J3 J1 Z9 J. D% T) n! Vtest(){}# A5 F* h9 [/ [' b
void hello(){ printf("hello\n");}& E8 e$ S, d) D$ G. Q" J$ a- w0 x. [
};$ J% s. Q" a' s( i/ T
void main()/ ]6 D/ R4 s5 c5 t% t. M
{6 b# y/ Q" F9 f0 e
    test* p=new test();
) U2 e/ W5 \: F  \# h  Y" S    p=NULL;
' n7 ^: Y7 B8 l% h    p->hello();
& O. ]7 E; n: }  S  n* }( K}
6 ^5 ~; R7 {, c7 k事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
4 z+ Y; |0 ~' v& s+ k#include "stdio.h"
5 t+ B; C/ B4 G+ r3 k* V9 xclass test
( Z6 r& m0 _* J9 V{
; e. p1 H0 C% H8 E' T! }private:
8 ]% M% r- R$ u! o2 rint i;5 O; ]/ K" n  l- D3 v+ u
public:
1 T; Q1 B) v$ y% ttest(){i=1;}
4 L% w( K3 s, i. c) Fvoid hello(){printf("%d\n",i);}9 M: n6 n9 C$ `5 f; U" L# t# `
};
+ I" G+ k: M! o% k. p* @# Evoid main()+ a/ n# O" Q1 p6 A  Q  s8 O2 j
{
  o" s2 ?8 R' O/ T    test* p=new test();. B# y7 U' c" G8 @5 Q8 o
p=NULL;6 u" U* d  O- T1 ]1 i
p->hello();3 F$ k8 j* d: t: H: p' m# ]# X
}4 I2 b* U+ V' K1 _6 j
如果将p=NULL注释掉就无误,就会输出1.
  D+ k+ e8 s/ h* K0 w  ~注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。, x" _4 ~* ]% j+ L" V* B
(1)C++的构造以及析构顺序; o* `- Y- n5 ]5 g1 t& @
#include <iostream>
5 Z! s7 @# N! P  W  X1 s  gusing namespace std;
8 _$ n% ^' k/ V* t  S' V: v0 n# ~1 A- s1 Gclass A5 Q$ p3 M5 H  O
{
8 B; K8 c, R/ m: M. f* C5 U' k0 A+ Bpublic:
) G( k  a3 r/ w) R. n' HA(){cout<<"A"<<endl;}
  i$ ?9 X  B9 W5 \* |* ^8 E~A(){cout<<"~A"<<endl;}
$ W% ^/ A* a9 O( x  |};* w$ y1 M5 l( i3 j5 N2 W+ U9 N
class B : public A6 o6 l# x. p; Z$ U: O% R
{
! w6 `3 |1 w1 k' }8 kpublic:
8 Y! v# ^& P) V+ e/ R7 O0 OB(){cout<<"B"<<endl;}6 Z8 e# H' ^- }$ U) S  P* r7 e- W
virtual ~B(){cout<<"~B"<<endl;}& S  t1 g1 f  H6 E  p
};' ?+ j3 Q$ S0 Y3 C- J9 @
class C : public B9 z, \* ?; W, R" I5 l5 m0 N0 y9 i
{- j% I# }  ^1 L( G* t* s
public:
' E: O- K7 q) \/ [C(){cout<<"C"<<endl;}
5 B" {) i5 r. [~C(){cout<<"~C"<<endl;}
7 p4 ~" \3 j7 r1 O8 Q" |};' a8 l/ D5 {3 w

2 |' t$ q6 B4 `' L. e" e0 Wvoid main()
! M1 A0 A$ |+ v$ f" b2 M{
6 H  c, M+ C2 U  a% Z0 V' j0 S; b8 r0 X7 m
A *a=new A();- x0 P6 O0 {9 l% x2 }$ @
B *b=new B();, ^( ~$ l; ^+ B- A
  C *c=new C();
( E4 J% o  g0 P) J' xA *d=new B();
+ ^) G# Q; n& W$ r, D' |A *e=new C();
' y7 N4 ?  ^8 [5 \B *f=new C();
5 J% g1 G! q4 [/ Y
( p6 X+ ^# {# H/ B$ _7 i% ddelete a; cout<<"---------------\n";
& n% U% G+ l0 O" k  b8 Cdelete b;   cout<<"---------------\n";1 i0 f$ k/ ~' m4 m. m5 \
delete c;   cout<<"---------------\n";
" T5 j  m' b. m" }5 V" pdelete d;   cout<<"---------------\n";9 k$ P& P8 h  j; q5 n
delete e;   cout<<"---------------\n";( x$ @5 e8 i& S. s2 f( `* K, {
delete f;   cout<<"---------------\n";+ l9 D1 u) b1 J
}6 D( ^) _- e$ ~" e; b9 N" ]
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。8 I) f1 {+ s# U$ e2 ^3 w- H% h* n. k
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。9 Z8 Q1 {3 \) e
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)! r1 b3 s$ _' T5 M& o2 A
(2)面试的诡异题目( m! l- D% U# `% g/ d1 S3 k
大意就是如果你 test *p=new test[20];
$ U  O7 H- G& x1 R( r. s然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)$ m9 x6 y4 {7 [9 w8 F2 G' m" {
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……- g4 a3 U0 [+ M. M! v2 b+ E

; J  a! [5 A* E. KZz
" `) Q* W9 V2 }" J爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html; C1 n1 {$ V* c
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html8 @, _) z% ^& p
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
. Y+ Y  ~( `9 B——
- _# M- R+ {. W百度2011年实习招聘专题" i  _, X3 x6 ~
http://www.aftjob.com/portal.php?mod=topic&topicid=22: I& O! P/ E' t) D8 s
爱立信2011年实习招聘专题
' k' m3 ]/ s$ E" D2 A) \4 Yhttp://www.aftjob.com/portal.php?mod=topic&topicid=237 J) w, C. f) m2 V1 g
新浪微博2011年实习生招聘
5 ^$ k4 l, g) g8 r+ _/ m( ]& [http://www.aftjob.com/portal.php?mod=topic&topicid=21
0 C- y4 U+ Z6 G% S* i/ o! N阿凡提招聘http://job.aftjob.com/job  P+ k8 Q- \9 M! n/ N9 l
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
( V3 l+ Q' D0 X1 I. Q阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum; R% C6 r1 b- C$ B3 i. [+ d
阿凡提职位搜索
: w$ V- ~3 c  P- H) k* H$ y——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-3-2 08:13

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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