|
|
2009爱立信面试题
; Z7 |& c D. q* }" v. V% a, |1 V3 j E4 q6 H; c9 G8 [5 Q' d
Zz
* m: ]& D8 o2 j S4 j. ~* Y" ~$ z# o* f, ]/ j! A; f1 O% w
(1)下面程序运行结果是什么:
& J, r% W5 c. ]: _* k; p#include "stdio.h"
5 Q! F8 L7 S% m5 W5 cclass test
0 {- {: M- o2 i' u7 j{- ~7 P& H9 h/ G3 ~# h: T
public:2 W8 Y q/ f' E. N
test(){}
( [/ F1 O- ~0 X6 f2 U6 Yvoid hello(){ printf("hello\n");}
- i& z, H8 ]4 _};
! C. b( B8 h7 P; u+ Uvoid main()
( p2 }1 }4 q# K0 p" c; Z x{3 D( o% r3 j d
test* p=new test();8 L% I0 ^/ ~3 w2 k2 r! m/ U; t" p4 J
p=NULL;
, T5 O! b$ D. |$ A6 b p->hello();, k' d/ r" m) f7 d, K0 @2 O
}- r+ F6 l% c4 b/ V
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:' j, d* |( I$ q. t
#include "stdio.h"$ Z# j3 x" Z# E7 P' `: u! C3 }9 z2 y
class test1 F% }% R4 C1 x2 M5 _( {! C% a4 o
{9 j& j; I% A# Y. O) v% T# \
private:3 _7 [1 { k5 E, s5 a. a* }
int i;
! b- L$ D) c @; P7 ?% o6 ipublic:, r, i+ V: w, L( t( Y# m
test(){i=1;}
4 [# j; z* c- m2 P7 s' gvoid hello(){printf("%d\n",i);}
5 |( \- @) d+ a, b$ U3 O};
B9 L( L2 p& xvoid main()4 c+ T7 }, }; N" j
{
5 ?" T: p, r5 N0 o, Q9 p7 r4 @ test* p=new test();
0 V3 ?' E* P4 n- _9 W4 Tp=NULL;7 \. k7 U1 [7 S( a; ], S
p->hello();
$ _+ ?9 G( |; _5 S. S! r: n7 Z& i8 k}
0 t( K: q# |4 m' t8 @! C. X如果将p=NULL注释掉就无误,就会输出1.
/ C; M( ]- O: Z4 P3 \注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。; C: r5 Q, P$ K4 q7 `7 v
(1)C++的构造以及析构顺序2 V2 y$ d% ]( Y3 p4 c
#include <iostream>8 e, C* E: ~( O9 Z
using namespace std;) n l2 Z8 h: s, ?' L% l' M9 p
class A/ p5 x9 y8 z- j
{
; s! L# x9 D2 X- {public:) A1 t9 H: J3 c* \( t, y: u) I
A(){cout<<"A"<<endl;}4 \1 }( z" E% p9 f. l
~A(){cout<<"~A"<<endl;} l H& W) M; V! \+ ^) b
};
& @# `# E6 s7 T# o# Kclass B : public A
- {# W) i, z7 e2 G3 Y5 U{
& ~+ E8 J/ Z4 F \+ upublic:
4 |! G1 M$ E# z; y8 N5 RB(){cout<<"B"<<endl;}- B( O+ |* K+ k8 u
virtual ~B(){cout<<"~B"<<endl;}5 p* j7 P8 X, c
};- I+ _7 o+ a0 Y: d a
class C : public B
/ Y3 P" p3 H( D4 J- P{
! b6 P) I# F$ e/ Gpublic:8 d/ q" o3 @6 v: ^2 I4 T/ \& u6 u
C(){cout<<"C"<<endl;}- M- @+ {* Q/ d( z6 e( w+ I( G
~C(){cout<<"~C"<<endl;}
x& g" m1 d5 D. v};3 G6 Z! q" C6 R
: c, @8 P1 {' t1 Y2 V' J
void main()
' {" i7 b# j! a1 ^* n{/ A/ e) q& Y& j ~) C. T* K
" J; m ?8 H8 X" K8 H
A *a=new A();
4 U1 a0 M$ {( r8 kB *b=new B();# C# ]$ }' O: S
C *c=new C();4 D2 A% A+ w4 Y
A *d=new B();# N5 X2 t/ C1 V- z2 _1 j- K5 N/ O
A *e=new C();5 C! {/ x# h' } T) m3 ], v
B *f=new C();
) h) A/ h4 G" L# n$ f8 U. t
& g8 ^: F* t, x- Adelete a; cout<<"---------------\n";. e. V* u5 y: j2 p6 d
delete b; cout<<"---------------\n";
1 t5 L/ H7 z8 ]: ^delete c; cout<<"---------------\n";
- S8 j& A2 c$ b# r' g8 Hdelete d; cout<<"---------------\n";2 ?1 i$ c- r' E
delete e; cout<<"---------------\n";
+ ?. [! U( N* c/ \2 mdelete f; cout<<"---------------\n";/ c/ l) \& Z/ @% t. @7 j& V
}+ r% u7 w( @( A
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。! U3 S3 a% J9 y: S
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
# b3 H1 A1 W" M) P7 Q其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
' T' ]$ X0 _6 M5 |" K(2)面试的诡异题目 y! F1 y* a9 a/ Q9 V0 K j/ V+ q4 e
大意就是如果你 test *p=new test[20];
+ z# |5 U& v# O9 x. J: c9 D# t然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
/ M2 J/ k+ A; s! S. q. L4 f答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
0 n! X- h1 A: J' ^/ Q; M# D
9 @( ^. P, x$ Y, ^: Z$ r' sZz w( N; q3 J# Q: A6 c& _: Z9 z
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html4 n+ p! H# t2 V; q) V
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html& N- p& n8 ^& P7 T! K6 ?
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
& d% u) m* n7 S1 _* y——7 v7 M z, b- K
百度2011年实习招聘专题: }' i3 k j: S# f8 Z0 ?* t
http://www.aftjob.com/portal.php?mod=topic&topicid=22: ~6 A- e3 j7 q' g
爱立信2011年实习招聘专题
2 i/ m2 ~/ r* f6 |$ Fhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
3 X' k( O% x+ S) s. E3 l新浪微博2011年实习生招聘
# A0 e! g8 H4 O% M% [* e& ^* F: w0 Mhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
9 _' S8 E) s. z* j阿凡提招聘:http://job.aftjob.com/job
U: z9 Q0 j c" g' u1 U# R; M$ G阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag
1 l5 r3 P" t* _8 i' S1 i7 k阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum$ \- l5 |2 x# a5 [6 C
阿凡提职位搜索:
* c$ i* |' V# ? n" d; _5 L—— |
|