找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1099|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题& v7 Y+ e9 M' ]

1 u2 j  f2 v$ V  }! U' ?. J" C% WZz( S. a5 p) ^6 G( l
2 r. x7 T: K  V) ^
(1)下面程序运行结果是什么:
) O0 V5 u6 }/ ]" d6 B#include "stdio.h"
" b$ C/ j+ @/ c4 A7 Yclass test1 p+ q8 [& l8 t0 t
{
; z! e* X6 V: v3 x+ w. gpublic:' @& A$ E( P7 }; H' f
test(){}1 ]+ i" B9 W8 Z/ \# B
void hello(){ printf("hello\n");}" q/ [+ I+ ]! M! Z, E
};
- [" K8 U1 b& U8 |4 A$ Wvoid main()
6 a8 V: B& c0 t: Z' I8 j! \. f. y+ {{" Z) J- Z) y, o9 `' R, u! i
    test* p=new test();
  {9 |3 _5 G( v2 u! k9 l7 i    p=NULL;
( f1 Z( x  y6 A9 ^6 f: k0 Z, Y    p->hello();* E3 n" ^7 ?: |+ A5 _
}
- @4 K: W" n, e+ r, I事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
% }/ |. _1 G) x" f3 K( p#include "stdio.h"' }: [1 s) P4 H/ l1 E4 |7 `# s
class test
) w0 O0 K$ m) B5 e0 K' ]{
; E4 x7 a. W" \* ~( h3 jprivate:* j! p* Y- o' W& o4 I3 Q1 J
int i;
5 B' F- Y- n" \0 N$ T- M' Cpublic:3 j: d% U( r. V* U7 K: K
test(){i=1;}
8 U( \) r8 V* ^& s" r6 hvoid hello(){printf("%d\n",i);}1 R5 d$ a( v/ a& [/ N% n( V
};1 b+ w8 \( d6 Q, r
void main()
4 p! x. m* L9 M* w' z: `! a{
* a1 Q4 ]- Q9 N2 U    test* p=new test();  l1 J6 O% E; S9 D1 M
p=NULL;
3 Y/ L' _- K' t+ [8 `! p1 bp->hello();' I/ t7 y& j( R, d1 i% @" W
}* X" N- I" R5 E& z3 e: ~
如果将p=NULL注释掉就无误,就会输出1., i6 \! h) g7 M' d# _4 e  q
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。. U+ W4 e8 H4 W% x0 M! {0 X
(1)C++的构造以及析构顺序
! E" s- g( H! b7 p: _3 b#include <iostream>: S# s7 ]1 D! j" Z
using namespace std;
1 ?" |% ^4 j9 [$ ~3 _3 p! @" p1 Gclass A8 r  i: D# f# {8 [. _& ~& u' `* F
{+ S, {7 Z' d: A+ t- O4 m
public:
' q% _' g4 f( N/ j( F# r3 IA(){cout<<"A"<<endl;}
8 x2 n; S0 `4 v~A(){cout<<"~A"<<endl;}
+ }/ g! t- H) j% b7 C' I' o4 N};: k* `  D' c% u" N
class B : public A
+ j1 M6 [; W( r; s! f{
. P7 ~/ s) z$ ~' \  Dpublic:: d8 F' V0 s  u4 o* ?
B(){cout<<"B"<<endl;}
7 J9 k$ V7 j5 b3 Z  Ivirtual ~B(){cout<<"~B"<<endl;}
2 h1 A4 z. ?. k; z};
- q, |. ~0 c; R: N6 Qclass C : public B8 `  v) T% o# U+ K  m4 C
{- T2 Z+ K' ]) P: B
public:
; {" x4 k2 f2 Q' h& o0 wC(){cout<<"C"<<endl;}
: A5 g! ^& u' M: s; r; j5 s~C(){cout<<"~C"<<endl;}
5 e0 U1 ^7 `% F' l  _% ~};
1 u4 d3 i8 c+ k: s2 `& W/ P$ P% z9 D! Q5 _
void main()3 o* n& c1 {$ `5 W9 T8 R
{
* H, u4 o4 L5 c5 n2 C. P, U' k, J' K( n. m% j% e  E# o
A *a=new A();2 C: W) v9 O4 b- t( L! a
B *b=new B();# F" s. I0 `" Z6 Y/ i
  C *c=new C();( a+ s) Y# J' l7 Y" }
A *d=new B();
$ o& m  V4 @& C$ K' t, HA *e=new C();
. i6 v/ j5 I$ L; H3 f& ^# xB *f=new C();  R  }  u4 }8 ~& B$ t2 }! L. }

8 O* R, D; r1 Q7 m6 W- p9 Idelete a; cout<<"---------------\n";& a( z6 {, ?' Z
delete b;   cout<<"---------------\n";7 z* M8 B) Y/ R: a8 S0 ]0 E4 R
delete c;   cout<<"---------------\n";
6 g: _3 ?! d& X3 A& J6 [delete d;   cout<<"---------------\n";
2 j3 B- ?# ^$ ndelete e;   cout<<"---------------\n";
, X! U0 g3 |8 {" u. X7 |delete f;   cout<<"---------------\n";
4 W4 |! T+ B5 C8 }* R}
3 Z# k% B, X' @, n  h: X2 s! s这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
1 q4 E* e1 m/ g这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
/ Y4 b  G7 i" N* I' ?8 f( l其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
+ W' {1 S, S2 V3 F* {  v(2)面试的诡异题目7 o8 m! @8 y9 t/ |  K
大意就是如果你 test *p=new test[20];3 F) V* z. V& _. B
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)* Z# U' z( j" |! P( i
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……$ G! i5 Q- ?! W8 h# Z. N

; [. R1 b, q- Z0 z0 t% b( ?, d" ?Zz! r9 Y" t( o. m% i$ \7 c' B& I
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
5 i% }5 D9 h4 {! g. e' f上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* r- v4 P9 i" q$ }* N1 V
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
8 ]8 H0 Z$ }/ N( Q& ?2 ]9 P$ F——
. h. \4 W1 w; H) U, z- ^& g8 k百度2011年实习招聘专题  ?! `7 ~3 v( n* A6 h4 K3 ?; L; B4 ]
http://www.aftjob.com/portal.php?mod=topic&topicid=22# V8 \: D/ l. Q
爱立信2011年实习招聘专题4 S4 h) s5 f$ F  t2 }7 e$ |( y1 q
http://www.aftjob.com/portal.php?mod=topic&topicid=232 y0 S5 M4 J' D# d/ k
新浪微博2011年实习生招聘
5 {1 I0 ]3 ?4 o3 L$ @http://www.aftjob.com/portal.php?mod=topic&topicid=21( D2 \0 i9 [. c, D- |
阿凡提招聘http://job.aftjob.com/job5 m+ e8 C- B7 i) A: C
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag  O; D  R3 K9 q& }$ _; a) s& C
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
- `, Q5 ^- R2 L  R3 V: b6 |阿凡提职位搜索3 K3 a6 C$ Z; G: h# e; I
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-1-12 09:35

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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