|
|
2009爱立信面试题
9 ^9 \6 t: D6 s7 P* A( I3 |4 o& U3 j# n
Zz
% [. ~8 y- Y' L$ ?& H! }; a9 `3 F% x( F$ X0 Z, s7 S/ E$ |
(1)下面程序运行结果是什么:6 J' W2 D0 ]( S$ B' P5 B: d/ |
#include "stdio.h"- k' j1 |" z) l$ c' }2 p- N
class test
8 t- T( a" b7 d2 O& C$ }7 e' t% C3 X{$ Z; p; e& F% u% P+ k7 M S! E* u' t, k% z
public:5 g) \$ W+ C$ Z/ \9 t; ?) v
test(){}5 P2 k; o U) |9 v1 p. @2 c
void hello(){ printf("hello\n");}
, l+ Z3 K0 Y0 m/ Y};( l; p0 M2 k% d. W
void main(). a/ {7 p9 E1 M0 U& G8 T+ Q2 ?
{9 i! d2 g) C3 R7 C' s
test* p=new test();
* h9 F3 K% |& X7 }* v+ E p=NULL;7 g, A4 e+ F0 H! }+ L+ e
p->hello();
+ \. W' t. w8 [" a9 E1 A3 L; n}
# ]' E1 [: {3 X) q! f事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
" `- z) P3 V1 m2 m" [#include "stdio.h"1 t9 r& @) B( ~$ C
class test( A: J( g ~$ F7 X* F" t
{! J, w" Q D5 h( i. Q
private:( t$ W9 ]0 |* c( k, |; t6 V' S J0 H
int i;2 a. D! y6 v: `% e, x- w
public:
5 V: s; C* L1 ]2 }# E* [test(){i=1;}
1 }$ m) @+ S4 ~9 Cvoid hello(){printf("%d\n",i);}
7 j$ ~& |: o, F' {' U G};
3 F% E1 U# E5 e) @- a7 f# ~3 evoid main()' t, X, ?" {/ s) P% `
{, W! A0 A6 ?5 B( E$ ]( d; ]
test* p=new test();
, l6 @- c$ \& u- Vp=NULL;) S9 L. v/ e2 T% m4 ?0 B
p->hello();
# c9 K& J- J0 X1 H- l8 `/ H1 i}) W! ^* ?* F2 K, r _
如果将p=NULL注释掉就无误,就会输出1.
( t4 h! {( y4 q# }0 l, u3 A; u注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
& S0 z# g; k" a! c. F/ M(1)C++的构造以及析构顺序1 [: e- a1 I- S) A9 f# x& q
#include <iostream>
! E! g E) `9 A7 Tusing namespace std;6 ?1 A" {% Q' J9 o. q2 V* Q
class A& v& k; E! A3 e+ b! T
{- M$ @7 ^; x& I
public:% l, \4 } Q; Y0 ?8 p" u
A(){cout<<"A"<<endl;}" n0 z/ `2 K/ g# X- J/ Z
~A(){cout<<"~A"<<endl;}
" M7 _! r* i. t* g4 s% e};
s' h7 }4 V/ g, R6 p5 Pclass B : public A
# Q- o; L% I6 H6 y/ C+ @" |! q{
, s+ w. r5 `( K" jpublic:
: l/ c2 x% L- \- PB(){cout<<"B"<<endl;} c0 s' t5 s. o9 q
virtual ~B(){cout<<"~B"<<endl;}* O. a' U8 k/ @+ `9 U; }
};/ _# l& @/ g f# a; v6 T1 [
class C : public B5 `: G: R: U4 d2 e& N
{# ^& f0 m4 M6 \* H: _3 M
public:
- Q# @! u4 R( ~. M+ SC(){cout<<"C"<<endl;}1 a( O/ R- \& F4 f1 S- ~0 d. W4 K" |
~C(){cout<<"~C"<<endl;}+ T$ y* r% h7 y; G4 I
};
" C- S1 i: O8 c& g$ l6 d, M. d: B/ i; N' i5 N
void main()9 ^3 R4 @5 Y" j& j8 i+ b* y7 b
{& P$ p( h H( P4 ^; D/ w
8 f( y( X4 B0 K+ ^ qA *a=new A();
: s7 e: P N8 f1 I' n# q, [) mB *b=new B();
' _; o7 i) U+ X3 _- t% @ C *c=new C();8 [1 h" C, X; K/ E) L
A *d=new B();9 D; v/ T# r( v" ~$ }; r7 r f" W
A *e=new C();8 E: ?9 |1 f) Y% {2 W
B *f=new C();7 N+ d4 A' g5 v2 ^" t3 w$ C5 I# i* S
$ ?2 ^9 t' Y7 k7 }- j4 J7 z3 L
delete a; cout<<"---------------\n";0 v3 f O2 \% l5 O6 J
delete b; cout<<"---------------\n";! z0 F: V6 t# _' A( S
delete c; cout<<"---------------\n";( m4 M( v* I* F
delete d; cout<<"---------------\n";
5 J) `5 [9 f" l% K" Gdelete e; cout<<"---------------\n";
, X. Y; v `, Z$ r$ x9 F+ Udelete f; cout<<"---------------\n";
4 _9 ]5 U# O6 b' T# E! \5 H) Y* A, l}
; x% f( O% r2 b- p/ O' ]+ C$ U这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。( x. ?2 O8 ]" S5 F+ {% I x
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。# F8 l3 K. d9 ~! L. _- k- ]
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵) k7 q# d- h! ~: l
(2)面试的诡异题目
2 ^2 J' [( {! w6 U; I( K大意就是如果你 test *p=new test[20];
7 g) o) B: T5 T$ L1 o/ R) j/ y! |然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
- i6 A6 O9 W" _* d1 q! f9 @" l答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……: l& J& k: b* d# R7 e- |. j
- h9 E8 R. ]. L+ A! v+ a" z9 }
Zz) G F- e4 t: ~9 n p8 A
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html6 M* U0 }! p( d8 H- w1 C7 H
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
( t+ d4 _! l: g3 g; \爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
) C4 Q, d' G% P* V! I0 ]. t——
8 F, M+ N. I; z. g" c百度2011年实习招聘专题; g% j- B) _) c- V1 m
http://www.aftjob.com/portal.php?mod=topic&topicid=22
( A5 u1 Q1 j3 A: @6 Z& X G爱立信2011年实习招聘专题
3 ^4 h2 T' R3 V9 w9 |* T+ Hhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
6 g: ?: X$ W7 \4 T! B o新浪微博2011年实习生招聘
/ f" ^* V6 o; I8 V; e& `& q) ~! uhttp://www.aftjob.com/portal.php?mod=topic&topicid=21& z# c( e8 ^& n: y) v! N
阿凡提招聘:http://job.aftjob.com/job
6 T) M8 c! u! E8 r! H* C" @7 J阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag
8 r: _( A$ g, ?4 \/ Z4 d阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum& N0 G0 o/ M8 I! i+ r: Q
阿凡提职位搜索:
' q! u" s3 c/ Y—— |
|