找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1294|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
0 v9 w% i" M1 H8 T. i8 ]9 R
4 N! P1 o& w7 m9 d9 a* n+ w. rZz6 }, u1 i) g1 v: |4 e( V

6 g9 n2 t2 U3 J( i+ _! ?(1)下面程序运行结果是什么:
+ m& R6 W! S! `#include "stdio.h"
- |3 D% G/ m/ ^+ ^3 J/ C* yclass test
4 Z, a) R/ q3 [' }) G" F/ l{
& S) T" p4 t! p2 D( ?. D' Dpublic:( t6 \! E$ |) M2 D; S* A/ d8 D  t
test(){}5 _8 k9 u+ D4 W( t8 M
void hello(){ printf("hello\n");}% |2 A. [$ D4 _, }6 v2 k
};+ s/ _  }: Y: @0 z1 Q( _
void main()' B, D, K* u% g3 N& g& o
{
; f; A$ P1 w9 l! w- V$ K* H    test* p=new test();
8 R2 D. S; r6 q- j. d    p=NULL;" d3 D6 z' @# l5 c
    p->hello();, F& c8 [. m* R0 z+ D
}
6 J% ?0 ?4 o: E* N. t0 G9 D3 W& |事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
! U8 l- F. ]# Y6 c4 a+ l#include "stdio.h"9 L) s, {7 a4 C) z" w  z
class test/ D6 {8 S5 U4 b' ~0 S
{
2 a2 ^, M5 s! x* C" Y4 p. `% bprivate:5 `8 ^  N2 E3 P  a4 D
int i;
  s+ _' v( }4 f0 U" w" c4 qpublic:
  A, ?# i1 A! Ztest(){i=1;}6 O3 ?2 o" M  z5 F
void hello(){printf("%d\n",i);}
; ^4 k) t$ v3 N1 u1 I};* U- e7 k9 d* [! z2 K; b" `
void main()
+ |+ U2 E- Q! |) b2 o{- L2 |$ T6 K. ?5 o8 a
    test* p=new test();
* f% b# \1 A# y, |8 ^# Rp=NULL;0 B3 Y+ D2 x4 M6 Y
p->hello();; e' q" G& f0 h, X  e
}1 A' Q1 Z4 @$ M( Z. s8 e3 C
如果将p=NULL注释掉就无误,就会输出1.
5 k/ R0 l( T, v" J) L. x注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。4 s( S; h) f" E1 k* \4 B
(1)C++的构造以及析构顺序2 _+ z+ ^1 [5 p5 g5 h
#include <iostream>
) r" c' ^& u' T0 e* Uusing namespace std;
* T  `  M! t7 c1 m# Zclass A
( D- {* M$ {9 a: `9 i{$ M& K" V5 h3 k
public:
6 H% ^. V  h" M# a: ^A(){cout<<"A"<<endl;}! ~( a: m: c- W+ G5 j
~A(){cout<<"~A"<<endl;}+ B- T6 u- ~; g
};* ^# z: K4 t- U( A: V4 g
class B : public A% l7 @/ x: K5 g- `
{
5 o+ s. L! a$ Upublic:& G0 }8 `1 s+ c! N# N2 s0 ~
B(){cout<<"B"<<endl;}
- x4 X- s' U: s" rvirtual ~B(){cout<<"~B"<<endl;}
5 M& U* f! J2 }  v};2 |+ }# h) ?/ |6 d: g/ y
class C : public B
) X8 i( R. P  k9 U1 t  d{
3 k+ i. C1 b  T) \) Ypublic:9 h: W# p: M- |
C(){cout<<"C"<<endl;}
2 C& t/ m! a  b" T$ z. I9 a, @~C(){cout<<"~C"<<endl;}
; W2 T$ `. T& D1 j};# y3 x" }# {9 `0 ]# r

0 K. e  Z6 [9 y" u  E: W9 xvoid main()$ h, J+ W1 J7 ]' j
{3 o6 ~  A  _9 _

. b' D. l5 Q% I+ _7 DA *a=new A();
# A6 S7 T) F4 G0 Y" g/ qB *b=new B();9 T) A- X! ]# Q! G
  C *c=new C();
! w0 j. x( i9 O+ gA *d=new B();
" e& K: a' O* j" {6 tA *e=new C();
& i2 K5 L" r( T+ vB *f=new C();
% u- t  G) e+ F; f( g- R
6 m/ I. M4 N9 j, Y& g! [9 o; hdelete a; cout<<"---------------\n";" n1 q3 t0 x2 d7 y) N
delete b;   cout<<"---------------\n";  a0 Y5 t& ~  |! K( [& v. u
delete c;   cout<<"---------------\n";
9 Y% C  X3 `1 Z: u" s) D* h# ?delete d;   cout<<"---------------\n";) L3 O  d- m* Q4 s' r+ T
delete e;   cout<<"---------------\n";  o9 y/ V% E+ t2 O& k1 T
delete f;   cout<<"---------------\n";$ n6 Z, n6 k& d9 o# O+ J1 L  ~
}
' [* |" _' z: |9 |) b% i这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
% n! R" U- g: @+ Z7 }( w0 M3 \这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
6 I) |$ x$ G1 L% T- L6 a6 L其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)" @4 \1 [. T+ l' q
(2)面试的诡异题目' g9 V6 k9 ]) w* A6 }# K& h
大意就是如果你 test *p=new test[20];2 |2 H7 ~" A. g3 i
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
6 x4 H- ~/ [$ f9 A( e8 r答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……- I; S( @  M' G; K& S; [; Z5 p
: L' q7 K5 I; Z
Zz
) ^. c0 ]7 d$ w$ {3 A5 R" R爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html* d1 H* d& r- m4 t( j) M
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html4 ~$ y$ X% J7 |. h
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html0 z4 H5 g0 [7 |6 C  k, s
——5 A4 G& q! [* g+ ?% W
百度2011年实习招聘专题0 I0 P" g" S9 e, m/ p' H. j1 m) i
http://www.aftjob.com/portal.php?mod=topic&topicid=22
: i4 v% ?% M9 s- {6 e爱立信2011年实习招聘专题! `- E( j0 q; Z2 j" z
http://www.aftjob.com/portal.php?mod=topic&topicid=23
1 J2 e. T! `6 @2 c新浪微博2011年实习生招聘
6 b( q1 `8 m* }6 h5 Yhttp://www.aftjob.com/portal.php?mod=topic&topicid=21) V$ v9 y* s. ?; ~# ~, P
阿凡提招聘http://job.aftjob.com/job/ V9 a4 m+ ~! m. S; @, f
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag" {) t' A+ E4 Z5 y% A: b
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
5 R1 ~! L/ M0 t: b0 A. r# o9 n阿凡提职位搜索
9 `0 @* \! Q- e) l. z——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-14 22:29

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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