找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1374|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
* Q7 |8 v/ o/ u& A) j9 ^$ [4 M- B: i/ q% F
Zz1 I. }7 @4 g2 S" A. |
, [* x, e1 Q! h: B
(1)下面程序运行结果是什么:
; d. J4 Q) s0 C& Q- R" U( Q% O; X#include "stdio.h", Y5 H, V+ k1 R0 @# v1 z- g8 t& `
class test
# B+ u& m; z, q# h+ ~2 a+ M{
. \9 _% g% w2 Y! A7 c7 I' i$ L$ L* ppublic:! u4 _! }0 i3 a9 g( h- l7 p
test(){}) u, g3 G8 @- f; M
void hello(){ printf("hello\n");}
7 q: q% e- O; S# _' B0 v};
( v  g* t' g0 Dvoid main()1 S( {' ?9 H2 m( W" Y3 h
{
8 @0 p: I9 L/ }' Q    test* p=new test();* M# x; n6 ~6 b9 w
    p=NULL;. k! M- [) H2 M
    p->hello();
: ]! {4 p8 J1 Y5 G) b, R; T}1 w1 c- r* A7 b. A: |
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:) G+ `! {; ?$ v5 R+ ?
#include "stdio.h"
$ t5 Q; L  W3 a: V$ C( m& sclass test5 [3 q- Y3 R' u1 V( d8 J! m; U
{
9 L: Q3 z- @. A5 Qprivate:
: o  }/ c7 O8 Y* i" w7 S! R8 S$ cint i;2 I) \0 q; ?6 O2 S# G6 G& r
public:
/ i& C0 o- P4 G2 btest(){i=1;}
6 f- H! ^7 {: c% m# Z& c) Z4 E# ovoid hello(){printf("%d\n",i);}2 p* j* R. h$ n4 u; [) C# x$ @/ {$ T
};
: C, G/ b( d, s( @  xvoid main()
2 ]* G3 p8 u$ ]; t3 [3 E+ R{6 W' m$ N% m/ R" n% `% |/ Y
    test* p=new test();
# \* @6 e9 E1 G5 a3 Y; yp=NULL;
% G" F/ V2 N! K# M/ D6 I0 t5 A! B' U# Kp->hello();0 H6 l4 z& @3 J0 u2 Z0 @4 z
}
: w  K4 d5 W( Z* f1 ?0 z) M+ P% p如果将p=NULL注释掉就无误,就会输出1.
* S3 {2 h' t, A; B0 V注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。% y/ U9 c4 F6 w7 z6 i  K
(1)C++的构造以及析构顺序
: Q. N3 G, d8 f. C& s#include <iostream>- k8 k) [( p$ q% B% P  y
using namespace std;: S  P0 }6 f" y$ Y( X- K
class A
  C5 b- `/ N) y; |6 Y{
4 \! K$ R4 s8 F( b# D9 xpublic:
( b% y1 {, ?% i! lA(){cout<<"A"<<endl;}. u$ d9 ~. N* p" W* z+ e
~A(){cout<<"~A"<<endl;}0 o2 R; Y3 c# n: v( n. F0 q+ f
};
* t8 c: x8 Q  `! D$ Dclass B : public A- z! s' Z8 l7 ^# m* j$ j
{& f9 v. q. y& X0 g& r: t9 X/ h: F
public:$ O! V& Z0 x: {. C
B(){cout<<"B"<<endl;}9 m" r* N9 f* Y
virtual ~B(){cout<<"~B"<<endl;}
% _' S; q; [9 J. m" Q};
, V$ y* }8 t; m$ W) k8 P! Xclass C : public B6 ^( m0 \7 F+ @1 q  R) ]. U
{
( b2 h7 f+ d8 p7 L, [0 npublic:
7 i$ q+ `4 N+ J9 ]1 |2 K( jC(){cout<<"C"<<endl;}2 ^" u8 E6 U1 r1 Z- c. O0 K
~C(){cout<<"~C"<<endl;}. P5 Q" \3 s  E) T1 C  n
};
- e; z8 c5 g' |5 s5 r
9 D% e' v" H2 z% [0 Hvoid main()
) H+ p8 p4 l$ ^) ^, W3 v{
# [0 {; r$ _! T5 a/ Z8 y* `5 n
, }" E& C) n! {8 jA *a=new A();
& p7 l3 U+ V8 ^* V1 \# dB *b=new B();3 J" k# S: R( X+ X8 ]/ A
  C *c=new C();) V6 n7 s1 {' S) v0 R
A *d=new B();
( R1 k: i& A1 z4 z* ], IA *e=new C();# _6 @& Z  F3 G; v3 S/ K; K
B *f=new C();
, `' ]& o+ o# e- ^
0 M2 C8 e1 a! P& @- w' V- R- d( jdelete a; cout<<"---------------\n";) V1 H9 `. D1 l/ h0 m' c
delete b;   cout<<"---------------\n";
/ R; M/ w/ }1 V: y4 d7 Qdelete c;   cout<<"---------------\n";
: h. l  K7 y5 V$ adelete d;   cout<<"---------------\n";
8 t- o, h# P/ p5 idelete e;   cout<<"---------------\n";
8 k" q0 ^" b& x. F# K4 b- X$ d" zdelete f;   cout<<"---------------\n";
' p) b1 t" J1 l& [, y}
) @1 d; B2 B& B, {' x这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
& {5 V9 }4 _2 E0 F6 w5 z这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。3 U% `$ \, c' I7 s
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
6 A: W3 a7 b8 y! M9 g+ a! Z(2)面试的诡异题目
! _2 [3 V3 m* W  |( J大意就是如果你 test *p=new test[20];. U' n$ C# Q9 U( [7 |" t
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……), r; G0 m0 ~5 |' E) Y% O
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
2 Q8 p' Q+ P5 ?. n4 @; m
/ e2 z* f9 S  {  @Zz
/ H5 g6 l4 i; _: F. _爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
! \2 P% {) K- }) r4 E, @上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html3 |, Y) `9 H  [( j; |0 x
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html% E6 Z7 c) P, P* q! A0 ~2 c0 S
——( q" B( o; w& x: ?7 o' k! n4 g
百度2011年实习招聘专题, H% Z( Z' f7 x9 H" Z( D% t
http://www.aftjob.com/portal.php?mod=topic&topicid=227 @2 B0 B9 {- n: `# K
爱立信2011年实习招聘专题
1 y5 e1 i. ]# ?6 }; X; }7 \http://www.aftjob.com/portal.php?mod=topic&topicid=23$ z( a1 b! W( z: ~: |( N: I  u  ^1 k
新浪微博2011年实习生招聘
4 h8 u) I+ ]! B) ]; m% U, G1 B; jhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
) L3 s% ?3 Z" Z4 S阿凡提招聘http://job.aftjob.com/job% t) g) b; G% \9 y- ~: ?; N
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
, a8 |2 W8 G! E6 G, O阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum+ c/ F( V2 `4 ?# t, i1 s
阿凡提职位搜索2 l; S( q' \3 L! O4 l
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-24 06:37

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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