找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1344|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
  _! h$ J0 D; a
" {! a3 K5 [+ k0 M( AZz
* @& u. Q! y( P6 E7 v: Q4 G. B3 C% A  R- s; y7 u3 d( h. B
(1)下面程序运行结果是什么:& w! v( p- U8 d0 |' ?
#include "stdio.h"
1 E& I% m+ A8 {" P% @1 }class test8 V; s, F2 s) O* R- X: u4 N2 \
{3 a! \1 k& P7 G2 N& _8 Y) f
public:
5 C. @9 E  t! Z$ mtest(){}0 h/ |2 C/ e' M
void hello(){ printf("hello\n");}; z9 O9 x- }: ~6 r
};+ t% P+ b' `: h9 E
void main()$ T6 n8 f6 x4 P4 b# z) c9 Q1 e
{
5 {) ]! p: E5 X5 b. i# W$ x0 p    test* p=new test();' m' X3 S, V% u  o
    p=NULL;" z& K/ I6 t& Q& ]5 U  c7 l
    p->hello();
% A# E' _* n) q+ D}/ k; K5 [* y% @3 F% |/ \
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
. L8 }- o0 I) `9 G! n# z#include "stdio.h"4 M& ]* _5 l) k9 n- K) R: f
class test
/ r$ ^- v/ }! [5 C" \7 @- m{
) y0 l& P* @5 Qprivate:9 Z7 ]) U! F$ W. {
int i;
/ T& B% x" B' b. X5 O, |* Kpublic:
4 K, F3 ]: f2 k% N! y. Ytest(){i=1;}
& ?  X9 C, }& ?3 M7 |void hello(){printf("%d\n",i);}% d, P% L  M7 x; l( {. X
};
+ V- r5 c0 C% |" S, p9 uvoid main()3 Z2 f/ y8 z' E$ f' Z/ v' C1 d8 ^
{
0 C9 x+ j: T% Y9 V" m    test* p=new test();6 E  b/ p! G" O
p=NULL;9 |- K1 o( v  W& m+ L+ u
p->hello();
" @3 L! o% e% L' e}$ P1 j2 y* ]2 c$ K- [7 v# d
如果将p=NULL注释掉就无误,就会输出1.) J  ^1 Y) j. S' h; @
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。# @% M2 A8 V) Y; m( ]4 V
(1)C++的构造以及析构顺序  w$ r0 a( W# m# h
#include <iostream>
$ S% f& c. A& P3 zusing namespace std;, N* d  A  J, B( o4 O) I
class A
( h) m6 _6 ?) f% V8 {4 _{
8 l6 C6 S+ s  D4 Q$ B, {public:' Z  P. b5 c2 u, ?; z% A
A(){cout<<"A"<<endl;}0 J* {3 @* L& _  K1 O) a* m/ m
~A(){cout<<"~A"<<endl;}
2 L( A2 z2 T! ~0 @* w  v};  e8 |3 a/ Z+ a4 Q6 ~6 }: k, E
class B : public A( r- ]% {  F5 @- n) b1 Y" d
{! p, @# C" `/ P! [) P! M1 B8 d
public:* s! \# D4 h5 H" j& o& w* ~+ f# v
B(){cout<<"B"<<endl;}/ m( z7 u6 X+ k2 m2 y7 a! x. @; c# s
virtual ~B(){cout<<"~B"<<endl;}) m# X3 s" R2 D# u3 h' Q5 X
};) g2 x9 i$ I; a8 R8 G9 A
class C : public B
) @# y5 K7 r' n) [) K9 i3 h{
% b! D% d$ V2 u1 y% Ppublic:' S4 G0 y; W+ E
C(){cout<<"C"<<endl;}4 ]2 N$ D% W8 ^3 A5 v$ D1 ?4 ~0 ?
~C(){cout<<"~C"<<endl;}7 z$ `# c  s1 f4 U/ |
};
* ~7 j2 l* }1 Y8 W* o* y! k* Q4 t2 p# M# s* H
void main()
/ }5 w7 x" Z" d: F" x{' N7 @  F$ d& f: G: P6 P
) P/ q# u7 N9 [0 c' z
A *a=new A();) ?& O: p7 ^( d
B *b=new B();  M. A/ O/ t; _. K0 I7 a5 I- U
  C *c=new C();  `/ W2 B$ q+ {; C7 D; U+ G
A *d=new B();8 M  F7 r# \/ l
A *e=new C();) v+ Q6 @3 u8 z7 a* V
B *f=new C();8 b' G2 Y8 z& l+ z$ [- K
6 i/ Y5 T' {  l
delete a; cout<<"---------------\n";
! Y: `+ {( }3 e* n! X4 K( Q: X" r9 c4 Wdelete b;   cout<<"---------------\n";
5 \6 s# _; }; y# A, {7 J1 t1 {delete c;   cout<<"---------------\n";
& K+ x9 N* n. P6 U. t+ [delete d;   cout<<"---------------\n";  U5 \& c# s% y+ g
delete e;   cout<<"---------------\n";
$ t# G' [6 g) ~$ m& }delete f;   cout<<"---------------\n";
6 U) l/ v2 L7 q8 `+ q8 C+ z}
6 k5 e5 p$ e# @这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
5 y0 a" @& n1 J  l; k这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。0 H/ G; i% _0 s/ N9 N
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)) S/ M% Y$ x# q2 |$ R
(2)面试的诡异题目9 t7 _" [. H! A7 E; D( c. d3 g8 U
大意就是如果你 test *p=new test[20];3 X4 w; j8 L* T, b/ Q
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
$ n9 {; ]- C) b1 k: U+ e- L& g3 U答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……1 ^  m2 S! ^1 z
0 h7 v/ B; l) Q! S( G' N
Zz
5 m$ q; A; J# c爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html' _0 ?% Z9 p/ A5 v! @/ z
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html4 p& z7 j$ u: o; m  _- l
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
% e  w5 q/ {% F/ N5 l3 @——
2 A: g. p9 }' ^" H/ F' M% B百度2011年实习招聘专题
9 m- C: d% N! c" rhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
% J& H8 b. y8 ~* a+ F爱立信2011年实习招聘专题- A9 V* D. M' U! Z. `9 g, `5 A
http://www.aftjob.com/portal.php?mod=topic&topicid=23
. d+ ?( k& [# C: J新浪微博2011年实习生招聘5 F9 R- M* r$ r0 z
http://www.aftjob.com/portal.php?mod=topic&topicid=21
- |8 b$ m5 Z) E: h9 i阿凡提招聘http://job.aftjob.com/job
: _& \7 d0 S" T6 T. O& G阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
8 T0 P4 p* w6 ~阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
% L* K& [! S9 n6 M: B0 S+ A阿凡提职位搜索0 e+ Q/ w9 _' `( h( n6 N
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-13 05:14

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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