找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1187|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题3 H( U- G- p4 D+ M* ]% W% Y

+ \! _6 K+ |' f" W( ^. jZz- j9 Y  ?- P- T
& N' ]$ x5 r7 c) @! Y5 w% `. k
(1)下面程序运行结果是什么:
3 X. s; F0 W4 T7 f4 n% L#include "stdio.h"# ?  B8 G9 B' x9 N
class test
  R' A: U; Z0 n  Y( @! t( V{
% L. K4 z2 p! ]5 y& w, {public:
# I0 A! a6 {* o$ u( `test(){}
% I3 d+ E/ @8 _# M0 Y5 Nvoid hello(){ printf("hello\n");}0 W7 n! k" _3 f  ]
};4 `( M- \$ d( w+ ?  A4 \6 E, R$ T
void main()
' d! e7 B+ s6 W% F{5 z3 s" j& ]- f9 R! O- I4 O8 Y  A
    test* p=new test();
$ L+ w1 j/ b! s& W    p=NULL;. j! f* x7 c' p& A1 w; R
    p->hello();
1 H2 g  |3 s$ {' t3 J0 G" K, a}( [- z. n/ J' R4 O; B7 T% V
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
  z6 Z3 O/ U5 P$ j) w#include "stdio.h", R6 i9 h3 N, U: j: a
class test
0 c$ V/ Q$ h, ]/ U* M4 r! H; m( E3 G{6 ]) x# i. l9 U% d& H# @* B, ~/ l6 _
private:6 K, L5 ~% H5 B' ~" u
int i;1 L$ R4 t% |8 M" g. B0 _$ I" W3 m& R0 E
public:6 Y0 S) F4 a2 G4 U6 j$ H8 \' R
test(){i=1;}
' W; H0 S- ~+ o- {void hello(){printf("%d\n",i);}
$ `( ^% C5 p% n6 v# ?};
1 Q& K8 G0 S7 ^! xvoid main()% @  G, g% H# G# R# Z! H
{
# {, n: }3 V' O% \" t    test* p=new test();6 l/ `/ P: ]6 k
p=NULL;
1 c+ O2 Q# i; Cp->hello();: E" O" ~$ [+ M" X2 Z0 ?, Q
}
3 h3 n3 C) {% {# c" W, f0 @: c; ]如果将p=NULL注释掉就无误,就会输出1.; A  u( B$ z; |5 y, m! Y
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
6 }" V7 l, i: N: v% q(1)C++的构造以及析构顺序) y: w+ U  S3 l7 `
#include <iostream>
# ~  C! i6 n+ V$ U* gusing namespace std;
' t# r+ b: k4 R& Yclass A
* O- l* w8 @7 O2 J, s{- c% J/ V! ]! P( U' `
public:
- w! b, X% U9 F: }) o- W2 C; K0 zA(){cout<<"A"<<endl;}" u) r2 R4 D1 N( f" P
~A(){cout<<"~A"<<endl;}& l1 G: s/ C+ k+ Y% n  }5 m; j& V: w
};
/ M0 K7 j& C, d9 u& P, j, }5 yclass B : public A) V7 h: r- r+ n8 T: e
{( e5 _; `8 u) W; ^
public:
5 t: l0 d& ~1 |: |! L  aB(){cout<<"B"<<endl;}
  j/ a4 i* E" r! {- R" k$ n  d  ?virtual ~B(){cout<<"~B"<<endl;}
& j: ~: Y6 Z3 o+ f% j: g* O: T};
) g& D; v+ j8 Aclass C : public B
7 n# D6 `, o1 n" G{
8 z6 ]( n, \) \. F2 v- [( u  y2 dpublic:
9 c' H+ ]; M' t9 t2 s3 N: rC(){cout<<"C"<<endl;}
$ u/ O+ k4 H' T6 D- H8 r+ @9 k1 B0 K~C(){cout<<"~C"<<endl;}7 d8 l& I% ]# C
};
: n9 q% q6 B% Z5 B- A4 [+ B) {9 F4 M7 Z' W. L9 U% c- _
void main()
" C! K2 J' t( J7 P6 f2 W9 O{
% v$ H% }) r5 `2 K* |( k/ v8 x( e
$ w8 ]& F/ h! iA *a=new A();0 w) }7 L: f$ s( S
B *b=new B();* a" ^6 `8 \( ]8 f8 R* }* S$ L) `& \: ?
  C *c=new C();
6 [6 w: J6 [& y: sA *d=new B();) d4 u/ ~' l, z  J
A *e=new C();
4 l" V' w/ [" vB *f=new C();- \3 F0 Z5 E5 A- |7 \% c7 q

# R. E  m& a/ B7 C4 Vdelete a; cout<<"---------------\n";
5 c+ k0 j. s" W# l8 Bdelete b;   cout<<"---------------\n";
. q6 b, P% l1 G1 o3 n7 r; jdelete c;   cout<<"---------------\n";- V/ L; Q; @% u+ K3 x+ {
delete d;   cout<<"---------------\n";" e( P0 O# W" L! G: J/ T! z& Y
delete e;   cout<<"---------------\n";* W$ w! G# p0 i
delete f;   cout<<"---------------\n";& z: L2 r# R7 C# M2 U
}
9 Q# {: J. ^4 L( K$ r' b3 c! x. u这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。; L$ K% E6 m; R
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
/ L: x; C, U; Y3 f6 b) g& W7 z5 x其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
8 |0 K+ }* N. f(2)面试的诡异题目
8 U. S1 f6 F4 _- P大意就是如果你 test *p=new test[20];
2 |5 L1 Z7 m) s7 A9 f6 j然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
, u: F) y2 i! ?7 p答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
4 J6 w# b4 Y7 ]: R7 r$ l4 a( O0 Z" u# X2 E7 F* S* w
Zz/ y0 o3 Y0 ^1 }, f8 K+ N& H
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
7 `7 c# B' x0 ?6 q0 K' r/ e上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
3 A: H7 G# I' o( G爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
5 w6 @; B/ g- I3 J+ h+ u+ s6 j* t——
2 N! l* ?4 }+ |& r. P百度2011年实习招聘专题& |, P% @! i1 S9 r! e
http://www.aftjob.com/portal.php?mod=topic&topicid=22/ `! c8 ?* v, j9 B$ S
爱立信2011年实习招聘专题
! q" e- O3 o' c0 ]http://www.aftjob.com/portal.php?mod=topic&topicid=23) P# [8 {& ?' ^
新浪微博2011年实习生招聘; S0 j& m4 Y' o6 x; @' ]( b: f  L
http://www.aftjob.com/portal.php?mod=topic&topicid=219 u) T/ l- _# {2 R" Q" K
阿凡提招聘http://job.aftjob.com/job% ?* }3 Y  @. ~1 L+ n9 N
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
& H( S" c4 m8 o阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum" g% j' e% }% a- `4 o- Y
阿凡提职位搜索
$ t! n3 {* h. N+ X! o. B——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-4-29 07:03

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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