找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1133|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
0 D8 y  e6 E0 Z
" p% z* K5 X( g& F1 }Zz- J) A. [1 S* G  J

' P) U2 K' e: X; _# B/ q  T(1)下面程序运行结果是什么:
& G3 f( Z( x  l# n#include "stdio.h"
4 t' u1 T* v8 b. ~5 [; Gclass test3 @& r0 _6 `  E" n
{
( k4 k% f0 @$ \+ Ypublic:
0 E6 Q& ^( V: A* j3 Ptest(){}
1 O5 G1 h- `( v4 pvoid hello(){ printf("hello\n");}- L' w$ b6 P6 v1 k( \  w
};
5 w: x" r9 ]9 Xvoid main()
6 E6 A$ y( O+ }$ g6 P: }5 j. V2 j{. q$ S% Z7 R) u' T8 n
    test* p=new test();
! O; W' K  e+ e  H! H+ U    p=NULL;0 p) c' V+ k' Q
    p->hello();
$ y# Q- a1 b# }- f, z' g}1 p  U$ G3 H7 @( t2 H+ S
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:9 M+ I1 w- I7 h  f* s9 j
#include "stdio.h"
1 A$ v5 \* K" \3 M3 A' g, hclass test
" C6 t, X: y5 \$ c$ s1 Y! B) R/ u{  b" f, c; B2 O% }0 Z) U
private:
0 }- z, {( m$ c4 ?+ x# s  d# cint i;
2 t! X8 Z- v; Xpublic:
% }0 F) h& @- u( Z& ]test(){i=1;}
" t* q% `& s9 \/ c% ?8 ^6 T8 t( s# hvoid hello(){printf("%d\n",i);}
3 U. l/ d2 K, @% s};
. I" Y6 P8 ]  q% Z0 H; rvoid main()
" J6 g' k" ~3 A0 Q8 H{
. }6 w1 p0 g: u" ~* |! H    test* p=new test();
4 H/ H- H+ u7 s( P5 m* c: `9 Op=NULL;
4 j. U; w/ H, r7 O* v  Op->hello();
4 Y; a) w) N& w0 p}
, _1 ]& C% l6 B! w3 |3 r如果将p=NULL注释掉就无误,就会输出1.6 G$ b3 [% S- y  f. s, G6 }
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。/ B: A0 ~8 q- L3 O# ~- l
(1)C++的构造以及析构顺序; q# n: x5 d* B( ?" k8 q
#include <iostream>
, d. A: O; @0 u8 {8 nusing namespace std;2 E8 C! u7 E- d, v; F
class A6 n& f7 d- U6 H
{
% W* l. B% n0 ^  N8 A4 ^: Rpublic:
. U9 X  [/ j  h( `- bA(){cout<<"A"<<endl;}) A: k# U5 a6 X4 O  f
~A(){cout<<"~A"<<endl;}* b% L, J( u: E) O) }- ~/ s
};
' j- F7 u& g4 `5 I, q+ Pclass B : public A) K& z1 |; T5 V% r6 C
{6 @5 q, P6 z, M9 A1 U5 Q9 _3 ?) M7 d
public:
) l$ g' ]8 w5 }B(){cout<<"B"<<endl;}5 V1 G# @  v, ]  W. ~
virtual ~B(){cout<<"~B"<<endl;}
* y* Y  w, Q& K8 e: E* @: z};
9 v1 m  U  t1 v4 G: s( T3 vclass C : public B
' q+ V8 n; b/ S{8 V" A* Q9 H" R# g) H
public:
- ?- j! V1 s: J3 g( y1 @C(){cout<<"C"<<endl;}1 [' @+ m9 [1 [, s
~C(){cout<<"~C"<<endl;}
! I# V+ }$ t/ C};
' X3 p. u5 r3 m9 G( N; A: V- |) d- A1 |9 ]. g& p
void main()
2 P: T" j5 U+ B# e* Z& C{
6 T& m6 K. P+ l+ z1 S0 ^6 V, i6 x" J
A *a=new A();
0 y6 u" n5 g; J2 z. l& W* w: y  yB *b=new B();
: \( O- t* ~' e8 B( F  C *c=new C();
2 ~; g- J" w9 A! R: |4 \A *d=new B();
2 _. w6 ~& s1 D) W7 N: ^A *e=new C();" z; q2 j0 _) M4 g& L* z* V
B *f=new C();9 _1 a1 A4 Y% b' e+ B5 A
; A5 [" O* O) x3 R0 G9 q
delete a; cout<<"---------------\n";
; j6 a! [! |, ydelete b;   cout<<"---------------\n";0 ~1 }% C, t3 x  K, ~, [5 _& n8 V
delete c;   cout<<"---------------\n";: {& E9 P7 L+ g
delete d;   cout<<"---------------\n";' }. X7 x/ R$ T- H+ m. u5 Y
delete e;   cout<<"---------------\n";
& h% d3 z" }8 V: d, Jdelete f;   cout<<"---------------\n";
7 E  b# _, g9 Q) Z; K: f3 Y( c9 ^}
' M& W9 Q4 Z( H) Q) \这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。7 r! g* f4 y+ M+ b
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。2 r2 S- X/ \8 V/ I  e( \# i
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
, U: m6 F) e+ [. w9 A(2)面试的诡异题目
7 m" G8 s$ ?) ]0 I& C大意就是如果你 test *p=new test[20];- Q! [0 q6 J; o; r" f* i' t7 E) ^" n8 B
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)9 ]1 a& {3 q7 o7 y/ m2 L1 W5 t+ n& n
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……" d4 a' ~8 L* ~8 b
! h" A$ m) P6 o( J
Zz
; g" Z2 C- B2 C4 o: g9 ?0 B爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
+ o* X& S4 e( k2 A; o& b0 M% p5 y" b上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html5 |' S+ k1 j1 p) t4 J% A
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
! R, U9 h& i$ K, H2 L9 h- x——
& n% Z. z, h$ ~9 x5 H0 W( ^5 ?/ V百度2011年实习招聘专题+ T. t) H; b  O# J9 k
http://www.aftjob.com/portal.php?mod=topic&topicid=22* R1 ]5 J5 O7 h7 t5 p% L
爱立信2011年实习招聘专题
1 M1 y$ I1 r' n' R3 Ihttp://www.aftjob.com/portal.php?mod=topic&topicid=23* I% ~! H( F! ]! c# w, q2 b
新浪微博2011年实习生招聘
) Z- b4 h( V8 D$ o, jhttp://www.aftjob.com/portal.php?mod=topic&topicid=21, X. C5 L" ?3 i- J3 p* W3 z
阿凡提招聘http://job.aftjob.com/job
$ W, p( d. ]) A6 T% K* A阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
7 o( n8 o. S- b0 s/ E7 J7 S* S  O阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
  g( B8 N/ `  \" O1 m阿凡提职位搜索  a) U7 G) h) P6 `6 I& t
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2026-2-19 02:21

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表