找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1257|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
& Z5 `8 a/ s8 n8 P& J3 H- A' C5 O  S9 G: n% C( M2 W% u
Zz
# d/ [) O4 Z7 n% k
1 H5 ~' P: ^2 {(1)下面程序运行结果是什么:
) n5 g6 i$ _0 e, F( f#include "stdio.h"
* T& ~5 i& h: |6 mclass test
( ~' }3 i; _) A" s% V3 F{/ n* s# n7 W3 Y2 S) K6 n$ j$ g
public:
/ n" |6 J1 K6 w) k$ U; g+ O! otest(){}
8 P( C4 G* [3 J+ \void hello(){ printf("hello\n");}
, p& }3 b' n8 W- W& |};! ~5 Z; k+ o# ~8 J! h
void main()
. u: B. R. U, ~: l' G" P. w& ~{
2 D' T) {2 c3 X1 x# z8 h6 F+ Y% R  C    test* p=new test();0 U1 R* `3 P- [) |+ n. \
    p=NULL;: ]6 N. b, t. }% ]
    p->hello();1 W5 X0 F: q/ w' c
}
2 i* a  ?, u8 N1 J; e5 q) y事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:- W" p2 i* {9 K, e: [% p
#include "stdio.h"
9 |/ j: L% g# D6 V8 \  X: `( }class test
- a: C: `$ G9 y& n% T) F/ \{8 I% r4 @0 E! s2 v  n  i- R
private:& D1 Z1 Z4 g0 s5 Y9 x1 p$ W! c
int i;
! t& f8 I0 }' E; e( h5 Xpublic:
" U8 f' ~2 H+ {$ z* Btest(){i=1;}* [( r% m1 o5 h9 u
void hello(){printf("%d\n",i);}
! L! X- o, K$ _* T* }};; S8 v) y- {9 u' l# S
void main()
! \% p: i+ j+ P4 u* _$ C{
% e/ p" M5 d) G$ I* ^    test* p=new test();8 }8 T+ z/ V7 R$ I% m* X4 K/ h
p=NULL;
$ p5 b+ _! ]8 s- f5 E- Q- np->hello();# x9 V2 i3 M* I# ~& N( w
}9 o, j; z6 O2 U6 V, J6 y9 @
如果将p=NULL注释掉就无误,就会输出1.: ^* p, W* B6 J: x- G
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
4 e" R$ i- T* M8 e. I4 [(1)C++的构造以及析构顺序7 e/ L& U* a% ?: P
#include <iostream>
! w% L+ S5 I' T7 g! p. h7 Eusing namespace std;1 M3 I! i, N: L
class A- W! e- S: r( e6 q' {9 ~) `3 v
{
3 \: a- ^* Y$ _* F3 E* U7 wpublic:3 [: \, |7 L2 j$ E, \% @# T
A(){cout<<"A"<<endl;}
8 F6 S. s' g# @7 W- a* B. f~A(){cout<<"~A"<<endl;}( ]' U& i: S' S4 b
};
" F! L1 v6 J9 \4 sclass B : public A
* |, G* U3 J3 t0 m& i' K{$ j; H4 ~3 a# p) w3 y
public:
8 ^! r+ ~# [3 y" g2 qB(){cout<<"B"<<endl;}9 D3 B& n, s! {$ B! n
virtual ~B(){cout<<"~B"<<endl;}# l+ Z; O. O' C* c  j3 ]" f* }
};9 H' V6 ]' t) k2 q  J* ?7 _
class C : public B* e5 j/ H6 ]6 y! x4 s( Z
{% Y  e6 w! i: \. q4 Q( W! H3 y
public:: T% U' r& H8 D; x. S
C(){cout<<"C"<<endl;}' U( y2 z% A+ ]1 K. a
~C(){cout<<"~C"<<endl;}5 O$ G# Q& F6 A5 B3 z; n7 V4 O
};
' ^8 u+ w( ^1 L+ P& n$ ]: L9 D! M5 Z, y# q$ B1 E
void main()$ H, `5 a( q0 u$ W2 p. Q# x/ H
{1 G+ l4 x/ s9 |9 o5 T2 i

, ?" z$ A8 a& Y% W% EA *a=new A();; [2 z2 F. V3 e6 u
B *b=new B();
$ p8 L6 {0 m% ?' I* ?  C *c=new C();
( J* m- s: R% n# r; ^5 HA *d=new B();- R3 ^& {" k: m# {
A *e=new C();$ N8 Z' }' }: W$ F5 _
B *f=new C();
5 N) v" B3 k* z& b9 O- T8 Z  u7 q: O
/ n7 X' |5 ?! G! H/ qdelete a; cout<<"---------------\n";2 [) Y4 F7 x( {+ |- A9 Q3 h9 H
delete b;   cout<<"---------------\n";* X+ A5 q  f% l- f* A
delete c;   cout<<"---------------\n";
. J1 a  n% [% k, N5 qdelete d;   cout<<"---------------\n";
4 ?, I. B/ c& [+ @9 Sdelete e;   cout<<"---------------\n";
; J- M6 e" f- E; {. L2 T, qdelete f;   cout<<"---------------\n";
/ F2 J! S% C$ u& x}
0 w9 ^1 o9 e; I7 I6 t/ X; g. s5 c: s这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
: A9 U. L6 y  g; t- M& |; n这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。) p$ b4 s1 U; Q8 t* g
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)' n0 \! i$ c, [$ Q" c
(2)面试的诡异题目6 A! B4 Z/ j6 K
大意就是如果你 test *p=new test[20];$ v7 h" M  v0 v  r/ U
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
) J: l; ^+ T6 I0 W- A答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
3 w( Y$ n, f5 R/ x* G5 y2 m( R5 d) w/ \" X
Zz1 f& y. ~% s1 j2 U9 F9 M
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html' Y+ g+ Q4 g) N& m
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html3 F0 y: V2 ^# [4 g& f! \* D
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
* y: h7 e0 g; n( A5 h1 E  S9 R——: y, y. ~# k. @) A" T
百度2011年实习招聘专题3 ?  m8 A; a) m  d6 k: o
http://www.aftjob.com/portal.php?mod=topic&topicid=225 b+ r' P/ `# p
爱立信2011年实习招聘专题" [. z$ C7 j% g7 X8 G# _. I
http://www.aftjob.com/portal.php?mod=topic&topicid=23
: L. K6 f) {0 ]1 Z新浪微博2011年实习生招聘
2 p+ s; E, Z( I& rhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
1 _. X5 E4 v* h# c+ R( h阿凡提招聘http://job.aftjob.com/job
) B2 p4 J  r) V; `2 v! ^阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
, Q  X# H* g- {2 H( Z阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
1 T- Q$ f# N, M) t# X# H1 I2 D阿凡提职位搜索+ c# k7 c6 U8 D. T# Q# r
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-28 13:38

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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