找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1306|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题% o7 W5 Z  |2 A5 R/ N( i1 j" {  x
' t0 i9 |+ r7 H  ^
Zz5 |2 `: e1 H' J+ z8 T7 \/ _9 ]

. Z" `# {8 @; Y" S% r& S& |6 `(1)下面程序运行结果是什么:: {' I4 k1 o' t" h
#include "stdio.h"+ }) H9 y0 g  s! ~' I
class test3 ?( T: g& S. |7 }. h5 L
{: k8 J* p* M  [
public:
0 W1 L2 r' W5 D* {) b/ wtest(){}4 M& Y- ?  b6 a% C6 s* w
void hello(){ printf("hello\n");}
: B# V, G5 r  L# x& a" W1 P};. K" Y4 ~0 {! ^# u( F
void main()
( S5 S3 M3 }) f- G, J! [{
3 H& s" K! O* j' @( H    test* p=new test();0 Z# l0 c* r" d
    p=NULL;
: N% [& l6 R0 {    p->hello();- {4 Q% L% \1 A  z2 N
}
- S- p3 N. o# h# e$ h3 m. X8 M7 J事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
& V) u5 M  p( i8 T#include "stdio.h"; |0 R9 \2 x1 ?/ O$ e5 _( _! g
class test
$ A# r0 i" \9 R' b{$ _& I% I& H. z  V5 y8 Z
private:
1 X, F' X* p1 d* \" |+ qint i;! B, G9 U( P% E& K0 r. F
public:
5 H5 Y$ D7 ^) n4 y: B% xtest(){i=1;}- t: k2 m4 r/ Z8 t
void hello(){printf("%d\n",i);}
) ~* P* f' y) k/ U  P; d};
! }1 x0 o! W( b. ^% h7 Yvoid main()
4 w# {$ q2 R" ?3 N# i  L0 B{' Q* B) g/ N9 ^% @# v
    test* p=new test();% w9 {0 J5 P& m' N+ S4 j
p=NULL;' ?9 Q" |2 U  I; F5 p; w3 P
p->hello();
; e# Y, i1 x( n, V8 T9 @) Z2 H}- C! ?& F! A: O: v9 u
如果将p=NULL注释掉就无误,就会输出1.  V; Y+ B' O# ]
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。. A! t, _5 |) P+ |6 e) O
(1)C++的构造以及析构顺序8 C# ?5 `, G8 J+ W# r
#include <iostream>
  E/ S3 g* w  X+ h/ v: E- Lusing namespace std;
7 [/ S( m' N$ G; u5 ?8 Y6 U0 T% ?" Nclass A
, }% s" p9 t  }- q0 R2 z$ @- Q{
0 m, `$ O# V* d, f6 s% Fpublic:
5 B9 t" o6 f8 y3 S/ QA(){cout<<"A"<<endl;}* \  o; C# K& ~! q. Y: G* H4 }
~A(){cout<<"~A"<<endl;}
' K6 q2 t# E4 b2 d2 i- f};
& Z# P3 f+ s; q, s( x% X/ p! t: W) Pclass B : public A" U2 T3 A5 K, \' v- K
{
9 \3 s( A8 D' F5 r! _; z5 a  F( N& qpublic:
8 X' M6 H$ n% m# e% g1 [- J% gB(){cout<<"B"<<endl;}
4 j$ n( w8 D7 M+ ]6 S4 Hvirtual ~B(){cout<<"~B"<<endl;}
" S$ O8 X% U0 {0 L- S};
% l! s, R, t& q* G% ^class C : public B
1 F, h; u4 U! ]( D2 A' C{! P" @" Q7 h5 J
public:" ^8 i5 @" G  y; \  G+ }% Q
C(){cout<<"C"<<endl;}5 Z3 K! k" H+ y  _  L) l6 I
~C(){cout<<"~C"<<endl;}
* N5 P; m) {, w8 t: f7 E};
' a" s3 t1 m; Y( S9 @( c
+ G/ ~- q9 C# v2 U. Tvoid main()6 E4 a5 d0 G2 _5 h/ X- d+ W& m. {2 k; ^
{
9 e9 y1 j) u. Y* ^. @# \9 p3 H! U0 |' X" G
A *a=new A();
" U  v- i. x' W& k9 G& LB *b=new B();
5 |* |7 E: g+ n% G. @+ G2 x  C *c=new C();
9 h7 D; L$ h7 @+ V2 A* c3 J( QA *d=new B();' C2 q. L$ [. Q8 ]
A *e=new C();+ B( ~/ C8 s5 c9 i( O& V' X
B *f=new C();
. u! i3 ^+ r& r; l3 K) N5 j5 K% b
delete a; cout<<"---------------\n";
7 L7 }% \% M* a) V# pdelete b;   cout<<"---------------\n";. ?6 H5 v) s7 O% [5 V! W
delete c;   cout<<"---------------\n";+ N( @: w) _3 j( o) D
delete d;   cout<<"---------------\n";1 P4 w! U0 o& E) u6 n6 o6 w) U
delete e;   cout<<"---------------\n";
) p7 r* O+ F* ?% S6 t5 C, ddelete f;   cout<<"---------------\n";
& F$ P$ w) `# |% Z4 i}- {9 X: q' J; r" j; ^
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。" `* j. L+ }( Z$ b& R" e1 Y* @" H
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。! l, q, W4 q1 f& `/ o
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)7 H$ i* n. E0 Z" @% V/ c. E; [
(2)面试的诡异题目
* }6 X3 b) V+ G0 U5 U/ x大意就是如果你 test *p=new test[20];& J3 {5 I4 t. v6 e
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
9 B% r2 y) |" E- G: t# D6 V答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……& g  M5 z4 M6 {7 S4 f) |5 c

" N7 ?2 _  q# e. X, J, W2 I  wZz
  D: m% E9 |( }1 ^' R. r9 w爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
, }- }8 f" e$ q# S6 u& E) Y上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html# R$ X$ o0 |) `. f
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html2 K6 j5 X2 N7 `
——- R6 @5 j8 [8 I& S) S
百度2011年实习招聘专题5 ~4 ]$ ~6 I* b1 X& y( g' x6 a
http://www.aftjob.com/portal.php?mod=topic&topicid=22
: ^+ n! ?) E: a3 Z6 n爱立信2011年实习招聘专题  p3 R/ U0 p2 U6 {1 Y
http://www.aftjob.com/portal.php?mod=topic&topicid=23, F2 n0 J) G: D! `" P0 c" G
新浪微博2011年实习生招聘) c  ~# j0 u1 y/ }( I6 A
http://www.aftjob.com/portal.php?mod=topic&topicid=21
% B0 e1 T% C2 H9 I# e$ v0 u阿凡提招聘http://job.aftjob.com/job
4 W# E3 k0 z% i+ E' I$ d阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
; k- t* s6 }* j阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
' w, ?& I. b1 W5 |) b阿凡提职位搜索
; X  o1 i* D3 }3 K7 D——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-23 16:15

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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