找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1075|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题% U& f$ g) }* W/ j- ]  ~- q) }
$ Y* E8 g( a5 l+ V6 O
Zz* x, f0 ]2 B; R0 ~
9 a4 G8 {( Q1 H7 E4 H# u+ U: P
(1)下面程序运行结果是什么:2 `; ]# ?7 j, N3 v) [
#include "stdio.h"0 J: c. k) s0 T0 Z1 I8 f
class test
4 m( T5 Q1 ?9 u( j1 I, ]  K& n{
$ c* p! b6 f6 E% Mpublic:; M" ?( P; J6 x  K/ o# D
test(){}1 R$ z: S; ?* }1 Z4 c6 m! U! Q
void hello(){ printf("hello\n");}
6 n& G5 }7 I( M' _1 _7 ?};
5 X; i  L/ o0 I2 N; {! @void main()$ w+ Q6 I. R# P9 S6 c2 _
{
) O1 m: v. ^8 l  I: V    test* p=new test();
( e; B- [% Y  u( `, e5 \    p=NULL;. [& o! m6 u1 z% Y
    p->hello();4 M+ f( e, ?4 J' ]8 o
}' x$ {& x( D" @% M3 _
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
+ g0 M/ M) D: W- N#include "stdio.h"; g- [" e4 A1 k7 M7 C- l, b
class test4 X& ~7 E3 c9 H7 X
{& W9 e4 ~  C/ h# I8 E
private:
* G$ A9 I7 {% \6 Y% X: Mint i;- _0 {: q( o& E, V' Y, A: r! ]" V
public:3 e$ ]2 T/ {" Z& K8 {" s
test(){i=1;}
8 a" K: G1 e, C* s, }5 ]7 ovoid hello(){printf("%d\n",i);}1 G4 \0 R0 A8 G( l5 ]! s: A0 y( o. ?
};/ T  s4 }, s6 r
void main()7 u5 [4 |; G7 E6 [0 Y: |  E4 ~
{
+ r7 Y5 m* n, G* X/ v  w9 E    test* p=new test();' ^9 d0 _  J' e$ \
p=NULL;
- A0 q. z: E/ ~p->hello();
, ]9 d- `+ q) Y1 A& U. [6 S$ A}
/ y% O8 G7 t$ n" r9 `3 }8 t& F如果将p=NULL注释掉就无误,就会输出1.
* c6 D7 G/ G3 U" H- P2 n注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。9 d1 V; h/ J- ^( E
(1)C++的构造以及析构顺序4 W% v6 h, Y9 K' P, |
#include <iostream>: b( j. {; M! J( G: A9 }1 h
using namespace std;; C' I# f- @* I' X: x
class A, @9 Z: Y7 [: z9 o2 {, g
{! R  Z: K: N: f; }: ?9 c
public:
+ y( l4 E9 X/ @; G! c# X# aA(){cout<<"A"<<endl;}* C8 Q6 }2 |6 J7 p& Y% J1 Y
~A(){cout<<"~A"<<endl;}
6 k1 r% ^* p5 {: |};9 y6 F! O3 ^/ a6 m6 ^1 I( Z% i* E$ J' {
class B : public A% m5 K3 P- C1 l  m5 q$ m: K% m
{5 l/ d/ j: y9 i3 k/ t, e
public:
. @4 |( H" m2 r& X6 s0 \B(){cout<<"B"<<endl;}
* D5 i) w( M* u! M; svirtual ~B(){cout<<"~B"<<endl;}% r1 g: G, a0 R; ~+ `/ o
};& c$ r$ X; J0 @- a
class C : public B( S% w* f1 ~* M( b0 d# G6 }
{" c1 U& C2 q7 {" B- d
public:
9 H. [( ]0 y5 ]5 y5 x, K; k% UC(){cout<<"C"<<endl;}, n' n% L6 [' y5 M3 N# C
~C(){cout<<"~C"<<endl;}* t) Y2 b6 f# c: ?& n. h: g% k- b: T
};
* s( Z& O& g4 s7 m0 [3 n8 e
% W; x7 |: \- A& k& nvoid main()
# N) {& ^  m5 g8 k* L% _" m{
0 l" i8 q& W4 p8 R
- P: x0 H! f% qA *a=new A();
$ W+ l: I2 [+ b9 u" qB *b=new B();
9 E; \4 D- I2 X0 b# z) Y7 K0 N% E  C *c=new C();  c. P0 t6 }; Y6 V/ c; v) R
A *d=new B();
1 F' g: J2 ?, o% g) w& mA *e=new C();
, O6 {( G! _" A- b1 T9 YB *f=new C();
( R) ?0 P9 L0 h6 Y  x* A& T  ~8 s: J* J- n0 f( Y# V1 r
delete a; cout<<"---------------\n";" S6 x8 H( g' a; B  j( Y( W
delete b;   cout<<"---------------\n";
: M+ I! P, `! I: Cdelete c;   cout<<"---------------\n";6 Y8 \# d' R( A1 \% L$ ]
delete d;   cout<<"---------------\n";- ^8 [) v8 z( X6 D* Y0 e
delete e;   cout<<"---------------\n";& _1 q  S( t' I( \8 f
delete f;   cout<<"---------------\n";4 g) j; g- j, L  x$ C2 s3 l. K) P
}
7 z; {3 R, D- u这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
% I* R- U- M4 r8 p  H/ s这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。4 e2 n+ r& I0 P- N, v9 Y* u+ o6 W" ]
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)  ?  y1 K" c% l' `$ H
(2)面试的诡异题目
; P' r0 v, t# M7 r; Q" G  b大意就是如果你 test *p=new test[20];
! [8 I* C( U8 e2 {/ W: T然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)9 p# `; k9 V7 b# Q
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
- D! W& `8 S' E2 u  h2 j& g. B) n
Zz8 f& S4 R( @, `4 e# B8 D7 H
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
( F4 _, W+ K8 ?7 v( p8 S. h上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
1 b  x2 H% E+ F8 n8 G9 A爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
. ~3 r; q' v8 |/ r. t% ~5 m* [! c——' ~1 ^: i: z  ^
百度2011年实习招聘专题2 T" e8 Z4 `9 {% B1 V7 D! [* ^) Z7 C+ r
http://www.aftjob.com/portal.php?mod=topic&topicid=22
4 V( f# |# b8 G2 N1 p% Z爱立信2011年实习招聘专题, O3 M  H# r6 a* w6 Q( r
http://www.aftjob.com/portal.php?mod=topic&topicid=238 D$ k; W- v* i% ^
新浪微博2011年实习生招聘4 @/ Y8 X8 M6 x$ ~' P5 I* e
http://www.aftjob.com/portal.php?mod=topic&topicid=21
1 O* J0 O0 B. V% t阿凡提招聘http://job.aftjob.com/job
5 e) w' E% ?$ I- l- ^& L$ z  R" t阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag7 w3 j* i2 a4 g+ P! r
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
: [' \+ M+ s) G6 I阿凡提职位搜索
9 }3 E1 h: R+ F! Y+ g/ M6 B——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-11-23 19:28

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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