找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1309|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题" h, u2 M9 v) P. \" K+ v

0 q% ~8 H* Z& U6 |' LZz
" `1 e9 }3 ?8 A4 b8 U8 d6 ?6 Q* R8 P- k7 V% l
(1)下面程序运行结果是什么:
/ p! q  v  y! [#include "stdio.h") [- a6 U- h' l3 q" H# ~  O' I
class test( Q8 H$ c6 h3 j) \3 q
{
9 m$ m9 n! K2 c  N7 P3 c8 _7 l+ ypublic:
% A( ^2 t; e5 ?7 Ktest(){}) C: c) o! z( L* N6 ?) K' d4 z* D
void hello(){ printf("hello\n");}# G8 ^. A4 J( k3 B" L/ M8 b- M5 O
};+ `' |1 N8 Z* W5 S) @
void main()) c; G4 p8 H9 n$ u/ a3 A
{
' V: d! d9 O: P    test* p=new test();9 l# w, }, o0 O
    p=NULL;
0 u) k1 t2 Q$ F    p->hello();
2 t4 o2 \& u' |0 m: `}
& x6 F8 I8 N# ], i) a+ p事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
2 z1 R+ H- x7 W% r) d4 P$ H4 d#include "stdio.h"
( _$ M0 |3 F" c2 D$ @  E3 Eclass test; M, i  u; ~3 C1 ?- f4 p( i
{5 M; f+ k! h" Y" z* V
private:
' |: s3 |5 R3 z: Zint i;
" U3 ^( x3 F3 z% ?/ E! ipublic:5 x) u3 {. A  Y% n
test(){i=1;}
0 g; `9 T7 M5 F2 d8 v7 Uvoid hello(){printf("%d\n",i);}6 P' E9 Z& m2 R& X+ u# Q) F
};9 z( C, {; {+ [& T9 _# a' ?# G
void main()) Q0 K2 c  ?1 m+ I+ H) ]
{9 m) i/ n$ g. f4 V8 k2 t
    test* p=new test();
# K/ B7 D2 I" h3 |5 A# cp=NULL;
8 g- {, |' `9 Rp->hello();
& T5 i# X! X. |/ D/ Q" h7 ?}
, ^& t& b! ^. D+ h2 a( L如果将p=NULL注释掉就无误,就会输出1.
# }' [% [; J/ w注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
* j8 j7 x! B/ H0 p(1)C++的构造以及析构顺序7 I) W* k, o4 U
#include <iostream>& X9 {  M  o' N0 e
using namespace std;
' J/ s3 M) H# V. v: gclass A( ~' X6 ?. `# l# |, V
{
/ W% x# L8 {" x4 M  A* m$ Lpublic:
: J" j: |  S+ ~7 i! T( mA(){cout<<"A"<<endl;}
/ r9 l" Q3 @6 @' f0 n6 O~A(){cout<<"~A"<<endl;}' O- j% f; L4 k
};1 x! i& h6 ]! f* b' D4 {7 U
class B : public A
) }+ J7 i( z7 N' U/ k, O{5 M4 z& |7 H1 c( s; ]5 r
public:  D2 d$ `9 I, j1 R; i; B
B(){cout<<"B"<<endl;}+ b' I! b, Z9 C+ y, M8 l/ R5 D( v
virtual ~B(){cout<<"~B"<<endl;}
( L! i" p! W' D};1 ^0 m3 b' d+ |2 M( ~- [! ^( I
class C : public B
2 ?3 A) L$ J0 |- x{1 d4 Q# k( D# J! s* ^# ~# v; N
public:
# O/ v: {( R+ r% @  zC(){cout<<"C"<<endl;}+ _" m0 Y- N& `: x, [
~C(){cout<<"~C"<<endl;}
* e/ v: a5 w; i$ l9 y: I7 e};/ z' {  H, J0 \4 E  [2 i

$ D0 D5 v0 w8 D: q: ~# o- o& W& xvoid main()
, O4 _# O( r- F5 [5 O2 W{
* `8 A/ C+ _* f, E) m9 k. g; r' b4 y
A *a=new A();1 P6 u7 F! g3 {. j, Q; Q5 ?, w% f
B *b=new B();% a/ s, o% O4 S" `, S" Y
  C *c=new C();/ j4 {+ A& M8 k9 h
A *d=new B();
  y& t9 r# S6 ]' @8 J# qA *e=new C();
' B* _6 T/ R6 m( v% v: CB *f=new C();+ |' k" o) U7 z2 d. [/ l5 c

3 ^: t5 h5 T/ I, D* W+ e) wdelete a; cout<<"---------------\n";
2 F5 Z8 W6 j* E* Udelete b;   cout<<"---------------\n";! K1 Y0 L: |% d' ^# V! n7 n
delete c;   cout<<"---------------\n";
; ]+ l* N) M+ F3 B: a% Ldelete d;   cout<<"---------------\n";+ D! P" W. D0 v, O
delete e;   cout<<"---------------\n";5 @5 r4 ]+ w, O  U/ m/ G: c
delete f;   cout<<"---------------\n";
# u& k$ k* x6 \7 Z}
1 l& t/ L6 ]8 a- R8 y" X这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
4 T3 L- Y) [6 E这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。0 s- ?4 ]6 r. p5 Q. g
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵). m% p! |! [. B: l
(2)面试的诡异题目+ O; c/ h& N( p! s; p; [" \
大意就是如果你 test *p=new test[20];
4 ?/ \; H5 i7 u) R然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
1 ]+ R. H% K4 M; v: O0 H' D' c答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……$ U2 {  L' g1 W
- F7 g; B& Z& }, \
Zz( o3 H, q/ H( N- [
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
8 Q- e* p5 H5 T上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
) r& z4 K3 F" C0 k! i8 K6 i$ n爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
/ R: w2 \: X0 n! @——4 @8 H* [" n: F" q0 z. `
百度2011年实习招聘专题7 Q! ^- f5 ?" [( p5 _8 Y
http://www.aftjob.com/portal.php?mod=topic&topicid=22
0 w& X1 s# x! ~: h& C9 i/ U爱立信2011年实习招聘专题! r1 J( M6 R! V& Y
http://www.aftjob.com/portal.php?mod=topic&topicid=23
8 K8 {+ M* s  D3 P, c9 }新浪微博2011年实习生招聘- ~/ Z: U3 j& q# O- D/ h
http://www.aftjob.com/portal.php?mod=topic&topicid=21
) F- R4 z2 ?7 b: b. j5 M! @: r阿凡提招聘http://job.aftjob.com/job
( V- Y7 O0 @& ~3 B阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
! V5 I+ s5 j4 A5 `  ]" K6 O阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
! F# a7 j6 e2 M* x5 ^阿凡提职位搜索) G: n; c8 `1 L7 E5 M
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-24 20:22

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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