找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1343|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
5 P6 E8 V! ~4 J1 E, _0 X# R7 W; u  a+ F! m" r4 x% n4 k( j
Zz. s1 [% q: M! z% B
+ h) ?6 ^1 s$ S: U2 T
(1)下面程序运行结果是什么:
( F) b' ~# R; J  W#include "stdio.h"
' f7 L/ [0 j3 i6 K6 Wclass test
; A4 k9 `! Q" ~{5 j# ~0 Z+ |4 Y2 j
public:. C' u$ n6 K. Z
test(){}
+ s! B' v9 Y% nvoid hello(){ printf("hello\n");}+ R" Y7 B# ]  ]9 \1 a3 X
};
4 U" w3 S( |- ^8 L4 Y) Ovoid main()
" L3 \# K  G' x: L% ~{9 l6 [: w$ V' s; S! h$ Y
    test* p=new test();
% l! C& z! ~* T5 n0 u# L1 G    p=NULL;! i" _5 Q( ]& D1 F$ N
    p->hello();
$ {7 G7 G9 E# F" t2 L5 G}6 C7 g7 L3 r+ r8 A& [
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:( o( q  v2 h3 F" [% F
#include "stdio.h"
/ H# H, N# {* f1 g1 \/ }class test
8 l  ?  h' _5 h9 ?- e+ Y{
2 ?. G, j" J" J0 R8 t5 iprivate:
; f+ q9 }* z' h& n  V: h: U3 T- {int i;
  S/ H1 ]7 k" D4 D$ @public:2 I7 @5 p7 r# ]2 u. p3 }$ ]+ B
test(){i=1;}+ U0 c. w+ i4 g! }" B9 D9 c) t
void hello(){printf("%d\n",i);}
0 r5 P3 I) }3 j$ C6 e# M/ r& ]4 c/ r6 G};
; O* u7 n' I7 D; f8 M- Vvoid main()
/ K5 ]% r* [0 V( H$ l0 R1 G1 U, p{/ O) v1 d: Y4 h: B8 f) S
    test* p=new test();
8 M* A% M: c0 m+ r# }p=NULL;
; x7 C2 ~4 U1 D4 P7 s. Lp->hello();
* w% |( _6 h8 l0 v; X# l}1 j$ {0 M7 v4 {) O
如果将p=NULL注释掉就无误,就会输出1.+ B& @. V/ F3 R; ?; y% u, L: t: M6 @
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。1 a6 Z8 y  G) ?& a$ e. q
(1)C++的构造以及析构顺序
9 ]) M( d: |! k: {$ L" D#include <iostream>
$ ~: m" C! X# y7 h6 E& qusing namespace std;7 m; x3 [6 H9 V) u% B( s
class A2 P! G4 U8 R( Y" G
{
$ g* G$ T2 u' z; Tpublic:9 m- _: f, \. O' w0 b% _. K
A(){cout<<"A"<<endl;}; p% N" s8 v1 C$ z9 S) {
~A(){cout<<"~A"<<endl;}4 f+ j0 D. W8 H) a5 n: |* `
};: k5 d: |1 B  \/ R- m
class B : public A
- S- Y* s" I: L{4 i+ W/ Z4 h3 H& {2 V1 J
public:
0 s$ u8 Q* N" }; X* M) UB(){cout<<"B"<<endl;}
: ]0 Z3 W  s4 ^5 J) a# E# vvirtual ~B(){cout<<"~B"<<endl;}
1 Y" P: E- \) i; V};  C5 G# R! y! J2 S  W* K. b
class C : public B) Z4 Z4 G. \1 l1 N1 f4 G7 {* j
{- L3 d% \, A5 o! _
public:* D( a! B( e0 l* A4 q7 Y% I' T. X3 i
C(){cout<<"C"<<endl;}
' @% p* m  \4 b! I/ ^3 Z: C. e) f~C(){cout<<"~C"<<endl;}
0 O- S! J& U' v};3 h' A( C9 y( w
; ^, B; A/ {6 W3 x( w
void main()1 U2 O, \% a' [6 K1 t' r( ^
{
4 h/ Y1 i2 ^. X' F  j1 Y2 q, E; q' N6 r1 I9 }, @
A *a=new A();  s$ r% p! s# A" u& R
B *b=new B();7 b5 I8 H5 e! K9 x
  C *c=new C();7 \- x3 a+ ?2 U* y1 F0 J$ m7 m! M6 M
A *d=new B();
( t/ T2 }  b+ `+ \3 e6 L% e7 LA *e=new C();
* J' u# X) \* Y3 C7 JB *f=new C();, @0 s! N- y$ ]: i( G) X

9 [0 j+ d2 |5 L: `! I9 T: |% Ldelete a; cout<<"---------------\n";3 U0 C5 r# @5 j( u2 F( V6 P
delete b;   cout<<"---------------\n";
. F$ C7 x, }7 `delete c;   cout<<"---------------\n";2 I* K* Q$ V) F' K+ [
delete d;   cout<<"---------------\n";
1 l" e4 I9 ?8 K4 p# y( y4 Jdelete e;   cout<<"---------------\n";. e/ s7 q2 @2 f+ Z  b( W7 B! j' u- v
delete f;   cout<<"---------------\n";
# F$ V1 w2 W6 ]: u}
  S, L! C: W  X' ]/ `* S& |! w这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
& K6 |0 c0 k4 O* q( e" x这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。2 i( L/ i! p0 K7 ?3 [6 x( |" N- u1 t
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
/ u+ Y0 J9 o9 N(2)面试的诡异题目
/ d+ T# e8 C' q4 U- Q2 ]2 x  B" l5 Y大意就是如果你 test *p=new test[20];  T, r( G# A8 O6 k9 j" v
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
4 w  P& n* k2 R2 l答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……; b, A8 J/ L# n' y% Q% A
: u! L- w( D, ^8 m- P
Zz4 z% Z9 \% \7 S2 ^* j  G
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
2 |, m% k0 H1 {8 ^, r' F上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html7 W! S! l7 z- E) X# s- {
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html: }3 z0 H; Q+ A# B
——
0 Z0 E4 N8 `5 |* s, m& t; k0 Y百度2011年实习招聘专题
, n7 U0 x7 q4 M4 `: y# ~http://www.aftjob.com/portal.php?mod=topic&topicid=225 ^; v- |) R, l* a; ?
爱立信2011年实习招聘专题  D8 f% `* w: x) W* C# Q+ ~
http://www.aftjob.com/portal.php?mod=topic&topicid=23
, v5 H" i, k7 V! n5 F新浪微博2011年实习生招聘
- J4 H" z+ R3 o% mhttp://www.aftjob.com/portal.php?mod=topic&topicid=21% @! w0 t4 s+ ~) y2 V. T7 w/ o
阿凡提招聘http://job.aftjob.com/job$ T% P3 X2 d) a% M8 w
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag4 P6 a8 [8 q% I6 ?# [  p4 Q3 t- N
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
$ G. ?5 R8 E, P/ o; b7 U2 ?阿凡提职位搜索
. n" l' v" Q3 ]0 B+ u——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-12 16:55

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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