找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1145|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题& H6 M( y6 V, u

, Q7 e6 p4 z% }Zz2 _; U2 c( Y3 V' x8 ]

5 w4 t4 w1 E2 s. F6 D2 l(1)下面程序运行结果是什么:
8 O3 q1 D/ E, ~# K/ d7 J2 H9 p#include "stdio.h"
& C4 {/ G8 R, d; G& @; ]! c  Tclass test
0 o" J$ s, D$ u1 M8 f{
$ m4 d, B/ b3 O+ fpublic:6 B# q3 Z+ j& `; h8 Y
test(){}: ?' I; `: O7 O: P0 i7 q, N
void hello(){ printf("hello\n");}
, p' ~: j6 e# g6 y! S};% X2 y, I6 X6 o7 |1 J3 R, s
void main()
( t) }2 P9 \5 V8 g{6 o6 T6 Q; l" O( ^
    test* p=new test();
+ N9 |" w+ i: y! b/ V    p=NULL;) q. ]! y; ?( s3 o* l
    p->hello();
/ q7 Y, C' G$ [5 n! k4 Y; S- L$ |}5 g: {  o/ |/ ~1 [, Z
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
3 i, [/ l& l4 w: U#include "stdio.h"
6 L; e' m4 a# [' i/ @% |' h( X- M$ Wclass test
2 f# W- ]' j8 W6 F$ @{
6 O& Z8 l# R1 I- V/ ]" L; O/ i" Sprivate:! t( R( N* _1 s1 B- x
int i;4 ^: C# `" w$ g! `: x
public:
% [8 u3 _5 V: J; W1 |test(){i=1;}7 X  u, u: r. w$ D" k9 T
void hello(){printf("%d\n",i);}. x0 S) n: s+ q+ S) n
};$ z4 V9 r. w5 T) z
void main()$ b5 [+ u5 A  \1 a5 m
{
+ u( p0 q' K; L    test* p=new test();
% Z: R7 I. ^" {- ~p=NULL;8 ~" Y) U/ ?* K% ]
p->hello();8 V% {! J& y' @& c9 _
}
5 u2 l/ M% F! a. l9 _4 I/ w4 j如果将p=NULL注释掉就无误,就会输出1.
$ A1 x" U  Y% x注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。" X& r# q' C0 {& y+ `: k9 F( n
(1)C++的构造以及析构顺序
& N. V2 G# }" D# P: d6 }#include <iostream>' b. r3 t  T$ Z+ S# @( R2 f
using namespace std;
" \& u4 E" B3 n4 p. Q, f2 o) hclass A
% L5 M! D. [4 q, Q) n" f* `{
0 h5 n3 y, ~1 N& _9 s* r5 K3 ]public:( [" i% h: |  V/ I; X- ^9 V+ @
A(){cout<<"A"<<endl;}
9 X1 j1 r" P; t+ I$ Z~A(){cout<<"~A"<<endl;}
* j) G; \7 W6 j- C};+ e+ R5 @/ T: a* R6 ?
class B : public A
! i( U8 K/ a7 l/ b- t; ^# j; |{
' W3 h' A- M( p& Z/ b0 V/ }9 Ypublic:1 a  V2 n. R" X/ q. d
B(){cout<<"B"<<endl;}
4 F( ~/ _* z+ u) }( j% \virtual ~B(){cout<<"~B"<<endl;}% Z8 o2 |2 d& n8 O: Y
};1 C% Q- b" g8 P- y6 u" c5 \7 m
class C : public B
3 \$ `+ m2 |7 g+ P5 X5 Q{. _7 V! _; f7 R) \, j( K5 M
public:8 U3 O8 {- b5 B4 l  L
C(){cout<<"C"<<endl;}  w; A' t# l# {0 O# R
~C(){cout<<"~C"<<endl;}
* E* M. }1 Q- {# x};
# d7 b  a! j1 ?: Y. ]- T
& Y3 u; u- S- l! z; s4 uvoid main()
3 a. P8 Z* |2 N! s& c  c{
$ i( r- M  }& r9 O; x  x
: {" A% w, u7 D9 sA *a=new A();
5 [  N$ @  K( H9 p/ mB *b=new B();
6 K3 }( T- o, Z  C *c=new C();9 }$ s7 H. ]6 a
A *d=new B();
. J! K+ t0 @5 ^7 AA *e=new C();
6 h& d0 L0 d. N) ZB *f=new C();
/ c/ s% A: w/ `( `
/ ^1 P' o, m, q  `1 X4 n; o( ?delete a; cout<<"---------------\n";! U: K1 \; o# x8 R. b. [% T: C) T
delete b;   cout<<"---------------\n";
4 t# i& d( h/ b* Wdelete c;   cout<<"---------------\n";
  P* V0 y0 ^3 |* Mdelete d;   cout<<"---------------\n";6 A( [+ ?# u1 k! f, D+ o
delete e;   cout<<"---------------\n";
2 K! r6 ?& Q! i3 Ndelete f;   cout<<"---------------\n";5 X+ n) l/ B* W# x( h
}
* e, q+ P' T9 \* B9 D- F这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
: |- n- T( e$ H1 G* T* X这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
/ N' c# `' }' U( s其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)! y$ O+ A- [5 {; p2 I. Y
(2)面试的诡异题目
& C1 C$ R  u* u! q大意就是如果你 test *p=new test[20];: [  q8 z& l7 ]: I
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……). Y2 L: m, j0 G; d0 S2 ]6 a. w
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
; [* R  x1 e9 ?% s( T9 {( f
" Q6 H1 X9 t" f# ~; BZz
. a$ F, ^- B8 A; ?' Q: M2 L) g爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html4 M% C3 T# e5 X6 a( k+ R- E, e
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html7 C& `+ S5 K- p; N# K* ?, p
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html& _3 n; q/ i) d0 f) k2 C1 x% V
——
# _3 j0 V; o! [+ v6 R0 z6 ^3 |百度2011年实习招聘专题* v" U' a# L% y! Q
http://www.aftjob.com/portal.php?mod=topic&topicid=22
1 R# F; d0 Y9 [! W- Z" L: q; X爱立信2011年实习招聘专题
* Y. Y4 z) \& W9 I. G  yhttp://www.aftjob.com/portal.php?mod=topic&topicid=23$ y# W. x3 h0 o, R4 j, U
新浪微博2011年实习生招聘: ~; h" m1 [) w# \1 P* J
http://www.aftjob.com/portal.php?mod=topic&topicid=219 f# s: Q( L1 b$ N
阿凡提招聘http://job.aftjob.com/job$ A) v+ c; R9 k3 M# b
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
) X* [. F- A" N" B阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum* V' {" F% _; _
阿凡提职位搜索% M- U1 U% w$ q1 L, ~9 ]4 T
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-26 07:22

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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