找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1220|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题7 E( h8 f, y: ^$ G

2 h: ~  a# j) P6 t! d( pZz/ V9 l0 b6 W( k1 X- f

0 R8 x7 g- H, f+ z- C(1)下面程序运行结果是什么:  r. R2 _$ w3 B8 k) _( ^7 W5 a
#include "stdio.h"
5 f3 u  e  F; }, d; Kclass test
5 @6 w7 J: m# r: p5 {{
% d+ Z" u, y0 q* Opublic:1 N* l( r9 l( x& A
test(){}
4 Y& M+ m* q5 f6 F1 C) Q1 ]; S* Hvoid hello(){ printf("hello\n");}
7 s: u$ \! x3 l# B; N$ x3 u};
& U  U! }" k* Kvoid main()
) W& K9 s, z- u7 [/ U# h8 \5 d' O{
: c" x6 N, G( u0 a+ t7 V. K    test* p=new test();
/ D6 j( x- D9 w8 T8 c- T; A: X    p=NULL;
, D  V- m& r7 _* Z7 i0 V) y    p->hello();
6 ], K' ^& _" d}
. I2 {$ K) p# ^! u" T+ Y/ J事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:3 Q' a$ g1 a6 E3 d8 z+ Y
#include "stdio.h"& v7 {: ?* |, ^( W" T
class test6 N+ @$ h& x$ [" m) J) R
{
/ m7 T% s6 A. yprivate:* ~3 @1 f. b' {) D# `/ {- ^. Q
int i;
4 t8 k& g+ }/ s4 q% w1 Cpublic:0 c. p0 @% m- e1 j3 J
test(){i=1;}
& z, x* e4 b2 d3 G! Y; x) bvoid hello(){printf("%d\n",i);}
. ]3 e$ c" Y6 \& Z/ |2 j$ k};
5 k: {- t5 _1 a6 Qvoid main()  b1 }1 t0 D+ e- ~: I/ K3 Z$ {6 j% U
{
2 K2 [  U3 f/ r5 E9 z2 w    test* p=new test();
" W6 [- r1 C* K5 B, d' Xp=NULL;& x% q$ M1 }1 O3 d. O' V
p->hello();0 b1 e( t! K4 S+ T5 m+ _# H
}" ?" ^% N0 z6 G; \+ k
如果将p=NULL注释掉就无误,就会输出1.
3 d# z. w( v: k) e. g注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。" c& s; C( [: C# d4 @! X' P
(1)C++的构造以及析构顺序5 Z: H# L8 g6 x3 S; t; O: H* q$ z
#include <iostream>3 W4 O! N' F) {4 i5 B
using namespace std;
: d  a, Z3 F" b1 m/ hclass A  C8 N/ L1 M0 E+ a) m8 D* w7 a/ t
{
8 i# q' ~0 N# \public:
! l/ X4 C5 ]3 s; n" [3 y* W$ S3 g* m7 eA(){cout<<"A"<<endl;}
, J+ S! n0 }5 T~A(){cout<<"~A"<<endl;}8 E; {6 \3 t" M; r( B
};; x& ?* p+ i( }+ S4 H2 O
class B : public A
( Y+ J7 |8 N7 @{! ~4 M* Q+ L" I2 j$ m- \
public:
2 w; B! N- [6 g5 a  B/ d% y* c3 CB(){cout<<"B"<<endl;}: L* o- b9 }1 |$ Z2 l  H" ~. L
virtual ~B(){cout<<"~B"<<endl;}
3 b; \7 L0 M5 _! v4 N0 l. N};
; t, ]) c; W6 U0 \" Z1 c4 H- eclass C : public B  O" Z2 e( v8 b4 @
{
0 L8 a! L" d$ P0 Y# e- upublic:
+ v- {) I3 X$ x8 X9 ZC(){cout<<"C"<<endl;}  i$ i3 x4 q/ h# \; V/ ^; ~1 T9 V
~C(){cout<<"~C"<<endl;}
2 C6 ~( c) C1 ~! E4 @};
1 f6 _4 ]$ A' U5 W) |
; K$ M) A8 A$ V- K( ~void main()# _3 D6 a' b! _) ?" p* x
{3 {: u8 H, e* c1 a/ ~

5 w' s% R- X+ `A *a=new A();
# R' X6 O. w9 RB *b=new B();
  `: X# L( h' \, H7 x  C *c=new C();, h: R9 B2 ^2 i* g4 ^; F
A *d=new B();
% ?. m; T8 F* G3 l/ EA *e=new C();
" M' R# R' M  e% F7 kB *f=new C();5 h# _- N5 p8 A3 o3 a3 V
5 k. {* V1 M  e/ Y6 V' |& j. Y
delete a; cout<<"---------------\n";
% d- i& }" i4 ?, S, y- Q* }delete b;   cout<<"---------------\n";! ^) e* O! x$ s1 x* z" s
delete c;   cout<<"---------------\n";
. \# C8 q) M5 z3 [% b* [delete d;   cout<<"---------------\n";
) l- k. T* I5 c& rdelete e;   cout<<"---------------\n";8 o& n  _8 |( a0 s" X% y" P. d
delete f;   cout<<"---------------\n";9 ?& l5 b" g5 T: J% ?
}0 o7 z1 p( @* q% u' n' _
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。0 g, w% n* }3 o, H2 Q+ i' J& ^
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
7 _) \# Z& N3 v) G- i; Z其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵): ?. k# W& h6 @# |7 `
(2)面试的诡异题目
7 j8 n' W" k  d- E& c大意就是如果你 test *p=new test[20];
/ u! u( l" Q& @# ^然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)% [- V) f: @8 M! z; N* \& w
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……; k# S) w9 d, p5 c# ]4 W
4 }& G: j/ ^1 x4 r. Z% I4 o
Zz! i) \; z  @5 y6 a2 c3 `( I0 Y1 c
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
* |7 p8 @7 J$ t6 a+ K" {上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html5 z2 g; @4 J$ V
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
: j2 H( p5 M0 q2 {——
. w1 R! s7 m8 ^3 J2 d3 _' R- z百度2011年实习招聘专题$ }$ O3 k: G3 y2 E: F3 u
http://www.aftjob.com/portal.php?mod=topic&topicid=22
9 [+ W( l0 s  K: ?! u9 S爱立信2011年实习招聘专题
& C6 q& n1 e" l6 |  @5 u/ H6 Chttp://www.aftjob.com/portal.php?mod=topic&topicid=23
7 w; r  K$ Q4 w( V+ R新浪微博2011年实习生招聘5 C* M  H$ i/ F: B' w3 U
http://www.aftjob.com/portal.php?mod=topic&topicid=21( n' ]1 ]0 I1 j7 _
阿凡提招聘http://job.aftjob.com/job
, L9 N9 y/ y8 k阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag1 ]0 l/ m7 D6 K5 k
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum* `; D0 Q! r; ]+ I4 W5 V$ l
阿凡提职位搜索' t2 A* e) O- s! |0 z4 [- p
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-10 08:21

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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