|
|
2009爱立信面试题
6 @" m, m( [) D1 \, o4 J; C, Z% ^8 |, W% ~( X
Zz5 m+ ~, \- B7 G# f% t
5 ^- }4 S+ `( w( L0 C
(1)下面程序运行结果是什么:
, A0 ~6 P9 H& Z: e! ?; Z#include "stdio.h"" Z* }4 [. M, a5 P k7 g2 W; L; o. |
class test4 N J+ Q0 h6 L9 F" B) l
{' V* w, ~( t# b5 K0 M
public:
3 H% u! ]% [6 a7 `; ltest(){}! x* ?4 `$ O& W s4 i! v$ o
void hello(){ printf("hello\n");}0 H3 y& d* \4 j2 c6 t* ?
};
$ u& Q2 P9 b2 l! p, ]void main()
* z& j5 _& r6 v' L G8 V( K& P{
; b; [( O8 W p test* p=new test();
- e2 D+ N! w2 G p=NULL;
+ x. j% \! V/ c" G( v; T p->hello();# r8 z- X6 ^1 m: q# ]
}0 Y4 s# K0 a% T f
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:$ U; P) \/ F) i7 K7 u' N8 E
#include "stdio.h"
2 ]1 _) u/ I S& F x% rclass test: W' n# H7 F5 Q, n N+ ~ D
{
* G( E) ]" p g2 Z8 zprivate:
0 f8 Z- I1 V' aint i;2 Q! ]$ Q5 z. i. A3 B( G, {6 h
public:# e( S& D; v2 ^7 M& W& h/ S* n
test(){i=1;}
+ z9 L6 ]8 p% _; }% v1 i) K2 n- Jvoid hello(){printf("%d\n",i);}* U/ b& G4 h3 f0 M/ A
};
0 ~. A$ c6 ~3 [% Wvoid main()
' S$ A9 k/ B# y/ p6 B0 F{! _/ M! s. v- [& V* i
test* p=new test();8 d7 q3 W4 [1 D" q. A+ G/ a8 {# q
p=NULL;
- C) ]) A: u3 o; S' cp->hello();* o5 [; v8 Y2 w1 Z6 s0 S( ^! k
}3 r) w0 a e3 h- N- W& o
如果将p=NULL注释掉就无误,就会输出1.! |) U( o0 c: p% H! n
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
3 \3 i+ S: \4 S( V( n7 B(1)C++的构造以及析构顺序9 n0 Z* j8 D2 E2 T) h
#include <iostream>: a% I0 G* d: }8 U X. f
using namespace std;
/ E1 G3 h' s9 @# _: @class A
& s+ j1 [ | V# k0 U/ q, s4 Y8 e( h{
" p! S2 t7 N5 n4 t. Z+ R X) k! d5 ~0 Npublic:
! P9 U; Z* d, }! Z5 S& zA(){cout<<"A"<<endl;}& h* O0 ^, V' n- A4 f" t( b, X
~A(){cout<<"~A"<<endl;}
5 q; P, `" ]" N) r$ L& J& L7 i};
6 Z |+ B: ^2 tclass B : public A0 m% X' k/ T4 |
{
_! c- N& ^7 }' Vpublic:
* v2 R2 f3 Q! T2 x0 V% E8 U8 a1 QB(){cout<<"B"<<endl;}* M; u+ K' H: a+ z3 z, J
virtual ~B(){cout<<"~B"<<endl;}
- n( i, F# g5 l# {3 Z; f};: f& @9 ?3 W- K
class C : public B4 [/ {# T4 p0 t$ `( Y, H& z
{* ]+ M- d# L& Q u0 X% s9 ?+ t
public:
: X" k. U0 H6 a" n! ~7 IC(){cout<<"C"<<endl;}
# n% @8 a( S" B/ J0 ^~C(){cout<<"~C"<<endl;}
( K" f* |) A- r' n: ~( ]6 q* }' U};2 c) B0 f. U/ p2 V" Q1 ^
* A" y; y( |; s: Ovoid main()& R: K5 @( O) [ S3 b
{
' `5 m6 ^/ N4 q
$ B1 f- I" P5 P a" s5 a7 Q9 ?5 {A *a=new A();
# P' a" l. V. u# ]/ k! y/ vB *b=new B();
$ f' l/ R9 f& s# }) ^ C *c=new C();
2 X0 H" v' Z# ^A *d=new B();
. U( B2 X% G4 n% W0 q7 Y) t$ d1 @A *e=new C();6 J' \- S4 V" A! G; z0 v4 u
B *f=new C(); @. o: H; u: r/ u7 l
4 h" ?9 `( ]3 U$ t9 Ldelete a; cout<<"---------------\n";
$ `% P9 C! D% B* `4 o. Mdelete b; cout<<"---------------\n";/ H3 m7 A1 N9 t7 ?# j
delete c; cout<<"---------------\n";. o0 G9 h3 a& c9 G. G) P- l
delete d; cout<<"---------------\n";
, _. i$ d. d! d7 ddelete e; cout<<"---------------\n";
( g& s9 I P2 ^8 Idelete f; cout<<"---------------\n";
. Y. e9 k( I: J}% Q2 |. P6 Q% l4 {* d2 O0 m$ B4 @ [4 h
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。9 [9 I, ^- _. Q5 t
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
7 `9 k B: x/ P6 h( c4 b4 x2 l其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
% z/ Q' i0 U1 T( l(2)面试的诡异题目
; E9 l: V5 |: o0 O大意就是如果你 test *p=new test[20];; J$ g" N$ B. L- j' ?1 w2 E! M
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)$ O. ]2 f: D, t( n4 S# l6 q
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
" B, Z3 S0 r& O: e( \7 V8 J) K2 e! h6 R- q
Zz
& x8 R1 z; a7 x- B爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html& z( v1 |/ Z; v, X/ _+ w
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
) ~2 ^! [" g% ?% Q- l1 c% a爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
& @5 N; K9 [2 b——
% j! ^) i, `, x* J2 e9 Y- N, ?! i百度2011年实习招聘专题( `3 u# ]: ]8 \, ^
http://www.aftjob.com/portal.php?mod=topic&topicid=223 v" p6 @8 D; g# \9 f
爱立信2011年实习招聘专题
, {) Y4 u+ F+ s, mhttp://www.aftjob.com/portal.php?mod=topic&topicid=23( z; D x. p( |
新浪微博2011年实习生招聘
8 ]& y& L X5 `' ~: phttp://www.aftjob.com/portal.php?mod=topic&topicid=21
9 H5 g; r5 x$ X7 }- h& x阿凡提招聘:http://job.aftjob.com/job; w- g; J# a ]9 `+ L! S. Q1 S; E
阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag# O, h8 ]3 P' Q1 t( Q# m) u
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum5 t" v: O: M+ u [
阿凡提职位搜索:: k" M! f9 ?: Z# x3 f3 J, b
—— |
|