找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1141|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题6 k# H( W& H! G6 g; c6 s

7 f$ c; o, [& _6 WZz
( Z$ a$ y/ }0 H5 n3 s# f8 U* p3 W+ |
(1)下面程序运行结果是什么:  \) J, a# ^5 Q. N9 s
#include "stdio.h"; [9 \; V- D8 `* O& [3 Q$ k" b
class test
4 M9 e/ d- j2 }{8 w! N: s$ H- N4 {  w$ I$ Q
public:5 q9 c# r) |' q
test(){}
5 U# a4 w4 \& X9 [# O! ~% [/ Cvoid hello(){ printf("hello\n");}
& ~& {# O( n. D3 a9 I};
  p3 T/ S0 F0 F% X) Wvoid main()
% c$ B) k: ]5 b$ q. D3 V{
& Y6 W! M/ O  S7 @  d    test* p=new test();
8 k# k, B* R& O( p" c0 K2 O5 @& M: g    p=NULL;
1 Q- a+ M0 j% D) ?0 F$ C& A$ ~' j& y8 T    p->hello();
) I# V" r7 c0 q( G0 [* W! q}+ \$ t, Q' v5 q# k7 B. m, Y
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:8 n8 i% V* x( G$ r" Y1 u
#include "stdio.h"
4 u( |8 V: o3 T9 |7 q* ]0 cclass test% y2 W; B4 S( w" j, Y& h8 J! ^) \3 D
{
8 t9 L6 y. @3 E6 `4 Pprivate:
; ]" I! M1 C% Z' Y2 Eint i;
/ q0 ~! D& j; D" j- `# x; \public:* r, ?# H, ~- C" }# _* ?
test(){i=1;}, n6 B$ Q, C0 h+ h
void hello(){printf("%d\n",i);}6 }1 u5 X) ?0 {2 n: q# X+ H
};# g0 L6 F) i) b
void main()
% i! N& C( q0 z6 Y2 K/ _; U{  U( M+ Z3 P: T- `
    test* p=new test();, F1 g# I1 t! t2 h( N9 {3 ^  S8 ~
p=NULL;
/ e6 c( X% [3 R! J' c1 |p->hello();
+ u# i% p" r- E* `5 K$ C}) c7 m( ^/ |# u
如果将p=NULL注释掉就无误,就会输出1.
; R* c' d# b  ]- ]/ n注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
$ x- d, u2 l4 b# e2 w; ~; i8 i! S(1)C++的构造以及析构顺序) C1 j' r* N( B4 p% H
#include <iostream>
1 x; P+ c0 a: o2 ], i# ?using namespace std;
% G% v+ r& U5 J, G6 I6 _- _class A
$ Q; _) v$ s0 J+ J{9 l5 }: J7 c5 y0 Q% q1 H2 A+ V9 Q
public:
4 F  M" D% n! }9 g) ^: |' |A(){cout<<"A"<<endl;}
0 q" v" Y8 @5 `+ r0 o6 [0 `~A(){cout<<"~A"<<endl;}( T' J' z; B, p3 G
};
( s# d, O1 D8 ?6 l0 nclass B : public A; c( d4 x% R' M: G& n+ z8 E' t
{. p; B. k; m  F( P- p) |2 `
public:
/ q- L: h4 t- q; DB(){cout<<"B"<<endl;}' D4 [% S8 q/ s6 e: x8 J. z
virtual ~B(){cout<<"~B"<<endl;}
/ |; `/ z- _4 p0 j! v};( \- x" U3 b- f- Z
class C : public B6 M- q0 L/ c, P/ T* s9 {" Y
{
/ U' t% W2 ^; _6 v9 Z+ g, Lpublic:+ d0 j3 w# D1 z8 ?) X5 g
C(){cout<<"C"<<endl;}
  {3 E; x6 h) Y# L" ~~C(){cout<<"~C"<<endl;}$ f- ^  O. P; J3 k8 O
};
. ~+ O5 I, P0 w' y
3 A, c( s+ x$ j( Gvoid main()$ u) K( b) p/ i' ~* ~; K+ y8 y# z- u
{$ U* T: T6 E5 t- I% p* D7 G& q6 C4 b) B

  _) u0 I9 V4 y. r8 ]2 o% JA *a=new A();! w3 l6 q3 _! |
B *b=new B();
. a3 n+ T/ \2 ]$ K) \$ S  C *c=new C();
* l$ X3 \1 h; HA *d=new B();
7 C6 [. Z/ J4 z6 k- K! G) m& [) rA *e=new C();
0 n( L' M2 O) G6 A9 UB *f=new C();
" O% R$ m1 ?2 K+ J" x9 z
1 a; q: d. a# s% i7 ~% ldelete a; cout<<"---------------\n";
! S! C! m' G4 C0 N4 cdelete b;   cout<<"---------------\n";3 _* K3 v; }6 [; N) b- y. A
delete c;   cout<<"---------------\n";
, _& J) |, W6 h( m* }delete d;   cout<<"---------------\n";
8 o; e" H- P7 m( Qdelete e;   cout<<"---------------\n";
: ^: O# k" D: g5 Cdelete f;   cout<<"---------------\n";
$ S: K, e9 \- n) |}8 J' Z% a, G9 n8 T  @  |+ N- A( ~/ [7 p  C
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。0 [. ^# F; u4 U5 T! B, N7 ^
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。- J  p8 j4 i( F5 E: ?
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
( ~2 E: i  ^* Y+ ]1 ]5 q3 v(2)面试的诡异题目2 M* W8 B2 Y! W
大意就是如果你 test *p=new test[20];
% {* P6 Q' ?6 A然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
- o$ p+ y( Z3 A' V  C+ A答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……- k( L! U$ H& i3 e% W

* k  z  B8 D6 CZz
& z6 f4 D5 _$ e1 X) S# c3 N2 o8 ?爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html5 E5 w, Y$ o4 z: f
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html+ o3 c4 U  F* |( A2 Z7 ^2 e
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
0 d/ y2 r% ~& \, i2 L——$ X- y; Z( D' M, Y
百度2011年实习招聘专题
" H$ s' Z8 ?0 E, t) Q: G: fhttp://www.aftjob.com/portal.php?mod=topic&topicid=226 P: x" H7 w; i
爱立信2011年实习招聘专题
) ]: j9 ?) ^8 m* a+ Mhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
9 l. E8 m  m" @' }2 P新浪微博2011年实习生招聘
- s& l5 v2 X2 ~% Khttp://www.aftjob.com/portal.php?mod=topic&topicid=21
- p  @$ [% F' [! d+ ^7 [  C阿凡提招聘http://job.aftjob.com/job0 Z7 l' r- ?2 [" g
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
+ w3 G, r9 ?  @1 V/ v& w阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
5 q: ]* X6 b1 E2 \) `阿凡提职位搜索
$ e) z" i1 W  S% k2 t3 {2 T. b, c——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-23 04:16

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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