|
|
2009爱立信面试题
7 P/ i! w9 ~3 W/ |: d1 b6 X8 I# _9 \
& t h2 O5 @& W+ j3 qZz
2 G$ n$ ~7 u/ N) D# S- `2 U9 a. y i5 _& u0 e8 @
(1)下面程序运行结果是什么:: i5 A) b0 H5 X+ N* I, k
#include "stdio.h"
9 J' L5 Y4 ?9 m' W4 pclass test
0 T6 f e7 S2 G2 A) ?% S{# j( z& w; @& d r
public:
E! A, B/ W' X! _, {0 Xtest(){}- C/ p; u C" x8 S
void hello(){ printf("hello\n");}
3 @4 b2 c2 H+ j( j};
5 e6 H) P( P! i3 Jvoid main()) o( W/ F% ?3 I2 M9 J
{ ?$ ?0 Q4 @9 R# Z0 |- N
test* p=new test();8 U2 c5 [- d3 n8 P
p=NULL;, Y2 |9 o0 n8 E8 }4 R) F3 ]& E
p->hello();4 Q3 t/ L( C9 D9 c7 a3 ~; C
}2 B! Q2 z" _2 w8 k7 N5 L4 U
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:+ U) f7 d, z0 s' o3 L$ Z. Q" |# b
#include "stdio.h"6 c: T2 n% l7 J
class test/ Z1 s* ~0 F! d3 i
{, R9 U4 D+ Q8 t6 |4 O0 f7 J3 i
private:+ R' c/ _+ L5 @3 }
int i;8 ]4 l2 {) y! S" T& m- g
public:
+ E% U2 r0 S. c8 }" Ytest(){i=1;}
) j, S I1 _+ nvoid hello(){printf("%d\n",i);}4 ?. A) `) t2 V; Z4 G/ O8 k" H d
};' O# ^; P1 d8 r1 E
void main()
4 N. S v. y( a1 n7 s" I{
1 i# @4 J% [/ | a& P* [6 i test* p=new test();
0 q' @1 N6 I6 j* kp=NULL;. h4 u8 D# t$ a2 r# w; T. k3 l
p->hello();0 a7 p* z+ j0 K- E) b& W$ [) v
}
3 E" |/ E) S' i6 R4 O$ A6 I2 l如果将p=NULL注释掉就无误,就会输出1.. e) Q5 O9 ^" A' y! k/ Z1 r' U4 b/ J
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。/ {: @. w. e, e, `9 b6 y
(1)C++的构造以及析构顺序 M* o3 p2 t" n+ R
#include <iostream>7 r; u; x9 ^/ Y+ G* N" Z
using namespace std;
8 C2 P: b- {$ ?class A2 f' R3 ` q# o
{
9 M( \) e N3 Y2 |; X6 K' _public:6 s h1 B( h( `/ L1 E1 q
A(){cout<<"A"<<endl;}3 d( N' J% n9 ^, f
~A(){cout<<"~A"<<endl;}2 d& F1 W* _2 h- a# L6 l
};
3 L5 D8 \8 I" l4 [0 [# G; Gclass B : public A
/ r; k/ V C! p9 w" K2 k! k{/ M( l% p% n$ {# i, g: V
public:$ ^; U- o% O( c$ Q, i0 N# `# m
B(){cout<<"B"<<endl;}9 g% X3 S2 R; L4 u2 a L
virtual ~B(){cout<<"~B"<<endl;}
/ S6 O8 A1 _3 Z/ @, Q3 v, c! L7 F1 Q};8 Y2 u, s- Q, i' v s# T: O
class C : public B
1 o6 I; o7 k+ i{4 s7 R0 s% E" h2 m) z, ^
public:
A2 e0 X- a8 Z/ V3 wC(){cout<<"C"<<endl;}. R; L# K G. z0 _ z) a$ }
~C(){cout<<"~C"<<endl;}
. f2 M8 {. @9 u4 x: W: Z};
6 w$ U# y6 ?6 G% y5 Q; c1 ]8 G/ d$ y+ i1 Y5 p
void main()
' c: G9 ^$ P0 t: s{' V" r3 Y: ^ H D {# g; P
0 ?" r4 _9 E, M! ?% _A *a=new A();
* `$ ^4 `# g; J3 EB *b=new B();0 G/ S8 S& T5 O: Q4 N
C *c=new C();" C, T3 w. M8 ~9 ?
A *d=new B();/ N: P: `5 k2 ?* p' [1 A1 w- I
A *e=new C();
5 q0 o r2 h7 yB *f=new C();
1 W( o- r7 x7 _1 s5 T
$ z5 r: [& o4 C; w7 ?( w! I9 ydelete a; cout<<"---------------\n";
* [- m8 _0 c( a! Y e% z) P9 Jdelete b; cout<<"---------------\n";0 w( I6 p( P, ^( \: ~* e
delete c; cout<<"---------------\n";: Q0 Z$ ~6 P: @5 z F% B
delete d; cout<<"---------------\n";& @/ U# |8 ^7 A5 [! p( j% T& R
delete e; cout<<"---------------\n";: K6 H4 y5 U7 G# e0 R
delete f; cout<<"---------------\n";5 [9 i4 S7 X. X# |3 \ ~# Z/ e* n
}; o" L3 Z; N- F* r) v# t$ i6 s
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
( j. z8 I+ c8 ~. ]" g# E这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。- S {$ c0 F' L! |6 D6 V
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)" ~3 Y' w( L8 W
(2)面试的诡异题目
! L% \1 m- }8 h! L6 o大意就是如果你 test *p=new test[20];
( C) Y! l! h& l) s( ^/ i然后释放的时候用delete p;会怎样?(明显这样做是不对滴……): K% G B$ b! I3 a( i. \/ c
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……* H# u, s8 R; T% s6 J; \# s
6 B/ U \5 Z: K
Zz
5 o/ I$ X) G+ y& X% Q爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html- p- J8 w- ?3 L$ X, U
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html2 x4 Z$ ~2 _- y, m' T- J
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
" D( p3 @9 @1 _! b. J——- Y9 C- a, ]1 Y5 t) j- |
百度2011年实习招聘专题$ ?/ T Q5 k$ x+ W
http://www.aftjob.com/portal.php?mod=topic&topicid=22/ \+ M( }5 V! f5 w8 X% u' x; g
爱立信2011年实习招聘专题
8 W1 t- t/ J# _$ X) `' Fhttp://www.aftjob.com/portal.php?mod=topic&topicid=236 Y1 P- s# Z+ j
新浪微博2011年实习生招聘
) e, U3 b% B9 c6 C6 }1 ]http://www.aftjob.com/portal.php?mod=topic&topicid=21
$ ]# G# B0 h! u2 ^3 X6 p阿凡提招聘:http://job.aftjob.com/job1 d) W) }8 p5 X1 }$ w
阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag
8 `. ^! F1 }' q4 p- _: {阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum* V% f h! ]. d2 P& J- E, s9 g
阿凡提职位搜索:
6 X& I: j+ E) E+ ]—— |
|