工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 998|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
( D3 t+ f( o; D0 p$ r
2 Q. V0 R) ^1 ?' YZz
0 w( e. t  ?3 E6 x( [' j! A
8 _+ t( O4 J+ y(1)下面程序运行结果是什么:( ?4 b: ]& E' r) N" n
#include "stdio.h"7 P2 B$ p! U- `. ?5 v
class test6 A3 ]5 m  H6 e- ~& d) p4 c3 f
{% `- g  I. f/ H( T8 l& J7 F
public:, W4 G  x$ d' D' \3 E' [0 a. p! p
test(){}
8 a, N$ t0 t; B" f1 N3 Xvoid hello(){ printf("hello\n");}+ Q2 X, p2 m  g' _4 d
};8 a! D7 O" F& s& |7 |
void main()
" \# T) L2 T1 D. j{- h- {) E+ c. v* F+ O( I2 ~9 A
    test* p=new test();7 `5 ]6 R' ^5 t# [. t5 ]
    p=NULL;
0 L3 A  [; i6 I5 I; T& A    p->hello();
  q# A1 t) ?: B- V}* a. Q7 N5 k+ x) U, n7 ]
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:( w& t2 W! \' n3 m% Y/ u! }& D+ x1 h
#include "stdio.h"
% e$ @! Q9 ]' h1 Uclass test7 d' c9 I, A7 J- ?! j
{! y% f, w# {' I6 L" m- q
private:; Z7 `: K; h, h) Y3 q
int i;
+ @; p) T$ O# H, U! u. _2 Z3 Epublic:
7 \+ Y: F3 [; A- Y5 I" K1 y( jtest(){i=1;}' s- J/ B! T; G2 M9 Y
void hello(){printf("%d\n",i);}
1 {+ M; B/ Z) S" z0 Z6 J% F* l2 A};& m6 m3 c7 d/ D' }
void main(). D" @0 d1 `9 V" q" _# Q3 ~) T% n; \
{
% j+ Q& E- c& {* ^4 K4 _    test* p=new test();
6 x: I$ C( P& e0 \$ I9 ~p=NULL;* b% q  r+ D/ e. u/ A  d
p->hello();" O, n, u6 o4 m  j) ?. I
}4 J, h, y. h1 M- I
如果将p=NULL注释掉就无误,就会输出1.
! Z. W- T! O' E4 @% c' ~4 x注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
' [3 c% W/ |- \(1)C++的构造以及析构顺序- l* v" _0 z9 y# Y; E$ n4 J, ^  `
#include <iostream>
0 n/ v1 R) J- I, @4 Pusing namespace std;
6 V: x0 o" S; O6 ]" ?' N3 b2 j9 Sclass A
0 c3 v' S1 I* f$ ^7 B0 Z{% w! Q0 A# u* l0 K1 \8 s( Y, B# [3 J7 F
public:% w1 O0 Q$ e" o3 U4 e& y. |  T
A(){cout<<"A"<<endl;}% Q* l3 Q# |! c+ E) e. ^# ?9 A
~A(){cout<<"~A"<<endl;}
/ n! W6 h  E  n/ ?  Y2 @};
& o7 Y4 [2 V+ G% ]9 sclass B : public A
& L0 N" v; f9 {  F{1 ]1 k/ X2 f! G8 H; `
public:; J9 W7 z" ]  E2 @
B(){cout<<"B"<<endl;}( {& f' m# H7 t6 W, F0 W* e
virtual ~B(){cout<<"~B"<<endl;}+ w* ]! z; ?4 s5 i3 F# j
};/ x! U1 c+ B1 `3 k
class C : public B
" V$ i7 E- L2 W/ C! ]{% Z) s- v/ ]4 D: X  `
public:8 W4 G" r6 ]- t1 _
C(){cout<<"C"<<endl;}
0 x' k3 z  ^5 E; d! q, i~C(){cout<<"~C"<<endl;}  a* ?6 h- F- {' k9 r
};
# w+ B) e4 l' W4 ~3 S3 {. B+ u" R+ z4 @1 E6 q
void main()0 O( L2 P8 S! ~! @" e! Z
{
5 u, j7 J6 S3 C- \
) N6 D$ w* T+ \2 ]' V# O7 ~A *a=new A();8 L3 P2 [! t* w; q5 i% D
B *b=new B();1 T/ j  L; O, E) m
  C *c=new C();
. V4 [5 P# G# `5 u6 r+ g6 K' w( eA *d=new B();
" n3 K2 t& l; HA *e=new C();9 p& {6 \3 n# |: I! N' G
B *f=new C();! _% A5 ^# C" ?6 H0 p3 S

1 s; g: Y/ I1 C" l0 \* B0 M; \delete a; cout<<"---------------\n";& M" q/ d# [0 e6 L  h4 X
delete b;   cout<<"---------------\n";6 ^4 W' _& c; N
delete c;   cout<<"---------------\n";: W9 _/ U9 `) Y, B8 N2 ~3 j! \
delete d;   cout<<"---------------\n";" ^+ N* t- D: r" U7 `. ?7 l) d
delete e;   cout<<"---------------\n";; q9 a6 A# }. ~" I, j6 r
delete f;   cout<<"---------------\n";1 p7 A( d1 U0 Z) o" a1 T+ o
}$ g5 Z, N2 t7 J6 @+ g$ w
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
! v3 z$ v: {- Y1 t4 T& c. K! p8 V这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。; N# P3 P; C# O8 i& O/ D
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
9 ~! ?: A, s: w(2)面试的诡异题目- h9 D6 D. i3 f$ v. u
大意就是如果你 test *p=new test[20];
( x# ?% |- [+ p8 ~8 F$ i+ c然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
# L$ |4 V; a! W0 W% y# I$ K答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
. A8 s0 j4 `3 m0 e' E
( X0 Z1 T+ a1 qZz( I* v$ g6 b$ Z  u; F* @1 u
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html7 v! U: j! Y9 O. n
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html& p3 l+ f7 a- E  [
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html, ^. a* H% }4 I7 b5 \+ _
——
6 ]( ~& {% \# t2 y百度2011年实习招聘专题
1 Q  f. k) F  n0 i3 zhttp://www.aftjob.com/portal.php?mod=topic&topicid=221 _/ ?, ?% x9 O3 D- k& m
爱立信2011年实习招聘专题- H2 T0 ~  }  F% m; [8 K# B& M& R
http://www.aftjob.com/portal.php?mod=topic&topicid=23
9 g3 c. p& g$ W! p/ \9 V新浪微博2011年实习生招聘
2 ?+ I& g, X8 e9 A: dhttp://www.aftjob.com/portal.php?mod=topic&topicid=21+ `7 a' u) A: p* X. [( Z
阿凡提招聘http://job.aftjob.com/job
  ^2 [1 U. R2 F( B阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag' _) O# i* A, b" n2 o4 K
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum5 L' R7 t: [  V1 {- I
阿凡提职位搜索8 P9 n! z2 A+ B1 k1 K4 ^; o$ V
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-9-16 14:40

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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