找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1292|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题0 P$ {: _" d' d, v
' O' u: X+ S" }$ o$ @7 T$ l; `& P
Zz3 u2 S; T6 Q1 u- ?; Z: j
& R3 |2 s/ A7 o  W
(1)下面程序运行结果是什么:0 O( y$ E4 [8 ~* f
#include "stdio.h"
+ k) ?( U. \! Tclass test
/ d0 [/ x; X6 G' h% t' d& Y/ y{8 Y3 v1 g% S) [
public:- M# |/ c( r! y  G
test(){}* d0 z$ \2 h! [! g* f! t+ C
void hello(){ printf("hello\n");}
" n+ L$ Z/ \3 _$ R( l};, o6 t  @& g/ X- h
void main()
' G- Y7 a% f5 n  @0 s6 `5 x{
! N0 s' o6 d$ g  p$ `    test* p=new test();" j8 R8 m( K8 P
    p=NULL;  z1 y: }* f; b- Y. O
    p->hello();
! b7 v9 m2 N% M1 q: |}  ]+ P% |+ c8 v7 I
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:5 {. }' {+ G; g4 w
#include "stdio.h"0 f/ |1 A/ |0 A* z4 ?  H: ?$ R
class test8 d; T: ]2 A  [/ ^; o9 X9 G" `
{6 t# t$ ^1 J4 q! l2 F. L1 k& m
private:' u: x" n3 c/ p+ v- d: i% X- r% s  d
int i;$ s& J, {* {7 g* {, J9 p
public:
) {2 `" `6 m3 }2 j) L  T3 v* ctest(){i=1;}: K) S% J: {8 @0 W% X. w% R
void hello(){printf("%d\n",i);}
0 C3 d2 F3 X2 F};
9 G) {# O* l) {2 `  Bvoid main()4 t, `/ A3 o# L
{7 H& G) d8 s$ A: J7 `
    test* p=new test();/ E+ `  w0 R! R, e
p=NULL;
0 a8 C: A4 g  \+ U" bp->hello();
1 K# S  W0 Q; S) ?4 C! `}
- p# w/ V3 `6 y7 N- P' G" k3 U如果将p=NULL注释掉就无误,就会输出1.' ^* n' ~+ V& \& E: l1 W! t
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
  k' r) T% z, ]3 K) ^" N5 ](1)C++的构造以及析构顺序% B7 K' l0 v2 ]' h
#include <iostream>: a+ P0 C2 t0 D. {# r2 b
using namespace std;
% L& D# E1 }" V7 l6 nclass A: E3 z, ?& H2 b( p3 h
{
. {( P) H# Q+ {4 E' |; n- Vpublic:8 }" L8 p( u* t* v- u/ _! O
A(){cout<<"A"<<endl;}3 i+ r1 V" `& ^- h, M9 G
~A(){cout<<"~A"<<endl;}$ g* F7 I/ e. N8 f' S) _
};
& o: A4 T0 t% T- {class B : public A
% Z: F, H* y+ x{* G. D1 g% I0 l3 }# e3 P' I) \
public:
. I7 N- G* o$ v8 [B(){cout<<"B"<<endl;}
5 |8 v1 Y2 v- Nvirtual ~B(){cout<<"~B"<<endl;}9 d6 U% E/ ^5 g  C, g
};) v" \& s& [/ p3 x; ^) q4 M5 B3 H
class C : public B
2 ?4 A! ?8 P: Y{
4 d! Z& }1 f  O) npublic:9 {7 l) y. r2 l! _( w
C(){cout<<"C"<<endl;}
' w7 o6 L  a( B9 h~C(){cout<<"~C"<<endl;}
! ]" ^6 [6 Z) I5 _$ L, f& D' o};; F" P7 B- q' r- O5 M' l! D7 r
+ L# @2 r% q9 d( K* h* {/ n7 g
void main()
, X; q& f# v9 w{
3 x5 d5 N: ?& q" S) m
" {+ \8 R5 @( TA *a=new A();0 R: g9 U( x  @8 Q
B *b=new B();
: Q) ^2 N7 w; _: q) c/ O  C *c=new C();0 K) J" m$ D. n# J! Y% L7 s
A *d=new B();8 V, j' o3 |6 K" Q4 E
A *e=new C();9 A7 d0 Y1 @, y& {2 n
B *f=new C();" r0 @8 v* l$ c& J# f* J2 u0 \

( _" `7 k% }1 n- @2 _9 @delete a; cout<<"---------------\n";: o* e6 A1 D) S6 \3 {! T
delete b;   cout<<"---------------\n";
# N5 y! m2 Z. j1 z) cdelete c;   cout<<"---------------\n";
' V, [3 S! A  ]delete d;   cout<<"---------------\n";# D+ ~  g. [+ P& G1 e. B$ @
delete e;   cout<<"---------------\n";
% f& A3 y, S. G- _8 ndelete f;   cout<<"---------------\n";6 A6 h% n& h- U! v
}; U9 M, @% O/ O, ^
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。) |+ l0 I$ T' ^
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。' X* r. x6 R" z1 c/ f5 o0 A7 L3 j6 ?
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)1 I9 H. M/ r, U5 r/ p& X2 n
(2)面试的诡异题目3 ?9 d$ V! H0 q
大意就是如果你 test *p=new test[20];. Q& a0 J/ V4 ~/ l
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)# d% u9 K4 T) Z8 Y. @( G  K) g9 h
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
8 T! v3 H- H, s. Y1 x2 v2 Y- u8 i
8 m6 }& m4 V3 ]Zz8 ^) ~  @5 P$ |4 {* ^
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
( \9 H  z' O9 p5 W上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html" h! P. e$ b$ T3 g8 z! t; U
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html$ F: {  Y% G! V7 L! V) r
——
& \9 r) a& a0 y. O4 @% s0 z百度2011年实习招聘专题
3 z8 y' \0 P( W) T5 s! I9 b" |9 hhttp://www.aftjob.com/portal.php?mod=topic&topicid=22  V% {& M( t. H1 J+ @, g- O7 B
爱立信2011年实习招聘专题
. L; A9 D7 R2 z' O( `5 l! M0 ehttp://www.aftjob.com/portal.php?mod=topic&topicid=23
6 E. ^1 m. _: i/ I3 T新浪微博2011年实习生招聘/ H3 u4 @, q2 t
http://www.aftjob.com/portal.php?mod=topic&topicid=21
* @) i' z- g' H0 U0 v2 l阿凡提招聘http://job.aftjob.com/job! j  A. o$ r( F/ D& i
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
- y+ V2 U' J2 H) U8 I3 S阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
% n# a3 u0 r# r3 L3 o8 w# ^阿凡提职位搜索
0 O4 i  \6 n  z$ N. p——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-13 14:54

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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