找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1383|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
2 c; }7 f( o4 O# A
9 a4 Q' P, r8 K0 P: MZz
0 n; D/ u# N( W/ S7 h& g
  T4 k) b; Q1 r(1)下面程序运行结果是什么:
% S5 W( x+ H0 [" S  u#include "stdio.h"9 e" E: W- i& G4 G/ N  y% K
class test
+ e3 ]& }( B* w  a5 b{
) @- f$ y' j" G& A# U  wpublic:
3 m0 x3 E  K  i& r& b) stest(){}
: j! Z! m+ _! t& n  x: i% K# V) M. Avoid hello(){ printf("hello\n");}
. D5 M. i+ C' l0 s6 b/ |9 R' A};. z4 c  |1 P. R: ?! c0 \
void main()( U' i, r/ F  e9 W( e7 D
{$ b: q/ ^8 m& m7 T4 f/ k
    test* p=new test();2 m) a- Z; A6 U: D& j! `
    p=NULL;
2 H* w8 b" b& m0 @* {# h+ _/ @    p->hello();
0 K! C2 T1 J/ }4 I" `7 s' t}* l: s+ M: E: i! P- o, _
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:. k4 b4 {- N: V* G4 e/ u8 r
#include "stdio.h"
9 ~7 M% u. F6 b; l$ }6 e( V' pclass test& B7 Z6 }' D7 A4 F* _
{
, V1 R6 v2 A9 y: Z  T3 b4 e8 k, Rprivate:4 U( x4 L2 |5 r/ M& P
int i;' O% ]4 G$ t4 l3 Z& D( O" L4 q4 l
public:3 A; y: v# D' R. ]
test(){i=1;}
4 T8 M4 r) \% T) qvoid hello(){printf("%d\n",i);}) e/ E# f8 [; z; T# J5 s
};: |8 J# p. H) J# G: |- I
void main()6 m1 Q& q6 S. f$ S) D
{" f5 M# z- L8 b! {3 r
    test* p=new test();
! Q3 ]6 I' @+ m  L7 ^. F0 C8 W5 p- Mp=NULL;
5 v4 ~) W; P7 y: s! J/ C0 v1 Kp->hello();
, d! @* x& X8 C& X+ ?3 V6 o  K* K}& z) _& D# _) `# c9 l; z) d: H
如果将p=NULL注释掉就无误,就会输出1.
* g# ~- r& e  ^" P; Y& U, q. Q" [注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。2 I% _' a5 m  G3 z3 W0 e4 X  P' j4 b
(1)C++的构造以及析构顺序
: w% |3 `( @9 `! ^$ D) ~#include <iostream>
0 Q" G$ S" F% w8 l" qusing namespace std;
! O, T2 X! I2 v/ Q" V  I4 @. x. Qclass A6 Y2 X& |' u. \  {" d% P( D$ O
{" l7 {% F- L# p6 K
public:# G% L6 [" k- g2 z
A(){cout<<"A"<<endl;}
# L0 l1 M! Q* V1 K$ Z5 d' z~A(){cout<<"~A"<<endl;}
. ?+ N. N# T* Y+ N, i};
* \2 i7 [5 T9 _% [class B : public A8 v1 x. {( G, B3 {$ D% J& B+ [
{/ N1 S; s3 V% c3 s
public:5 E- H& }" E/ G) K2 c
B(){cout<<"B"<<endl;}/ O$ Y% R: y, _! }# }
virtual ~B(){cout<<"~B"<<endl;}7 F/ H0 ?4 d9 a& g; X7 Y  c8 i
};. c5 Q" X/ V6 {, @0 O+ e
class C : public B
1 n7 ^$ q2 r: Z* F1 Z' T# T8 F$ F{2 W" P. {" t8 D* V: k. b: _
public:3 Z0 F% c+ B0 G! }5 k5 A) U3 k
C(){cout<<"C"<<endl;}6 W) e8 r; [$ v8 `% C
~C(){cout<<"~C"<<endl;}% n* h" S5 C2 N% w
};2 r5 m9 L* d: K  P$ v# U9 Q0 _
% {& f& t5 N+ |9 a& n) }
void main(): n) ?: p8 M% A
{  E" i3 o: g+ ?; {

- h9 d) w0 v- _; B) {A *a=new A();" z, w0 t3 O' G3 ^, I
B *b=new B();
( m0 N3 L9 m3 r1 Z: n" l' S: K; U  C *c=new C();
0 [6 |% _! \; F9 M6 h0 ~A *d=new B();
; \& t" a9 M8 u4 y/ G" SA *e=new C();0 w/ [4 w: Q& X' \2 r8 n
B *f=new C();
% I" B  n5 \$ b# ~9 O1 i# k! M- V+ s, u0 H" O( i9 r
delete a; cout<<"---------------\n";8 ]0 L8 ?# l* o* `" f
delete b;   cout<<"---------------\n";
' k% y1 r# f) K( E) Bdelete c;   cout<<"---------------\n";
, Q- W' ~5 H# g  \delete d;   cout<<"---------------\n";
# b0 L, o' I% |4 [: [delete e;   cout<<"---------------\n";* ?' B! j( |) x$ N
delete f;   cout<<"---------------\n";- y. u4 n" L' a: q9 o
}
% s8 S  O9 U, d  E/ W$ ~( y这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
, c. L7 m/ D) v/ R这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
* f& c9 R7 v8 U( S, n4 |其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)+ O8 v% V+ [8 n5 @; {
(2)面试的诡异题目# e: Z) k& m3 Y7 F8 }
大意就是如果你 test *p=new test[20];
0 U$ a, z# B/ @) E# D5 A( L* h1 Y然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
1 X+ }. Y9 Q% a5 I+ Y  E答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……7 o* N4 L9 t! X$ x9 P- P. X: k, t
9 t6 h! h" V( E: x  V, ]4 b
Zz0 k" G" z6 Z6 S/ W$ D
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html( ?2 h4 d7 p. u( N; M& a4 g4 ^
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html& M) \2 L' F! j; k4 Q
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
1 U! W- B/ I) U——
& a; G# K" b2 R$ T3 E百度2011年实习招聘专题% i9 K' O/ s' s, U% W/ i4 f
http://www.aftjob.com/portal.php?mod=topic&topicid=229 s/ V5 u" Z) H- f
爱立信2011年实习招聘专题/ p8 Y) N* q) w$ O, I
http://www.aftjob.com/portal.php?mod=topic&topicid=23
0 p- t  k6 G7 Q5 w新浪微博2011年实习生招聘
3 E- `- u- `) C$ U" Yhttp://www.aftjob.com/portal.php?mod=topic&topicid=21/ c& Y7 l3 y- T  N8 q# C) m" g
阿凡提招聘http://job.aftjob.com/job
' J. q* R  E! L# p) Q. I阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
; C* L- |5 X4 c* ~% r+ Z$ }阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
! F3 s. }: B! P7 }' J5 e9 n' E阿凡提职位搜索9 Q; y6 c7 q! E2 `- e& @, K
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-28 00:23

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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