找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1130|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题5 i4 F% w$ Y' t" ~6 ]

( d) F  d) V3 K4 B3 ~Zz+ b+ y4 R6 F: W1 }2 x( Z  ^
' g# m% R9 K. m- ]# F1 V
(1)下面程序运行结果是什么:
& f# x- I+ H$ a) J, u: W#include "stdio.h"& c. `! X& A( L+ T2 y6 C% y' _
class test' k' y7 n$ b! J: u4 I
{
. B& R. D% o: n: x- ypublic:
8 `( L# B& ?7 b( G. N2 b% ltest(){}
1 h; d5 g0 i7 o2 S* \5 Zvoid hello(){ printf("hello\n");}2 i: Q% O1 Z7 c" ]; M# Y/ ?7 ~
};! o3 R, J+ ?( v' X
void main()7 _+ ]- Z2 H: e0 U1 d9 J3 N3 s
{
9 q  e, M5 N- _* w! B$ E5 O1 f" y    test* p=new test();6 B/ Z5 b8 G; ?
    p=NULL;
4 T5 x3 W% r1 u. s2 T    p->hello();
6 i) n2 d' d4 r2 N}
/ i3 X8 g9 e# \) `# L2 J. [事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:- ^- P& d' W2 M/ Z( u" y+ J3 ]
#include "stdio.h"3 o% w' w% Y& m( x: x# k
class test4 i- V; M- c3 B/ @, }2 X
{
. r4 n# @0 L! Z7 D6 n  T# qprivate:
  k9 i) C+ ~0 o- nint i;: A4 H* d! n' n3 @
public:
2 Q+ c& _4 X5 ~test(){i=1;}" k$ u* m4 t3 E3 O  m% @! U2 }
void hello(){printf("%d\n",i);}4 L) y3 p8 N6 U% F2 Z% B$ h
};) }! y; P0 z% Z6 F
void main()
9 j, G( ^9 B- p{/ |7 L+ I6 k6 O0 H
    test* p=new test();
( u8 o1 K0 H8 ]% Bp=NULL;; j9 I: S6 k- f5 }" K" s2 Y
p->hello();' O2 c1 S- e  I7 {0 z% I5 Q
}" t7 f/ [  I- \6 M# R6 z( h5 e6 `
如果将p=NULL注释掉就无误,就会输出1.9 }( j# L; _$ q0 \$ k
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。1 T; y6 r% K9 D
(1)C++的构造以及析构顺序5 N7 n% s- {) z
#include <iostream>1 w) m9 \$ H  F3 }
using namespace std;) b$ G  H  Q& O6 b
class A" k" |, V8 K8 P( c1 C
{& i4 f( _: y. e+ G+ \
public:
! m4 a2 ]* j6 d8 V3 RA(){cout<<"A"<<endl;}) g! ^5 V  x% L+ r' L
~A(){cout<<"~A"<<endl;}
( U. e$ o6 `" D  ~2 F+ j};
, k3 ^) C$ d/ T- Tclass B : public A
4 ^) t. f5 k) l6 c6 l6 o5 k{" h3 U9 B* @3 N) V* M0 z8 o# B
public:  r) M- R2 K) a; F
B(){cout<<"B"<<endl;}
! u3 h6 ^2 Y; H0 w+ N7 ovirtual ~B(){cout<<"~B"<<endl;}
5 V( i- v* y: Y2 v: ?5 S};
* Q  {; S* t/ S2 G  i% d$ i1 Z' Iclass C : public B
. u* r; R7 R" K3 X  f{
  z8 C3 o8 v4 vpublic:
2 {2 Z: w$ ^& _( oC(){cout<<"C"<<endl;}, D& F+ }; b" m1 H; P: b  V
~C(){cout<<"~C"<<endl;}
$ \& O* K, k& Y* h6 ]2 P3 l7 w, V};
: H! [) k/ x2 f" }% V7 D8 ?! H9 |- l* W
void main()
* @# D" S6 b4 b, t' s. y5 V/ X{$ C2 A1 g  B$ M7 O
; f& o: j+ M. g) O" V( {( z
A *a=new A();
' ~/ R; d3 x5 HB *b=new B();
6 c" U/ w& \8 s5 Z7 I( L( P6 D  q  C *c=new C();( w# s" ]! y! O' D7 |+ q9 k" J
A *d=new B();
+ U4 m) p+ ]) N% |4 Z/ E! {A *e=new C();
6 y6 g. M( T: G2 D, N6 FB *f=new C();
& J8 J9 w% \8 A! [+ p) x6 N2 ^; L' X% `% b' Z
delete a; cout<<"---------------\n";& `- y  w! [; y4 x5 T
delete b;   cout<<"---------------\n";: H  T' U, j8 i5 o: `
delete c;   cout<<"---------------\n";7 t# ]8 ?' C; ^6 |
delete d;   cout<<"---------------\n";
% b6 u9 x3 Z+ @# E3 p$ J7 Mdelete e;   cout<<"---------------\n";
: M3 j  W8 _: w7 C) B/ q% Ndelete f;   cout<<"---------------\n";
! J! Z/ @0 Y! [4 G. |0 X}
& [' k2 h: T* i  a. o0 M. E" p这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
+ A3 t( P, H1 r. V2 a# V5 F0 `这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。5 A6 r& F$ J. }1 `6 J4 s8 Z, k1 Z
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)% H/ z) q' |2 x% J5 U5 g
(2)面试的诡异题目
3 m6 o. q1 E" T9 I1 H7 r, M大意就是如果你 test *p=new test[20];
5 J) V# j- ~. h4 B, U  }- |然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)6 T8 p4 }* L! `" s4 X0 t2 n
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……1 M$ f0 q9 Z7 k& D

4 p. p( |( U. QZz, U2 ]8 q; m5 N: ?! p( F6 f, U; m) K
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html$ Q( {9 z# L  E" j' M9 [) q  w
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
4 R' R6 z- r" R爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html' w  W% @$ Z) `+ V5 h. g+ b, ]% v
——
9 m6 _' ~$ T' i, J4 ~百度2011年实习招聘专题
! y* N" x, B' ^8 i$ khttp://www.aftjob.com/portal.php?mod=topic&topicid=22
3 }7 G( y+ ?3 x爱立信2011年实习招聘专题
4 X2 [  ^: @8 b+ R: Z# B$ P* Whttp://www.aftjob.com/portal.php?mod=topic&topicid=233 K( [/ F, r+ F% e+ K
新浪微博2011年实习生招聘
  M, L$ }2 _3 C% \* e3 chttp://www.aftjob.com/portal.php?mod=topic&topicid=21
  d  k* `6 V* @7 W* C阿凡提招聘http://job.aftjob.com/job
$ k: {7 O, G. r3 s) G阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag1 m; s. [  p! I) y+ Z+ B1 [* M1 r5 y
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
# H0 m, F$ @8 l! e阿凡提职位搜索
% k, _) t: q, N8 Z# s' E: W——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-17 00:38

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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