工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 909|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题4 f- I( T/ [/ L  Z$ A2 g" X4 ?

% i6 U8 I& W( KZz
* L! ?  Q4 \+ |! K; D
$ }8 Y! ]' }, `: R( c( t(1)下面程序运行结果是什么:4 Z: _7 e' j( F1 E4 `* d
#include "stdio.h"4 V6 b+ [8 j$ b  O" N9 g1 b
class test
: Y% G$ U  |" E  [6 a{8 W9 F0 K% Q" T5 [; I- P5 ]: |+ A; c
public:0 |9 T, Z/ n  w9 R9 s' z
test(){}9 D+ \3 |' n  ~. b/ P$ Z: `* F
void hello(){ printf("hello\n");}# f2 a+ c% K6 y2 L9 V( g
};
% _4 O1 N- m9 s# avoid main()
4 f& M- v! b* B6 R& ]{5 k! L; G# ], H$ x. S
    test* p=new test();
  W. n, D( I$ b! h. U    p=NULL;
6 l; c5 A: ^. r    p->hello();4 d! {; F8 [0 Y4 p& N- e
}
( f  t1 r$ A; O! Q# l/ L6 o事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:: n+ L- @" x6 R( h# l& B
#include "stdio.h") L9 j" O4 L# m
class test
1 s# u4 a) m- y  N6 W' ^- B. w{
& V" ?, [. i# A& I- B0 X, Gprivate:
# X" _2 b& Z, R# h  k- X3 ]int i;
0 _! s& n* a$ {1 G- R. jpublic:
$ n# q! J! b6 ]test(){i=1;}
) \  f$ r4 M, nvoid hello(){printf("%d\n",i);}
# u( m- o' o) f0 y+ S2 n};+ n+ w" v: T& M- S; C
void main()
/ ~8 c. ~  L& _; p{( h+ G1 H% L; U3 e0 v/ X1 K3 ]
    test* p=new test();3 w$ D3 S1 E% F: {: U3 _% f' g( s
p=NULL;+ {7 Y' ~" H- R2 ?- U) ?
p->hello();
! j. a* |" U$ z7 a) _}
  v5 a0 O1 \1 l, y如果将p=NULL注释掉就无误,就会输出1., a, |% o2 ], {; M$ s3 u8 \+ o
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。+ F  i" \6 g( M  H
(1)C++的构造以及析构顺序
& s- w, ^7 Z6 H$ |#include <iostream>
  [" x0 P- q6 J. y& m0 [using namespace std;/ F5 B. q; e9 x6 t: Z
class A
, H& d2 {: g8 Y0 w; e$ i3 }{* C4 Z& L( u  J) C) N2 n7 |  g
public:" d9 n4 i% s0 J/ z' ]# t
A(){cout<<"A"<<endl;}
5 }3 Z, c* `' t: r/ i4 o, v~A(){cout<<"~A"<<endl;}6 d! z- e# n) \' Q1 _/ D1 n# a
};# [2 {% b! f2 c' F$ C! K! o
class B : public A8 v5 `2 ?" x  C* J9 X: x
{
' l0 _  _+ t9 \public:
# n* o6 {) V2 D  R; K* v6 [: n4 }* lB(){cout<<"B"<<endl;}
& x& o9 R! N$ N! x; w4 c4 gvirtual ~B(){cout<<"~B"<<endl;}" M: Z# q3 J8 f. a5 `. i
};
  O- s* c5 z$ c/ B$ z7 q: @3 Yclass C : public B: h5 F2 c9 e4 X% r: r' A3 K
{, U+ s' c" C( K0 d% i
public:
; a( C& w4 p4 }0 L; ?& uC(){cout<<"C"<<endl;}
" T( ^6 H, D  s( e~C(){cout<<"~C"<<endl;}# L; v% T$ K) p8 \* r
};
* \/ E; {7 c0 Z8 @8 z0 A' A! g: w/ ]
void main()
9 X+ o/ T% J  O/ M1 a. `% }- u{' l; I. e" ?) J  a( e" B5 c2 h- Z3 z

: V1 v$ ]3 J. A) G7 u$ TA *a=new A();
) `* J# h* I# H) X. c  c  B8 VB *b=new B();
7 d5 ?# @* v! S# ]+ w  C *c=new C();/ U9 M+ S. v" C
A *d=new B();
: E& w$ _1 ?3 @8 |- x# ^% KA *e=new C();
- o; j5 T; `" u  x2 AB *f=new C();
/ E7 B! X+ R0 }
, Z/ V1 _! q+ l4 n- @4 m+ y: ydelete a; cout<<"---------------\n";
% T7 `$ H9 b# W, ~8 W! v) T: H' ddelete b;   cout<<"---------------\n";8 Q) i: s4 a0 z8 ^1 n- W( n
delete c;   cout<<"---------------\n";5 y& I, N% M& S3 Z
delete d;   cout<<"---------------\n";
& ^/ E/ o; c  K5 l! R: Bdelete e;   cout<<"---------------\n";
4 r" D$ g1 I! g" r0 o& ldelete f;   cout<<"---------------\n";! ^3 X, D7 V- ?
}
7 P: H4 Q% {: X这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
; v( s, m8 ~: p这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
/ b. M! }1 V6 R) @3 V其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)' A+ B1 t4 |( }! m9 \1 F# J# H
(2)面试的诡异题目
" T& h* f6 ^2 [3 q' l4 v大意就是如果你 test *p=new test[20];" [! o8 T& d, A3 z; r' n! k$ F8 }2 C
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
2 c( z! K/ v& \: Q% K! j答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
' g2 v' R! F! _8 B
" g; j: M: z, N1 @Zz, R% O; ^# M7 J" Z8 m  N  Z
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
0 }4 [1 i0 n1 Q. ~2 M上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html- w3 d/ s/ y7 e- ~# K+ \
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html  W! l6 e9 s% f4 d; `
——
7 P( m6 M& n4 M" |5 Z0 l# P+ v百度2011年实习招聘专题
. |0 ~! r# m, t& H& Shttp://www.aftjob.com/portal.php?mod=topic&topicid=222 ^8 |' Y% R& Z: @/ [
爱立信2011年实习招聘专题
8 [1 g0 j* _5 g! Mhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
4 n4 Q  h  l# \新浪微博2011年实习生招聘9 m! y! \. F0 V! b" S6 |9 ]
http://www.aftjob.com/portal.php?mod=topic&topicid=212 L0 Z& M. f2 D, M5 {. X  e
阿凡提招聘http://job.aftjob.com/job4 O8 d- B& i  k( U  Z  m
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
% }& e  g7 w4 u" [2 ?& ^8 m阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum! j. D5 M& A- c" t
阿凡提职位搜索. ?+ a' N5 I/ k) y( a- M; K$ w. J
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2024-5-16 18:37

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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