找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1310|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题5 P5 m5 P; I6 f/ ?
, L" u: q+ N5 b; F# j
Zz- X$ ^0 J+ O* s) _

: {; j4 b; d- {# n7 R6 a(1)下面程序运行结果是什么:: O0 B; d- G' h+ ~! v$ _
#include "stdio.h"3 I. V' U" l: @4 W5 f3 z  b
class test# A6 t# ?& r& {
{7 A4 z4 u. ^# V; V* b9 ^) V
public:
6 R' Q: n9 a: h% D( L/ etest(){}, s0 u8 i7 a3 d  {/ V6 Z- J2 m
void hello(){ printf("hello\n");}0 @' i& [0 q! ^1 J
};- r8 M: Y  n  K
void main(): K+ ^/ K2 O- F. X9 n' V+ a
{  |! t& O9 C6 W, f% i5 X, p
    test* p=new test();( H9 |- S; m9 T" ^/ }) g1 u
    p=NULL;) m& x1 L  w% c' r5 V% o8 d: ~
    p->hello();3 n1 h. ~( Z0 |0 m7 f$ d# \
}
6 r1 J/ Y+ E4 ~事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
: y4 F+ y2 E( W1 X4 z. Z#include "stdio.h"& @2 [; F/ S3 u4 h& L
class test
% l) K6 C3 _$ h4 M) q* M7 T{& ^& e+ s, h! q+ f
private:
" R) p' [/ _  O  gint i;
) }0 {$ D0 |: H! O% F5 m2 xpublic:0 O8 A4 y5 }- {" X% R
test(){i=1;}
' C' y& c8 z4 Y* C+ \" svoid hello(){printf("%d\n",i);}3 l( ?& D% j8 D/ n9 B; `+ ^
};
8 y4 k& L4 I8 x$ l% g7 _1 uvoid main()
; @7 j/ V! m& X. M& |( @  s{
2 m4 R/ x. o1 x% x* I    test* p=new test();) B6 i2 \" {3 q4 g& x$ f8 n
p=NULL;
& ^. |8 S  u+ G7 {! Bp->hello();
; L5 p2 Z) G/ A}( H& Y  g2 ]: q8 n# y% g
如果将p=NULL注释掉就无误,就会输出1.
* U5 k0 d  U3 Q( M+ {6 y注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
. D" ]- g; J; z( E7 q; P& _(1)C++的构造以及析构顺序4 u% w4 m0 l7 k* V, X
#include <iostream>6 L, U9 r. b# w& a6 ~
using namespace std;+ D2 B. J' I6 [! w- X6 T7 m1 i+ U
class A; J& q, r  `0 {* `( _
{* h$ Y! q1 U8 R9 v6 s3 |# ^" w
public:
- Z7 F; ~$ l5 C( YA(){cout<<"A"<<endl;}
! B3 I5 c* J# m( a~A(){cout<<"~A"<<endl;}
2 v4 L4 O9 f3 P5 J: u};
+ u" ]3 D) E0 x6 vclass B : public A" @, K; Q0 w8 N* x7 }7 `$ E: t7 m
{
5 L' k4 U7 M! [$ a0 V- J- a* X) bpublic:
" J: x- H1 D$ [& cB(){cout<<"B"<<endl;}
1 K0 [5 r4 i/ ?4 P8 i  Avirtual ~B(){cout<<"~B"<<endl;}) F' J: V" t, q7 x8 h3 h/ [* x0 _
};* l0 @( S$ F  X$ h
class C : public B
4 I2 p  {( O. F& `& p{
2 g5 R. [) n( _8 epublic:
9 \3 j: n6 c+ ~' VC(){cout<<"C"<<endl;}
6 E5 u5 ^* E  c+ Q& v5 u7 R% M: H~C(){cout<<"~C"<<endl;}
7 D5 N9 v( [& T1 ~( W};
$ x3 c7 ~5 k, i' e) p
0 C8 I0 l. V1 }" Y7 wvoid main()
/ W0 o% w7 K- N# Q3 q2 m{: k! m- B2 w* v

% Y1 W5 N4 n% o9 G) @" }# ?5 @A *a=new A();
! H/ J' S9 G7 l4 N' F# p6 |B *b=new B();
/ f# z# J3 _/ S' E1 f4 u  C *c=new C();+ d; c. E2 X, V$ q( z3 q/ d) c" D
A *d=new B();& R; H# X: \8 y  I- j6 D3 W1 U* ~, [6 }: ]
A *e=new C();- y1 B( T# E2 S0 K
B *f=new C();% K+ j, O9 D/ y( w
0 ~0 e8 D% O0 y( a7 Q& v4 W9 c
delete a; cout<<"---------------\n";& A. C; t/ o; Q1 e$ s  n! U, f" W
delete b;   cout<<"---------------\n";
7 c; S1 l- V+ f: F6 ~delete c;   cout<<"---------------\n";
/ p% ?4 ]( r: cdelete d;   cout<<"---------------\n";
+ ~9 }( U5 ~% q4 v( Sdelete e;   cout<<"---------------\n";& Z8 c5 _1 P* M: O! S
delete f;   cout<<"---------------\n";/ `9 b4 M6 d$ v+ U7 J& a* ^8 f( C2 }  f
}
, [0 I+ l1 C' g0 Z4 ]这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
1 s- m+ O3 \4 A1 a$ y这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。5 `) P% A! S2 _5 l( {
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
  ^3 m8 T1 Y8 c/ t(2)面试的诡异题目- w& `2 G" }2 ?1 ]- B. u
大意就是如果你 test *p=new test[20];+ @1 i7 ?3 A1 b5 U
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
- ?+ [# T6 O* K9 G8 K' B1 B, T& e答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……5 {3 [3 {* C' Z8 p

- U& u7 p/ z% j/ oZz
5 y1 b4 v- O( t: u9 H3 F爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
- A  P) `, w7 e上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
; e+ ^3 O, ]* J8 v, u爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
7 @, n. {+ ?+ r2 \" h——
. A) E/ D0 B  K) n# k) o百度2011年实习招聘专题) B2 e- w6 q6 Y- W! ^& L
http://www.aftjob.com/portal.php?mod=topic&topicid=22
+ j1 h; {4 D' t) N" u" E& j爱立信2011年实习招聘专题3 c; c+ c4 r  W; \3 i
http://www.aftjob.com/portal.php?mod=topic&topicid=231 A! ^6 b1 B8 D4 j& w4 H0 Q& I
新浪微博2011年实习生招聘
' ^& k) l( v; B* e1 ^http://www.aftjob.com/portal.php?mod=topic&topicid=21
" o! J, W% u6 j  g, W5 D$ _阿凡提招聘http://job.aftjob.com/job% o) R, _. Q6 g0 g5 f
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag8 q3 H# L8 B: a9 Q8 D7 |
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
4 x- ]. s6 J6 u# V2 s% E! D阿凡提职位搜索
4 g0 j4 ~! m( P) @- @9 h; y——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-25 09:10

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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