找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1377|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题1 d3 y' Q2 a. ?. y' _

" v; O6 u" ^9 i; ^3 {8 V7 w/ PZz: L4 A% \& l- F) y( w$ `7 ^
0 G8 v- z0 u. l
(1)下面程序运行结果是什么:# u( ^0 x. b3 W$ P2 B
#include "stdio.h"
. d- |- K& z0 Z: g, tclass test' H% N% ^) Z8 q8 D
{
. ]# ~5 P5 k. g" ^4 fpublic:1 s: k1 ^, _1 c. S0 [) g
test(){}
. k& U0 o6 A0 ^# H; yvoid hello(){ printf("hello\n");}; z; q# Q$ o6 j, k" S+ y7 T9 P, Q
};/ O0 M7 H! q! T$ N1 Z; E. w3 {
void main(); b' d- P+ ^8 _( l
{# [; O( ?' q" ?5 j( ~
    test* p=new test();/ g& f, S( W# Y
    p=NULL;5 Q7 l0 a; m4 j6 d
    p->hello();
5 q) _  `" o& ~, }$ T, N% X}1 L( N3 ~9 i! _2 j
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
( k, c  D, ~( e, k- r2 t/ f#include "stdio.h"
) a$ F, ]! h* B7 d: D( Kclass test
9 y' M0 G" X0 S$ B+ A9 V{
: q8 F7 w# A5 B' D& Vprivate:& W$ x! D) @) e+ B( f0 `, G
int i;7 W5 P' ]( S7 T7 n
public:
; K, I, `' h4 V' l1 Ztest(){i=1;}2 G! h0 D$ S6 t0 H
void hello(){printf("%d\n",i);}
7 f0 U" M7 ^! [4 Q};
: Q& _$ T0 W6 m, a* J) D2 X. _void main()
, R$ n5 b- L1 ~, j: f; ]5 R( z{
' q+ O0 @; }' ^$ [1 c# r$ ^% T    test* p=new test();( C8 z1 ~; }) B) ]
p=NULL;& Q, m2 B- y; `# d* M
p->hello();% b% n2 F/ l* j
}
7 H* {, ~+ X1 T! M如果将p=NULL注释掉就无误,就会输出1.* J+ c' R7 I" O6 ?% s
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
% y- g7 g; I2 M1 W4 o# S0 U(1)C++的构造以及析构顺序8 x; K! g3 b4 `* {
#include <iostream>
% y: N. I3 T  h$ i- K: a9 b4 ~using namespace std;4 |! t% x: j7 o; Q7 R
class A
* }6 f6 |% X9 V# q7 I{
. @3 O! l" z4 Y) S4 m! G; l5 {/ Jpublic:/ J+ W4 o" L9 G' Y9 a, t* `
A(){cout<<"A"<<endl;}" m+ J7 I  ?9 d
~A(){cout<<"~A"<<endl;}' y1 n) J" H1 ~7 n1 F  t8 B
};! A8 Q. d$ w( m+ @
class B : public A- M2 m6 B$ {3 {5 h1 `5 |  w6 T
{
9 Q: N& k% T8 o0 X+ Zpublic:, f$ f6 T5 J: ?
B(){cout<<"B"<<endl;}4 _5 Y( u$ |5 u8 W
virtual ~B(){cout<<"~B"<<endl;}4 ^  {; y1 E- L: [
};
2 ?$ p" Q( T' P. w. g6 E- g7 |class C : public B. v( z% H: A+ \: K& S
{2 x4 N4 q0 z/ A) T
public:
' ~+ e9 j9 ~, @" k& RC(){cout<<"C"<<endl;}
: f. Y1 h  l: [3 m) I~C(){cout<<"~C"<<endl;}
4 }- G* M  F3 O  M! n+ \2 z0 K' h};' R7 @' h2 [  }' A/ f0 U

6 n0 U8 M' Q+ S$ v# r0 hvoid main()
8 Z7 p# u4 |2 p1 K{
3 L+ t: X2 y, I' V. x" I6 S' _
/ Y. ?: Z) V' dA *a=new A();
! i: T- Z3 `( a# mB *b=new B();- l0 T  f6 r9 a  O- G  \
  C *c=new C();2 x, J* Z! i- Z! w
A *d=new B();: F. f- O$ i$ s
A *e=new C();' H% q* p' o* Z" C+ l3 ]
B *f=new C();8 @% z4 J- A: J( c1 V" t8 J- y: Q

5 B% w6 h- {: T+ p& m. T( cdelete a; cout<<"---------------\n";
" L1 L: I  c1 e* b! adelete b;   cout<<"---------------\n";
2 X) C4 S( v% D" J' N9 Y. A: q- Udelete c;   cout<<"---------------\n";
: U: @$ v1 @9 n1 ~' Hdelete d;   cout<<"---------------\n";
3 [+ R9 \& N$ B5 jdelete e;   cout<<"---------------\n";
! g2 o! j8 v- W! g9 _$ b( F4 g( ?delete f;   cout<<"---------------\n";! E5 i" e; O* ^! ?
}3 n: \6 D  [1 o* \! N* u
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
8 I1 N, n, L7 f8 R这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。  r( A/ f4 p2 O* c
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)7 `" l; g$ p+ o  \9 g& M
(2)面试的诡异题目
$ E1 \# t. v6 i' o1 F大意就是如果你 test *p=new test[20];
4 D5 {- g. d' [3 `" t* F; C8 j4 D然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)* L, ^, y. ?0 ~# R! I
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……4 r+ \8 E% `" f* R

1 H) d$ v- i6 a1 C& l$ ]" JZz
, O2 D; [( h+ ]  o爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html0 {" y7 [' j, d8 C3 ^5 e6 e
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
" |4 l$ F7 U# }7 ^3 a爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html. |; z+ X' o) x6 [' e
——
; i% Z0 @/ o; z5 L; o百度2011年实习招聘专题% R4 i, z1 e' r+ P+ {3 p' \
http://www.aftjob.com/portal.php?mod=topic&topicid=22# ~5 d" L2 C; D4 j7 X. a$ H5 |2 V' P
爱立信2011年实习招聘专题
4 P" ^9 D2 [% Fhttp://www.aftjob.com/portal.php?mod=topic&topicid=23/ [2 K3 ]. Z4 k! P
新浪微博2011年实习生招聘' k8 t% V- k  V6 f8 I4 u  }
http://www.aftjob.com/portal.php?mod=topic&topicid=21
8 M: h& ]3 H: O, g阿凡提招聘http://job.aftjob.com/job
7 R- a+ @% ]% U: x/ a阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
4 Q2 W2 j( u; J9 b8 Z0 i阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum5 t5 R9 f; L3 x; d; @4 P
阿凡提职位搜索( P& K* g+ a2 p* q5 Y7 q
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-25 22:46

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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