找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1316|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
& ~# X* o9 }) o5 ^6 I- }3 h1 {1 s1 {% b) a
Zz/ r2 M9 u5 K" m* V) Y

% d- |" P; F0 a; d# h  k(1)下面程序运行结果是什么:; a4 P  S9 O3 @* H5 e( V
#include "stdio.h"$ j& S6 c2 y8 u# J' {
class test
( e7 V% J7 C  Z: h* E, R{9 a9 f$ O" ?! h& }
public:
0 x% _" z* A/ P2 N# B2 V6 `1 {% Ztest(){}
  t7 S7 s# I; N* W# `! tvoid hello(){ printf("hello\n");}
0 X. N, E5 D8 p( e};
& S2 t3 [  i& r& d5 ]# \void main()
: c' z4 @+ ]. _( v: `: J{
. c# Z5 {: s+ @+ }/ E1 Y    test* p=new test();
6 h0 s& {/ X" @3 a2 T+ t    p=NULL;# Z7 F6 l+ z- O4 w2 A) o+ c8 \9 o
    p->hello();
0 h8 j. P# K, w}1 @* M' d' f# h/ n! G9 ]# e) ]
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
. m) e1 \; x. \9 z" V9 `#include "stdio.h"5 Q  Q( b1 Q: q+ Q
class test( l; Q% N4 @" n, a7 H5 Z4 r& u
{
8 J7 [* V* _" G( F+ ~private:6 p! x/ g0 Z. p* O
int i;
$ O" V" z9 R7 e2 u. Fpublic:
4 e% {2 w% J! Q6 L$ @1 r( X9 Etest(){i=1;}
2 ^4 \$ {$ `( {* x. wvoid hello(){printf("%d\n",i);}
) R; ~) y2 I. W0 _& R1 r& t% g};
, S/ \% s  Z4 u/ v7 e: x* Ivoid main()& ~% s. K3 l2 J; N
{
/ o& J7 C8 O" P! i! w. i    test* p=new test();7 P& f) j' `; k& T
p=NULL;/ h: Z6 |0 i0 z" }
p->hello();
  a8 F5 u$ c7 t0 e8 u1 H& w}+ N4 f9 [! ^% C1 W: y
如果将p=NULL注释掉就无误,就会输出1.* d( Z; R8 T; @5 ^
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。( B; y- W9 w, {; z( V5 j
(1)C++的构造以及析构顺序
1 z. [4 D# n" _- V1 ]0 g#include <iostream>. R9 k0 W- g% }3 o
using namespace std;
4 m5 |' ^+ t( H5 {" hclass A: R7 c6 ~6 S: m5 s7 @2 L
{
5 f2 `, G: _, [9 Npublic:9 M7 c; M4 |2 N/ _7 j, b3 C
A(){cout<<"A"<<endl;}( y, o& f1 [% R, _+ r& r
~A(){cout<<"~A"<<endl;}
( ]# Z! q4 i; X2 V, v" P: J( W8 s};
' E0 a9 e1 }$ d! _. @7 A- {class B : public A. n+ o7 h- m9 A# \8 f
{* d4 [# N/ v3 r! @
public:
  y; I) I% r7 S2 V0 n- l* H3 IB(){cout<<"B"<<endl;}) E: a/ Q1 C. e# b$ R% l/ F& O6 t
virtual ~B(){cout<<"~B"<<endl;}/ v6 e, p' o* L& v+ }( W
};
6 l( {0 \# O5 C- eclass C : public B, X* D& S+ x2 S
{: Z# [, d# Z: ]. p4 O9 w
public:' e8 j- H0 f; D3 L% U
C(){cout<<"C"<<endl;}: X  ^, ]5 E: N, d) g7 d$ Y/ q
~C(){cout<<"~C"<<endl;}. t% y, Y0 P- Q/ V# `! s! [7 y
};
7 O; m! Q1 i3 N+ [( H
+ `, w$ E+ c( r- O8 evoid main()
9 M( ~  H9 j9 K{0 G4 ?# G: t* w6 P0 r# U+ A8 t: _9 B
# n5 r  g  n4 y4 q
A *a=new A();
1 A" k  e/ d6 y5 d. G+ W# oB *b=new B();
) ]$ U0 ]  Y* o2 B1 i$ o3 E) t  C *c=new C();
( p# V/ o, x0 a3 zA *d=new B();
4 S# ?" @; ~2 y  N2 ^" WA *e=new C();) n& c5 \6 H: K" b2 s6 ?
B *f=new C();
  I' K" S# q# d( t. a6 L
+ p& x) R6 u0 P% Z  Rdelete a; cout<<"---------------\n";
5 ^+ f; i/ v- M; H+ w; ~; Edelete b;   cout<<"---------------\n";9 ]3 G7 e8 A! g! q2 H9 Z- O
delete c;   cout<<"---------------\n";
- k6 F4 s( W5 b4 |+ l0 Vdelete d;   cout<<"---------------\n";. a$ k. }+ m; r' g! X
delete e;   cout<<"---------------\n";0 ~! I! r: |/ h0 a8 U
delete f;   cout<<"---------------\n";
- Y, a6 c  \7 i) y2 L5 S9 a}
6 a5 ~9 K5 P0 i3 y这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
6 `/ I% w/ D0 M这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
3 H  u; P7 O; f) O2 i5 `  x其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
6 `; G  L( ^' f% x. F  Q$ n) K% ^" r5 ](2)面试的诡异题目
; i7 u4 u" n, V, V& J+ w( n& V4 a大意就是如果你 test *p=new test[20];. L6 `7 ~  y2 L- x: V, i
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
) q+ d; r) @; L7 n答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
7 ?' J0 O/ Y7 q& a6 }  L: C" w, C/ ]* t$ V
Zz
- k- L/ d5 ]1 D  {# }! [爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html7 @  R+ _  `9 T/ ], S
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
6 t7 }3 @: `6 r0 c. L7 B% y. h爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
* x* g% u  X6 y$ H" `——
' r0 G! o( V8 ]% o9 C百度2011年实习招聘专题
8 M2 {! l* W% K" H! ohttp://www.aftjob.com/portal.php?mod=topic&topicid=22
' r- d+ W8 M. r& H3 ^- v爱立信2011年实习招聘专题% m& l, E  y6 W6 H( Z: l) r
http://www.aftjob.com/portal.php?mod=topic&topicid=23
7 C6 g: J8 q9 }, ]) z  d  J1 k新浪微博2011年实习生招聘
- j3 B7 v6 p& @http://www.aftjob.com/portal.php?mod=topic&topicid=218 z7 h/ C& A: ?/ c
阿凡提招聘http://job.aftjob.com/job  N; n+ ~' c6 S3 B
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
& `1 e% U2 C! a- }; L& O6 L* [% p阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum" q, ?7 r! x2 G
阿凡提职位搜索
; I5 b% ~" k$ C/ L$ J! i6 c——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-29 00:35

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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