|
|
2009爱立信面试题
0 `" r. O8 y( A- y& u/ r8 `0 }: M# M, q
Zz/ L! G9 P6 f3 Q, M0 [
1 [0 N/ T/ ]4 d6 ^
(1)下面程序运行结果是什么:
( ?* h" X5 g; x3 O* g6 j#include "stdio.h"/ t' b5 B6 @ i, a6 B3 c$ O. Y
class test
# ?! f: M: j4 o' l8 O4 ~' |4 f' h{0 c6 y& Z6 u+ Z
public:" O/ z! m$ O+ s6 y" E
test(){}
4 B2 l+ e. [& b) ~' ~" Mvoid hello(){ printf("hello\n");}, N# s, S5 ]5 C1 V% n5 X2 @
};
u$ L9 Z. y" M7 T. G5 o$ C& C% q* ?void main()' R a* q: f3 o' ~5 g
{
: Z% V2 X0 D6 s test* p=new test();! ~7 k! Y; F6 l0 @2 i, o
p=NULL;
8 v$ m7 |! v( i6 ^ p->hello();( `" W" t# h0 b
}
5 V4 d% |3 ~$ L事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:- `4 W0 q' L4 @; j
#include "stdio.h"
' p8 d; j' F! b- ]) ^class test
, a! j/ m* ~# c7 s4 ^( n4 V2 F: S3 `{
4 s4 w T) Z) A0 z* ^! n$ a. mprivate:
) f8 w7 W7 J# y" N2 Eint i;' ^- k$ l5 n+ V# M& q. G
public:0 X/ D2 N. D( M m+ c- M* n
test(){i=1;}
( {) |5 h9 e/ X0 w: s" x7 {void hello(){printf("%d\n",i);}/ A" B/ l5 ^& H, ^: W K5 ~
};
4 w5 s% x$ U* Y/ t% Uvoid main()$ i) b8 h7 a- ^% I, N, g% n
{
0 j7 ?$ C( V) S# T3 c test* p=new test();$ H# ^: k6 v, t+ [- P& R b# e
p=NULL;1 o# j* Q* r6 _2 w+ x/ |
p->hello();2 k V( [2 w& u, y. [
}
, P1 I, @" }' t, J$ S, `+ ]! m如果将p=NULL注释掉就无误,就会输出1.* l8 g. J- a" d$ @9 C
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。" U( A$ y1 t o& R1 P; t
(1)C++的构造以及析构顺序
# \ ? L9 S" g. @1 O" d#include <iostream>
4 y* m$ X, }$ K6 uusing namespace std;
4 ?1 N' H* ]. tclass A: o/ @# B+ I9 e
{; L, ?9 M+ G2 k4 W- h' }
public:
0 S- N3 S6 R6 ZA(){cout<<"A"<<endl;}$ x& y) b' I0 [6 c
~A(){cout<<"~A"<<endl;}$ F' y" {, M# I
};
9 M) } |8 d& Qclass B : public A
4 ?: u$ ~' u9 T" n+ S, m{1 q) b/ a1 y3 c! E" K
public:
/ p# |1 d0 B! D/ j& a: w5 f7 HB(){cout<<"B"<<endl;}( Z9 g! D" K9 F3 @3 a8 E S: c
virtual ~B(){cout<<"~B"<<endl;}
# g/ H' F4 Y* y- c6 P: I' w};( E' `3 I, e, e: o4 ?; @
class C : public B/ R9 C* Z6 x, \# d. L
{
( A' p7 i; B7 upublic:
0 ~# B# d- f* F( K) `! l. r) ?' n1 ZC(){cout<<"C"<<endl;}
& T* n, w( \2 s" |" m4 W~C(){cout<<"~C"<<endl;}
. L- x2 M5 `2 e9 G. ]& F' ~};
# Q9 h6 Q: K+ Y& u2 ~7 P0 z: r2 e/ }5 U
void main()7 B. s! \+ C& J& z, V
{
4 P, }: I9 ^5 U# e% R+ }' t" g% w. [+ u F. |) Y
A *a=new A();
: O- _8 |" L9 c1 x+ O: O; Q7 ZB *b=new B();
r! J$ u3 _8 I# l0 ` C *c=new C();
' l( ?9 M& f: ^, ~. }) YA *d=new B();
9 g; ^% ^$ [9 P* e0 ?9 c& gA *e=new C();
+ P; l* t7 c. N$ Z1 wB *f=new C();
. A9 ~: G- z2 N0 ~$ |: A/ \% q
\+ i3 B. g' A$ M/ ydelete a; cout<<"---------------\n";6 v: n- H! B; v$ f: y
delete b; cout<<"---------------\n";- a! V2 U7 S( |8 e
delete c; cout<<"---------------\n";
0 j3 J6 h, a+ T; z0 `" C# O+ L; Jdelete d; cout<<"---------------\n";# H( U6 K; L% _
delete e; cout<<"---------------\n";9 k: N U8 g0 o! e" V
delete f; cout<<"---------------\n";
7 t5 E. x# Z6 x* x2 u3 D3 J% G}
5 V! l# j+ n6 M9 M+ N- T8 k这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
9 v; c! z* r7 e M: _/ X# @这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
6 w( T5 h s0 W, _2 \# H' h) A其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
0 \# N( B0 E5 Q9 g(2)面试的诡异题目
' Q6 ^4 m& z ?+ j大意就是如果你 test *p=new test[20];
- q- X& f7 ]$ U6 w) f然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
* @6 y5 Q% c* i. c6 X8 _- g& \3 `3 J答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……9 u8 o# R( ]" F% V
' N- D i' i; n+ s3 q
Zz
0 I8 Q3 C! {. x爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
2 W2 b3 f! ]) z0 y/ v$ s: G上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html {- c9 M1 q7 i( d: H' u
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
$ Z w' [ E5 C; e+ j; `$ r——
: r; r; b4 i% _$ l/ @百度2011年实习招聘专题
( e6 P) L* U5 y& Ahttp://www.aftjob.com/portal.php?mod=topic&topicid=22" [+ j& D: ?0 g$ ?/ g1 q; N
爱立信2011年实习招聘专题
. y0 _( W& S. {$ F) Z4 fhttp://www.aftjob.com/portal.php?mod=topic&topicid=23 U5 H( y% z, F
新浪微博2011年实习生招聘
" N s7 S( j' _. @/ [6 Khttp://www.aftjob.com/portal.php?mod=topic&topicid=212 j* k2 k. {! I8 j/ g& w
阿凡提招聘:http://job.aftjob.com/job3 u) w# |( F) c9 M3 {
阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag3 l4 M8 Q7 \7 R$ n! o( N# _
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum) }, G2 i) |6 ?5 r% ^
阿凡提职位搜索:
* @! T' f' d2 N" `' U—— |
|