找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1195|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
, X$ a7 ^" b4 Y1 Y* R% q
& i& g& H2 |1 n% F4 L# o1 jZz& ]6 z. g& @: d7 o
6 c& {5 m/ b- y
(1)下面程序运行结果是什么:& a/ g3 D+ S9 t9 ]5 ]) I
#include "stdio.h"
( y5 U- o% n5 iclass test0 ~. \, V9 r: u0 {+ N+ P) q" Q
{
0 h8 Q2 T/ g: x1 s' ~( Z" m' ^, W. bpublic:. S/ r8 u% b% X: a) T  L
test(){}
. Q* O. u. `) I$ i7 x$ Uvoid hello(){ printf("hello\n");}+ t9 T; C) B+ u% A& k
};
' r8 n( P4 Z" [( g5 _/ q6 f/ Uvoid main()2 l0 X! _/ F  Y; V
{- I) j4 @5 r% e4 C. o' N% R* M
    test* p=new test();, m9 ]0 t* y7 [: ?( @
    p=NULL;
/ L% M" @! ~% G" A5 K    p->hello();; G3 ~, f" Z. A( H* c0 n/ c7 n
}% {* s$ D5 k3 Y1 f: E
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
7 K. ?. Y' |2 e6 U4 E#include "stdio.h"
( L! s* j* z4 b3 iclass test
' d2 |! b. p7 d& f$ X{
4 T9 g. @% z3 x+ V& p% n" bprivate:1 i: b8 b; h% {; D" S
int i;
# g; W+ Z: b4 Xpublic:& m' @. N% x, u4 `. k! n2 X4 f% p
test(){i=1;}& d8 d% F1 v# Z1 W
void hello(){printf("%d\n",i);}3 s" w( n+ B1 q1 L
};. _6 h( o# J+ S3 C0 F4 G0 m
void main()
9 y) D2 J5 _7 I{
( p0 e) ]( f# v. o- U/ x    test* p=new test();
! A6 t$ i( M9 a" Wp=NULL;% O& \4 Z  F: p( R
p->hello();
( M! l; w2 k4 f, l}
& r' B  \6 Z! \如果将p=NULL注释掉就无误,就会输出1.
3 q2 ?7 z" _5 Y  P. b注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
0 `" h4 J. g9 Q( S0 J: s% }(1)C++的构造以及析构顺序
/ a* v: d( H3 E! m7 m#include <iostream>
, X% c5 W/ G# b- Gusing namespace std;
) b$ t# n3 O9 M( @class A
! }* f2 ~2 U& H/ B* n6 v  O{
6 M3 k6 B- g$ w% ]: `! E6 L" B" upublic:. n. `8 B! T3 ~2 q7 P' e# l8 K0 X
A(){cout<<"A"<<endl;}
* p" c' k$ T9 c0 u; [. k~A(){cout<<"~A"<<endl;}
  n( K6 w" D$ d- j' E7 j% U; a};7 s5 H# d9 e* D7 ?: S& s/ E0 H% O
class B : public A
) O" b7 e6 n0 y{
0 a  C, p$ Z/ X1 W- kpublic:! \9 t. \) r2 A* `! Q7 p
B(){cout<<"B"<<endl;}
' A# u+ P) C" U3 Kvirtual ~B(){cout<<"~B"<<endl;}
3 j$ t# X) y5 h2 }2 G. r$ k  f- O5 ?};2 P% E( u0 G5 v! g( h
class C : public B4 ~; s/ V* F4 \) Z
{; k+ p' C9 l: F) q# `; K( f
public:
: s8 |& w4 |% g1 Z' i' T" KC(){cout<<"C"<<endl;}4 d0 Y% B; n: }6 D! M
~C(){cout<<"~C"<<endl;}
. `9 L  ]7 u2 P. G' O! h};6 t) r! {( T9 z4 d

3 w8 a9 `. C0 A6 |+ _void main(). O% P6 i- Q! C$ M( g" k( w& L1 s
{
! b4 R- Y4 \, N5 p# I; v1 {) W
3 f( a  n% r$ B; X5 R. kA *a=new A();5 [5 k1 F5 p& _+ S8 {5 w8 q
B *b=new B();
5 O$ R) u- O, ?  C *c=new C();
2 z! r: Q2 M% h' n4 F9 tA *d=new B();
( a, i6 i8 f, K6 @1 z( y# i; sA *e=new C();/ {) _  O+ L9 ^
B *f=new C();2 S8 [$ g& n, B. m; d
, b6 q: T9 ?$ l/ Z& F
delete a; cout<<"---------------\n";3 _- ]- ~# c# G1 T& `1 K0 Q0 ~
delete b;   cout<<"---------------\n";
$ L' V( B) s2 s+ gdelete c;   cout<<"---------------\n";( ^% m  _( d: Q6 E) e1 s9 \5 b
delete d;   cout<<"---------------\n";8 P2 q$ s6 p% V" [, @
delete e;   cout<<"---------------\n";
& l) l. C/ S! |7 q' V! h  zdelete f;   cout<<"---------------\n";7 N9 K# |2 J8 y& J5 H) ~
}
8 N# a* P! a8 `# F4 J这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
3 t2 e( s1 i3 W6 N  v8 c4 V, Y这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。' U9 x6 U6 U; V* n7 t6 Z" t
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
1 H- w# M. n+ P9 I% |(2)面试的诡异题目' f" f/ |0 X/ N- b( [
大意就是如果你 test *p=new test[20];
. ?4 }" K5 x$ w4 e$ ^/ @/ g然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)0 {# A/ T/ a8 x! B3 m! `
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……% G5 T1 ~% `1 O
  C: H* I: _- }& M
Zz
" S4 m, \8 z7 F4 r$ z爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
2 P) `  F( W- x+ V" {上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html: P) ]+ E* K9 @0 W& I2 r( K5 A, j3 g
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html5 _3 I% b1 s3 P4 U: N: Q- n
——" Z, z$ Y' q4 Z0 I
百度2011年实习招聘专题
5 C& g' J/ u0 \, e9 M( Shttp://www.aftjob.com/portal.php?mod=topic&topicid=22. [* S  k4 a' e& D; f. y1 _
爱立信2011年实习招聘专题3 E# [$ b5 c4 w" a  I; K; L
http://www.aftjob.com/portal.php?mod=topic&topicid=23  V1 M/ ^$ I) i6 l
新浪微博2011年实习生招聘
- a+ V, q9 H7 g. @' q: m$ q* P# F1 Lhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
- ]) Z3 X' T$ G: o9 g阿凡提招聘http://job.aftjob.com/job
6 X7 \* u; I4 g  I" o  N$ @阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag! x' t( z6 l% g3 [
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum  u+ b/ i% [' L9 y
阿凡提职位搜索1 U$ D; u6 [( V9 Q% W) j7 P* G
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-5-14 10:10

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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