找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1303|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
% v# q" v, @$ |7 U& \$ ~1 q
! H  M* n! ]( t  K; M5 G6 P1 dZz
* ?2 U7 w* Q% F& E
- o4 M: k9 N& @(1)下面程序运行结果是什么:' h) t& Q# w% i# U7 x
#include "stdio.h"
! f1 s: c( n' l1 R  j$ Aclass test, U1 Z% y, P! ?' y- f* N
{
' d- o3 d! s! x2 v% @public:
3 o/ M8 d6 V* ]$ E- [test(){}2 R/ P; u( g7 h; d+ k  _
void hello(){ printf("hello\n");}& d3 s' ?" `' B" z- F9 P
};( ]) B6 z. K+ W7 w
void main()3 `9 `" Z7 s4 ^& w- X
{
/ ?2 a* O) ~0 f, j    test* p=new test();
1 C4 l$ V2 y  N$ K    p=NULL;0 b* X0 q6 ]: {3 p- e
    p->hello();
" y2 x3 U9 x6 t$ X}
0 C. [  R; Q: R事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:5 y2 i4 y; l- d# |  f. S
#include "stdio.h"
, U# B6 w* p/ tclass test0 p9 u  I, y( Q. b' g8 W$ k
{% c* y  z9 A' A' Y, O2 R
private:4 f$ |9 V- u& s4 `$ z4 c
int i;4 F# W* L) t0 K" |
public:1 T; h) R% x  {8 e
test(){i=1;}
9 M) w# o1 ?# x  b9 @' F- mvoid hello(){printf("%d\n",i);}
, \: A; N$ ^7 B% i1 Q( j; G) V};& M, V6 I8 ^  @  @: a5 J
void main(). w" z  a* F/ ^% X7 W% b9 [
{
/ g1 D5 R4 _# Q! c3 Z1 i/ k( k    test* p=new test();; s" p/ ^9 m. ^
p=NULL;
& l- |; U1 H; b$ mp->hello();
' V/ t; d3 N. ]: y+ Y8 k9 z, g}+ |, g  q. [& q+ }- u
如果将p=NULL注释掉就无误,就会输出1.7 `' n9 H1 A" C: o7 }. d
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
2 ]& a+ l$ U0 O( z' G0 G4 R(1)C++的构造以及析构顺序- Q6 Z/ W" R) v; J
#include <iostream>
6 \+ j* M  Q, k0 rusing namespace std;4 t. j' j' T% M4 ~9 ]$ A
class A
( Q0 r8 U2 z2 n% ?5 ]{
1 D' o+ A5 u$ Ypublic:$ z5 [: b% U8 j
A(){cout<<"A"<<endl;}0 R4 a) @' s3 t) ~; e, T
~A(){cout<<"~A"<<endl;}
" O8 v! e  K: r' A};5 r8 V+ H7 X: h% X7 @
class B : public A
5 ]5 ]0 j0 l2 m# @) E{
9 H- p1 R0 b& c0 k' ~# O+ Lpublic:' k! a  S* g' g1 O3 v4 t
B(){cout<<"B"<<endl;}( h: h, \1 V! g, t% {/ P$ k* u
virtual ~B(){cout<<"~B"<<endl;}. I) j$ W) ~' N( E$ i* N
};
7 \" U* z  }+ S) l7 I8 i: ]) E5 @class C : public B; ~: E# ~9 S% p1 ?" s
{8 q0 v4 s6 w# Z6 d
public:6 e" l- j: r0 J; O9 C
C(){cout<<"C"<<endl;}; r8 H2 C; y0 Z! h
~C(){cout<<"~C"<<endl;}' Q6 @0 E3 s  M, L+ t$ q- q
};" ^, X: f, l* M
, \+ C% |" G$ }7 p4 r7 D  R( u
void main()+ g, u# Y+ O$ G$ P( M3 l! h) |
{& E6 t% O' ?+ s$ x% L: e: _

; P8 T$ @* W+ w$ g; Y7 Q$ P* kA *a=new A();
) M3 A3 i( m! p; bB *b=new B();7 R) ]3 z0 g( J
  C *c=new C();
/ I1 J/ z/ Q% |- C+ S6 LA *d=new B();4 K* z$ j( Z5 f& i( p$ @. ]7 v
A *e=new C();- i1 S% }/ r) s) V
B *f=new C();9 O, l7 d9 \6 D9 {
0 b& V4 v: j4 D* N
delete a; cout<<"---------------\n";  A$ Y. b5 H! y
delete b;   cout<<"---------------\n";
5 H* X* k1 }; D6 c% tdelete c;   cout<<"---------------\n";, i9 K3 H) W: B8 y9 Y
delete d;   cout<<"---------------\n";
- m+ c& n. D0 R; v3 Z5 D  j7 Fdelete e;   cout<<"---------------\n";. L" w* m2 A% [; B& l3 D  R
delete f;   cout<<"---------------\n";
7 m1 @4 M/ \1 J' c}: f7 W9 C! V0 w# K) |9 ~! m
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
2 s' [' p) C: |. o/ A这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
0 _, L+ u' q7 B( y$ a0 J其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
, P6 w% y; [" d  j& [' g& r(2)面试的诡异题目
! A# T, X+ K  s. }% ^大意就是如果你 test *p=new test[20];, ]; Z9 ]1 Z4 ~1 S
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)( |- \  ?/ g- K3 M
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
' V: `" v1 t# z3 W) c. G
, s6 x8 @7 ~0 c( m$ [5 I9 ZZz2 `' Z4 T. t4 ]7 o- b
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
$ ]1 ~* X% O5 n上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
- h6 w) K( _, W$ i" u爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html: \* ~7 F. v& f& N1 m- m5 t
——
# R( q' m1 e! [' l( E# I百度2011年实习招聘专题' k3 l' L7 `  C) m3 d% X
http://www.aftjob.com/portal.php?mod=topic&topicid=22& s4 M  K& e- Z/ C( s. @; }
爱立信2011年实习招聘专题; m% I* C% Y. M. m5 f
http://www.aftjob.com/portal.php?mod=topic&topicid=23/ D: `1 }' h: n: W. A1 i" f
新浪微博2011年实习生招聘
1 s& @6 p6 ]8 B$ ?http://www.aftjob.com/portal.php?mod=topic&topicid=21. F& |- c5 I5 Z( C4 H
阿凡提招聘http://job.aftjob.com/job
5 F" z% @' u1 e; J$ G5 ~6 y阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag7 ~3 t1 [$ n# j. I  d: @" N; K
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum. N- r2 H$ f3 {( {) ]* ?
阿凡提职位搜索1 S9 }0 A3 {' H: ]5 n4 J- e/ c
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-21 22:16

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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