找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1175|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
* {* a* V# \0 A8 l. w# I/ v  e0 m) B: J( k
Zz
) b, M3 S* |  Q" c4 z0 g% F9 e% y$ v; ~
(1)下面程序运行结果是什么:
6 |* G  f+ R0 i, _  t& d4 X6 ^, W#include "stdio.h"
: {/ `& y: O  O% z, B4 |class test
: l5 y: V1 x# u/ F1 x5 e6 m$ ^5 o{! b* A7 [5 W# P/ O/ r
public:
- J$ x1 d/ [, @* h9 Xtest(){}
6 s1 Y. [# X  A* W/ S* svoid hello(){ printf("hello\n");}
" a5 B! |& t" M) O% e+ M* l};
. ?$ F0 o1 u, ]void main()
( E. {) G$ B' X{
7 x" Y' I. Z' _( j; L    test* p=new test();
: _5 }7 I* S/ o! {    p=NULL;* q4 x4 G2 G1 G* l
    p->hello();
" G& f- l) `, h; @! S/ r# B: f}0 y. W- l" Q+ `1 j/ _' ?
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
6 Q+ Q( q- I0 @, Q( ?/ @. @#include "stdio.h"( [' s) p% h* v
class test4 w- e! P' L5 D# I$ y- }' F$ `, j
{
( W7 w, ~& p# U4 q$ iprivate:5 m& f+ L  J, Q4 m/ o2 C5 y/ M9 K
int i;
0 j; N% {! S( q7 @' [# U5 cpublic:
: u% V6 D( `# b0 |. R1 ftest(){i=1;}
2 l2 u) G6 m) cvoid hello(){printf("%d\n",i);}+ x. t8 z, A9 s7 J* S6 G2 ]
};
- g& b: z" f/ R! @* d# |  Z( Ovoid main()
, m5 x8 y- o0 c# y5 E4 @{
3 j8 @/ p& u1 x$ A$ {1 m    test* p=new test();
0 f, r3 ?" B4 a0 |4 r  V$ xp=NULL;
" M3 k3 @7 ~% F8 {& d% ap->hello();1 m$ N2 W& H1 m3 D' j; D
}
8 G" @" q& {) A' L/ X如果将p=NULL注释掉就无误,就会输出1.7 W3 L" l4 V6 x# y& {* s/ C
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。6 S3 \2 u0 h% y( K; V; k) g
(1)C++的构造以及析构顺序9 _/ w5 k: g8 H) _" X0 ^& R; t: S
#include <iostream>
, y  E4 U- ?- I9 Rusing namespace std;
- ~: W- Y; F3 t) x9 }2 X- rclass A
0 T3 U* g* ~8 G* f( }$ A8 |+ v{
$ W  {9 ~- J/ D' V2 X& ]' }+ wpublic:2 l2 D- H3 I: G) p6 z: p1 c% U* X
A(){cout<<"A"<<endl;}
9 p, F& s& Q: R+ M4 `# y' [~A(){cout<<"~A"<<endl;}
  r7 }. ~; E* Q( q};
. f- ?5 @* X! i2 O; q% Tclass B : public A' O* X, V6 ^# w# M+ C9 S
{; u4 s( y1 E2 K. E' k! O
public:. H8 U* z! Z  B5 n* v
B(){cout<<"B"<<endl;}- Q  o) W' Q" \; u6 P( F) J) w
virtual ~B(){cout<<"~B"<<endl;}3 }) G$ Q7 v, o$ o/ j
};, t- i- P' X5 T6 s! z& ^
class C : public B, j, V: Y6 L7 _
{0 z3 U. R0 G+ b& J
public:
1 t! [. X1 r" x, g  m/ f9 jC(){cout<<"C"<<endl;}
7 Q6 d7 B3 q5 g/ Z* l~C(){cout<<"~C"<<endl;}
" u) g/ F3 W/ n};# `+ h, P: ]2 _* B' A
$ }8 |' `# d' a/ C
void main()
4 ?) }5 t4 @$ a) Y7 y1 I5 g% O{
0 N7 ^* d3 R3 I+ f2 @% r3 I) h) @; K1 T+ u! N0 @- \
A *a=new A();
; \6 f, x! B# t( {+ H1 v$ {B *b=new B();
& p! R7 o  w5 X8 m% b5 q  C *c=new C();
; t7 D. \6 E# A- h# Z) YA *d=new B();
5 W6 ]0 D- M9 Q  u1 PA *e=new C();
/ v  d, P( e1 t3 e( bB *f=new C();5 g' R. u4 h4 h/ j
3 c  D' t7 [& U' T( }, Z/ S
delete a; cout<<"---------------\n";  M! k9 a8 y7 C! H7 J1 w$ ~4 D& \
delete b;   cout<<"---------------\n";5 q- U! m2 x* K3 x; R/ z
delete c;   cout<<"---------------\n";
% [- C9 S7 A% _delete d;   cout<<"---------------\n";
1 g0 E8 j! f: N# Y2 S7 E% ?% ddelete e;   cout<<"---------------\n";
3 y$ e7 U4 W9 Z% \: |/ V' ~delete f;   cout<<"---------------\n";
3 X  v3 l! m" `( c. ^8 C}: v5 E9 y% I! i
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。, |7 o8 L; P4 _
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
. ?% f/ W' W* @% {, B" q其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)& `# R! S( }' y
(2)面试的诡异题目
  ?1 s, c9 u1 C5 r* e& ~大意就是如果你 test *p=new test[20];+ o8 ~" F$ D, I0 n  p% Z4 d
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)/ G% ?3 J; y1 W( Z3 o$ B7 p) j
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……# P: l- b4 l, E4 a8 n) ^

6 @( p6 Y) b! g% ZZz
. l2 k: u! w/ n; ?" |5 v1 y% L爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
2 H2 {# o8 r: h* j3 ]6 b上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html/ w) V9 D5 W  \
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
( B8 h4 k+ V/ ~: B9 D8 i; ?4 c——
9 g4 p3 V7 Y4 U& X( N百度2011年实习招聘专题0 Q1 l: f, P2 ^% v  \( E
http://www.aftjob.com/portal.php?mod=topic&topicid=22/ j+ Z+ k) V- w/ x9 B3 m
爱立信2011年实习招聘专题
/ D" y" U9 c" N" V/ i, V3 [7 Xhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
4 ~0 D3 P; y; b新浪微博2011年实习生招聘
$ R, N: F" T3 I: }( g' J" [http://www.aftjob.com/portal.php?mod=topic&topicid=219 N* n& n/ a* s! p1 Y
阿凡提招聘http://job.aftjob.com/job
& `- o, n9 x+ a& F7 _7 k& \阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag( R9 T3 ]- P' M  W0 b7 T
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
; f& R; ]- r. G4 S阿凡提职位搜索5 u+ m0 I5 d; w/ f5 j" H
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-4-16 10:36

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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