|
|
2009爱立信面试题
, y" j6 U) o7 a- L) F# j& F- N X9 r) T8 i5 }* C% ]+ X/ L# Q1 N5 s1 S
Zz
1 M9 K* M! s3 k i' d0 u1 F: K* r: x# q7 _8 L% ?$ o$ M p5 v
(1)下面程序运行结果是什么:
& k# i# a$ X" z; m: G#include "stdio.h"" u/ C& C5 t; z: I* F7 Z/ _! R' ^
class test
% t! ? k# U; E2 ~8 v. e" O{
$ W& N% @2 b5 l- Y( n) U& U* upublic:3 C l6 |- c9 ]! \4 c3 S
test(){}
+ N/ W( ?7 T1 n' Y3 m* X9 P2 cvoid hello(){ printf("hello\n");}
( i) i) W3 [ S( z# v/ I};
' V0 X1 s0 B+ Q& R; O$ W, ivoid main()
/ h! i1 }1 X2 }9 t) A& G{
" N4 K$ a& k8 K @& I0 v! i test* p=new test();- H5 V( b; x+ P$ X, T( D3 T ~) l
p=NULL;
7 T2 h6 r; D1 @9 m0 }7 k* ` p->hello();2 g# J* a/ h/ v1 H8 r6 L; a$ I
}
& }6 P3 ?* }) }2 e5 R8 |' r事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:7 `5 E( \8 P& H% H7 O" C$ r8 u
#include "stdio.h"
" y6 m( B; s4 e4 N. ?. rclass test2 u5 i0 I" a' r9 v; R6 f: q' ], f
{
8 R9 b$ [. y' r3 b6 R7 \private:
9 l9 ~# j ]" _+ f5 k Mint i;
$ `# w% x0 \8 u4 O4 B( j) Ypublic:
0 P1 p0 s( x" p( ktest(){i=1;}" h+ j2 r. C3 y+ Z$ \9 O$ J, _
void hello(){printf("%d\n",i);}* k# f2 R1 w3 M( r7 B: j0 s% V4 C
};. U0 u2 g m+ Y! C9 t
void main()
. S# b% \0 }4 q/ b! D1 r6 @{1 a% L& O* U" ~. [: ]1 e- r- Y
test* p=new test();# b4 n$ i' P, ^0 k) U
p=NULL;
l4 R; B3 J/ _- |& Op->hello();8 ]- y6 m6 L1 Q4 T
}
0 C" j7 y! ? @如果将p=NULL注释掉就无误,就会输出1.
) E% A+ H/ }& Z r; i$ n) g注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。) P) z! S2 t, D3 G- f
(1)C++的构造以及析构顺序
) z5 n0 `0 o, Q7 Q# {4 X#include <iostream>& d) g; z" T% k8 V4 U. \
using namespace std;! c* R. r; P! \: F/ }7 n% Z
class A! V. Z# o. [- y& D1 J1 _
{
: `9 ~/ v4 K$ Ypublic:
! r& O, [: ^$ [A(){cout<<"A"<<endl;}
$ ~$ }3 z8 ?' e* `$ S7 R~A(){cout<<"~A"<<endl;}1 v0 z9 X1 Q& }2 g: E1 E
};
" J9 d S, \* i+ @" Sclass B : public A1 j ~9 ^) {% P+ W G' J8 i
{
" D7 ?: a, D; U, b; ~public:
- W' M: T+ O2 p% i- U+ k' cB(){cout<<"B"<<endl;}
0 d3 a$ `+ n$ ~" \, tvirtual ~B(){cout<<"~B"<<endl;}
2 M Q- h0 q+ F: ? b: t% s};& U8 l% _' L0 m" W* Z
class C : public B
: ?5 B/ U9 j$ w% f/ B1 }( h/ }& C o{
( D# w- v$ E5 }7 L, n0 n1 O+ N" Bpublic:$ W4 s) g3 g) M) F" `7 S# Q( U
C(){cout<<"C"<<endl;}
$ E# q$ y, O( [6 c5 O~C(){cout<<"~C"<<endl;}
2 O3 c1 Z$ t/ B9 X! n* ~ `6 o};, {" M% B) b5 _3 e" m; M
( D; f% C2 a0 N+ H* |3 Ivoid main()
a1 e% I3 |* t0 H* ^* Q1 J* a$ @{. B; K# @8 G1 b
3 A1 l N: p1 ?1 fA *a=new A();% M: u; D! ]& N" k* w s
B *b=new B();
5 T0 z! s0 ~" J5 C C *c=new C();
5 U* D1 H, O6 y8 |0 j$ G0 k! SA *d=new B();
; U' |2 O% L0 D n) a" F* j/ jA *e=new C();, @+ E2 J8 L6 _, Z$ X
B *f=new C();0 L+ z. {% b5 x+ [
. K: w- k$ _4 A7 d+ A5 T/ ^
delete a; cout<<"---------------\n";
: }- I5 n: q* Z" r0 u! ]delete b; cout<<"---------------\n";, [& ?. g0 \+ O) @
delete c; cout<<"---------------\n";0 Z, k @2 K z: V8 \! `1 c# T
delete d; cout<<"---------------\n";5 C& y0 G0 T' }0 j
delete e; cout<<"---------------\n";
5 ?" Q; K" E M7 E6 m4 Z2 udelete f; cout<<"---------------\n";
3 ^0 `# j% T0 `" X* D}# @2 u( B+ T' t& K$ i
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
( I, \% c3 m# `9 F2 y2 k这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。- L8 H2 z/ f$ l
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)8 C, }# X6 ^/ g# o1 I2 t% h
(2)面试的诡异题目
, F F1 S3 A% D( k& E大意就是如果你 test *p=new test[20];# q6 `: d: X3 m" _
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
5 Y) n( f- g: f: N6 C4 }答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……/ |: j! y4 f2 u; b2 z0 {# R9 _
5 p8 t$ [ _2 |% x5 b$ q; N
Zz1 [" |, n) b" Z+ e. E$ o, H2 e
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
3 ]- ]/ r- p! \5 G. t- n上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html- y2 R, F1 |8 M
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html T8 x Q* E- e+ B
——( o& M5 u% a6 ^; H9 J9 O% ^( G
百度2011年实习招聘专题) u7 F' A- g* k# k2 t/ V
http://www.aftjob.com/portal.php?mod=topic&topicid=22
5 f. `' r8 a8 F2 \爱立信2011年实习招聘专题* N% }) S: y5 T$ d# `( ~
http://www.aftjob.com/portal.php?mod=topic&topicid=23$ ~! {+ l) T% {2 s8 q
新浪微博2011年实习生招聘7 ~2 u4 i8 }- C$ q' C
http://www.aftjob.com/portal.php?mod=topic&topicid=219 ?- J$ W, ?6 K1 g# x0 c3 A
阿凡提招聘:http://job.aftjob.com/job
! I4 n. ?: [! Y阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag; o; m* l% c) e& Y
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum
* `, K B. v# S' H7 v$ N% G阿凡提职位搜索:
8 u- m/ w, @; f2 T—— |
|