|
|
2009爱立信面试题
( R4 a" x& |0 @4 ?4 T. H0 l* Q2 ^9 y/ r7 Y& w: \6 [
Zz! G: H3 C! E' \+ ?" U1 b1 g4 E& j
# {. [" Q, _1 ^3 O) t: j% J
(1)下面程序运行结果是什么:
" I5 d; `1 V! x. W# X# j$ k) p#include "stdio.h"
% u5 t; t9 l6 P/ g) M3 q2 L* _class test
3 n) W' f- ]. a4 T2 q0 k{5 k0 `* V# {# r
public:
, Z2 k# u4 l3 a1 n; Stest(){}$ N7 u; r$ a2 N1 c& F
void hello(){ printf("hello\n");}
1 i w1 |7 y: R};
}7 K# J. N$ w8 {% d0 c6 Svoid main()
2 t6 a3 e, G3 W) h. e& }6 v{, r6 T1 e2 e+ H% F2 W
test* p=new test();& }" S0 V! O4 g1 ^- A) g3 M
p=NULL;
* @* X: s1 z# J2 ]. y+ k p->hello();
( L+ ^' f" ~/ |}8 A) N4 Z/ H0 S! i9 I
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
$ O! Q- ]& t/ c; I. h/ G) \#include "stdio.h"
* ]! K6 |* S/ U+ d# xclass test. k8 m! U/ I9 @! |: @$ C" G' {
{
2 h, @. F0 [# jprivate:
! E9 Y7 t' L' I; \- r* eint i;
0 i/ ~4 \5 l J2 L# F ?public:
& R f3 l' k) `" [' [; mtest(){i=1;}, J6 `2 s5 _6 i
void hello(){printf("%d\n",i);}
2 U' ?2 H0 {1 S9 ]6 u) |) P};2 G: w6 |* e& f( g" q4 `! H
void main()
+ X" q; X% P( z! L{# p, u+ Q9 q1 V/ R' y1 k
test* p=new test();
2 z2 g; T* ~4 g) Vp=NULL;
, P9 V2 {4 h6 J/ @% p) F2 Hp->hello();7 Q" ~ x; W+ r; @ O( t
}6 p K- a. H1 y$ }4 y5 w, B
如果将p=NULL注释掉就无误,就会输出1.
; S1 T0 j1 D, u0 P注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。8 N/ U3 k7 Z! N# v: K4 R
(1)C++的构造以及析构顺序
$ K5 x' D# N3 ?" V5 d! l* C- F#include <iostream>
( w/ }9 I0 h7 Z! o+ pusing namespace std;$ o) a$ f' V* K8 e" q" O3 I
class A
; N- w$ @ t% l4 d{
, l" j- {" j! Gpublic:9 ]( f$ t, r0 A" D. U
A(){cout<<"A"<<endl;}
, E: e' o) c. \/ f$ R" \. b~A(){cout<<"~A"<<endl;}
) N: `; p1 A4 w- f) I};
" p7 J3 F1 I: |0 Wclass B : public A7 j0 o- d: j- K# T, X
{& Z2 e, |! z4 l- p4 X6 Q
public:4 x2 P9 i2 S3 w: i- o& n
B(){cout<<"B"<<endl;}
3 J! I+ B7 k3 k. i( P, Lvirtual ~B(){cout<<"~B"<<endl;}
3 t' H$ }, g5 ?7 m};) n s# b! [ X g6 N, V7 S
class C : public B
1 J- ~$ @+ U: [{
* o) x w$ t! M' F1 y% k& Hpublic:
! c' Z' V! h2 q( e5 uC(){cout<<"C"<<endl;}3 @/ Q" U6 d" s; X
~C(){cout<<"~C"<<endl;}1 G3 V4 E! p( Z9 {: z; U
};% b1 d) ]; H: C e& P4 X
2 P! m8 b, ~7 ~ S" S
void main()+ w; F" j) ]! G# ^2 E9 c
{
0 E; Z* e8 d: y6 t
E9 F3 c8 P2 j: s: TA *a=new A();
- t( \+ [" l9 C9 zB *b=new B();% t+ g7 e8 ]% [. ^6 y" q# l
C *c=new C();
8 L9 w2 T% h+ y8 f% o2 WA *d=new B();2 z5 f0 ?0 K( O: S
A *e=new C();
, \. \$ p: g) S, k6 f; x+ TB *f=new C();4 N; [$ B- I/ n3 P! j
8 S6 v& S7 I% V3 J, D+ c7 `" }, Q8 G/ O. Rdelete a; cout<<"---------------\n";! v9 }4 v; |( A
delete b; cout<<"---------------\n";3 o/ R/ k$ A# W6 U
delete c; cout<<"---------------\n";* X4 i+ [8 N' G- T
delete d; cout<<"---------------\n";8 r' p. \( W9 l( ]3 r" o
delete e; cout<<"---------------\n";& X- a ~5 N* G, M
delete f; cout<<"---------------\n";/ H& [, K/ Q/ U
}
8 e/ |$ s5 q6 @1 H% F1 B( a+ x这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。- H% B" ~1 x* i1 z9 ?6 c
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
2 H- H% o1 y- S+ l其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
' l0 R/ P$ N1 |(2)面试的诡异题目. y% A6 \ o# J6 p
大意就是如果你 test *p=new test[20];
; k$ W8 G& k$ c. `3 b然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)! A& N" d2 E3 ~6 E! G
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……1 {3 Z# E: `3 [9 `. ~
1 ]* V/ l& h1 s
Zz; _( T4 U" J2 S W+ V
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
# x. v. H8 t- t上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
& p" g! S" ~+ Z. Z4 H爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html- X! B. y, n) N& T `' H
——# U" H7 f, y/ K
百度2011年实习招聘专题
( t+ }& b1 ?" G1 Zhttp://www.aftjob.com/portal.php?mod=topic&topicid=22! _) c" o3 |& c+ K
爱立信2011年实习招聘专题9 t1 x7 H; v+ l+ `" r
http://www.aftjob.com/portal.php?mod=topic&topicid=23. Y( K! o- N, o5 I- |
新浪微博2011年实习生招聘' K% b! E8 Y7 e9 p% S
http://www.aftjob.com/portal.php?mod=topic&topicid=21
5 a1 a7 E1 r% T# X+ H阿凡提招聘:http://job.aftjob.com/job
6 U0 r8 ^! w7 j: R9 n阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag; ]! e4 _; p; [! C4 \
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum
. M5 V* B) T) l( P- ]阿凡提职位搜索:/ I) P" g: o/ |7 B' ]
—— |
|