找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1193|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
6 l& P. T# o- {- f
" O7 e6 {' B8 g% u3 P) G1 UZz1 m0 g+ |- K0 }+ q; h5 Q
- p) b7 J5 w2 \! u. @- I7 r; J
(1)下面程序运行结果是什么:
2 ?" ^- k6 G/ s1 A#include "stdio.h", y2 K  U9 J' ?$ }
class test3 m, N" l( T$ v7 ^2 {
{
& u! N: R) w  l. T0 e) Kpublic:
" h. f' T# D' X: _6 btest(){}
. d% L' H! ?& Q# H( I  b0 ?void hello(){ printf("hello\n");}/ i" `- c9 y# U6 j3 l3 Y7 {+ @
};
4 j3 _1 N) }+ w7 _; }void main()
" C$ c- U9 e( H- X& C5 o{
, `$ {. [9 t6 e- g7 Y; a* m    test* p=new test();
: [" e* }2 i/ P4 ]+ x    p=NULL;
/ J8 N; Q. t- F2 }    p->hello();" ~" z/ S) {7 P* b# N& j. ^% `' z
}# o( M6 |; o+ y1 ~  ~/ ]- ^
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
/ H* W8 S* ^, h5 S! e; d8 ]; R1 J8 _#include "stdio.h"
9 t' _! p. g/ f- Q( k; R- w( c! Vclass test
  t& K7 g. P4 n) h  h{( y! |! [* w( ?
private:
" T% U7 m5 {! P5 Hint i;
- D8 z) G) e4 A4 h- apublic:/ ^* S$ m7 A4 k3 Y9 Q
test(){i=1;}
6 B! o" q# V4 k9 K" _. U$ bvoid hello(){printf("%d\n",i);}
7 @. _+ N: S% w  O7 K2 i* M};/ ~/ [! L: C- \  S
void main()
  n' x4 `6 {2 E{
& v* _5 L+ [/ ~2 d# q8 n    test* p=new test();
& q' v* B, _) r% ?, [p=NULL;& ]% [+ B* I& e, K
p->hello();
/ g0 c. i2 c* N6 o8 f" s5 O}  l, ]$ O1 A2 |, J( U3 V
如果将p=NULL注释掉就无误,就会输出1.
$ M7 w7 {. _6 V. z4 Z# T注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
6 Y" V7 G: b3 N; \(1)C++的构造以及析构顺序
) r. C1 i5 Y" k#include <iostream>
% @, y" [$ B, u6 b" |using namespace std;# Z  C$ C: B$ ?2 `* z
class A
- z7 m( Z( h- c{$ u2 k+ V( z' O# p  l" C+ D
public:
& e& e) r) S4 D- e9 V4 ^A(){cout<<"A"<<endl;}. W5 V% Q/ Z- O% n
~A(){cout<<"~A"<<endl;}
+ t8 r4 _8 z8 q+ [8 z& h4 p};
9 i6 U8 q# p2 c4 b( y. sclass B : public A9 N) M0 X0 b4 g$ N! {
{
. {- N2 s* L# A7 K9 F" [public:) Z" L2 F6 x2 t
B(){cout<<"B"<<endl;}3 Z7 d% v8 p; s3 d/ Q5 ^
virtual ~B(){cout<<"~B"<<endl;}
/ W4 c& @$ m7 Z5 V% @# w; s# c$ J};
8 X& ^+ T! r$ O* y* k) Iclass C : public B
* W2 k, u6 B2 c. |% G! s0 q; {{
6 t( v0 b: w# ]9 a5 Wpublic:
& r) [5 y$ c% D* @C(){cout<<"C"<<endl;}8 |/ d: p! u, o; D  _7 E( i5 P
~C(){cout<<"~C"<<endl;}8 \0 p/ N6 p4 Q  C4 g
};) O+ F0 j8 ~( n1 v  J" m2 q

+ @6 H) d% C: Z% T1 A' H5 cvoid main()0 h0 ^) h: y" G& S8 E, ]
{) A  z1 i% n( \% r0 D
- \- [% @% R# S8 F+ l% [# S/ M
A *a=new A();
0 y8 W0 i* X; v# G& TB *b=new B();: A! D- V* F8 W0 _
  C *c=new C();2 s/ E5 M& K  A  \7 K# w$ n" x% O  @
A *d=new B();
4 f  j( i# D4 R1 B7 B& q# \+ kA *e=new C();
, f" O$ X5 q% M" ]B *f=new C();/ p/ x2 V4 r, ?' o$ c

& D# q% n6 O7 n8 u5 kdelete a; cout<<"---------------\n";) T6 |" c: Q1 t# P0 {
delete b;   cout<<"---------------\n";
$ f0 R3 X; f, l% A. d9 vdelete c;   cout<<"---------------\n";
2 Q# d7 \+ B0 q. L& H% L3 h5 h8 Adelete d;   cout<<"---------------\n";
) b5 _# Y0 S  y5 Tdelete e;   cout<<"---------------\n";; s% g' W( P$ o7 j/ d9 s
delete f;   cout<<"---------------\n";
1 D  H# `# }5 a& Z" W7 v7 Y}
& F% S) }' ~4 l; ^% l这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。1 a/ n, j# c) W* v$ O
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。# m8 J$ Z* ^# h1 k1 a4 P! O  y  s5 H
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)* Q' ~4 l7 c" q" E& h8 k8 U8 T; f
(2)面试的诡异题目: @. G3 n4 K; g* _# T
大意就是如果你 test *p=new test[20];# t- g0 ~$ ]$ K6 _1 R0 Y
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)& I# M; L& q, I. Y& Q
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
) u# `4 u& l( t6 M* r+ p, Z. [) ]1 F; l
Zz; Z: ~; B7 h. p) l" Q% J: n
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
+ r8 A$ s# `. \) T. t8 G上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html) E4 y/ P% U, t: z: W) z( s
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html! l% v6 J: ?. k( Y/ K
——& t  K/ H3 V  O+ T3 {" I/ ^  L. ~7 t
百度2011年实习招聘专题
  L7 [$ `9 W* `, ?0 Mhttp://www.aftjob.com/portal.php?mod=topic&topicid=228 e1 S2 W' R. C) x
爱立信2011年实习招聘专题
" j9 t( }$ s/ C+ {http://www.aftjob.com/portal.php?mod=topic&topicid=23
; p4 k9 _+ V# A. B& ~) q5 |& W( f新浪微博2011年实习生招聘
% c, U  ]' g& q) Q" ohttp://www.aftjob.com/portal.php?mod=topic&topicid=21
0 A: O( o" B; H( V) ~9 S( Z5 G阿凡提招聘http://job.aftjob.com/job& y, s/ ^% O/ x& H1 C: d
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
  x0 c$ s0 _  A5 K阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum( n0 a5 I  ?% c, G6 F
阿凡提职位搜索
8 e# O8 M+ e( t——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-5-8 08:35

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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