找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1273|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
+ ?- G9 E7 ]2 ]. u) ?* {  g1 ~- s( ~; y+ c. |' R
Zz
: }$ j  _7 c& {, G8 T4 m- Y, z% Z. |8 `1 z% U( J' Z
(1)下面程序运行结果是什么:
! k* I5 F+ E. _. t; k0 }#include "stdio.h"
8 @" t% N  G: Pclass test
! Q0 |/ e0 V0 Z% v8 V: B{& @0 l7 y; ~/ t# V
public:+ P1 ~! l1 j( E/ K" Q$ p
test(){}' s8 @! ]8 I* b2 O# o
void hello(){ printf("hello\n");}  E! \& ~+ l8 w. j5 v
};3 E7 X1 i3 r  Y& R2 P
void main()2 B6 p4 J/ ~3 q3 c
{8 {: ^, w# u5 ~/ l
    test* p=new test();
4 r' }, l1 n8 R) {; |4 z    p=NULL;: l" J$ i% l% h  B- x: P) }1 x
    p->hello();
% X6 Z/ D1 i6 V4 T, E$ d9 s6 d+ P7 O}
  e  r% Q4 }  P0 z+ S; v8 |2 h事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:/ \+ w# _% j# T4 x. I
#include "stdio.h"
7 i+ b, {9 X2 X( B1 T. pclass test* u: _0 M$ S" @9 P2 Z" L" K
{8 ^5 `: ^% V) p! W) }7 O* i
private:: m' w( h  K5 Q  y  Y
int i;
- j, Y, M' j1 c1 qpublic:
3 I' S( {, Q/ T3 u- O4 ^test(){i=1;}
' a) X3 ^+ ]# n8 t6 v4 q: l. vvoid hello(){printf("%d\n",i);}7 T1 e5 c! [& C' j8 w% j
};+ _1 u- P* g$ m1 |0 j! m% b
void main()
+ P) B! k8 j( a4 q{
# ]& Y0 ]9 ^5 i' @0 b    test* p=new test();
' o0 Y7 p7 h4 M/ E" J1 {4 t% p( bp=NULL;8 {) b4 h2 m' |) @) r# x* B- V, b
p->hello();7 T: Y( \7 |% O
}
. h& R- Y, l* e如果将p=NULL注释掉就无误,就会输出1.2 \2 L. k6 j! b6 F
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
2 Y6 x5 L/ e7 \8 _( n% G0 S(1)C++的构造以及析构顺序* ?* r6 X' Y- C4 Z1 x& s
#include <iostream>
" \' z6 Z' p3 E1 nusing namespace std;$ V' f2 t8 B' ~- ^
class A' l* Y. Q: \% Y; M8 X
{7 a$ ~) E0 v8 X' l) }  T; |
public:2 B/ ?  o' }% i! I
A(){cout<<"A"<<endl;}
2 B4 _: f9 n4 }& A( y/ A2 \~A(){cout<<"~A"<<endl;}
! ?+ T2 Y) H# C) d; C};/ K/ p' h* u! l- A) e: n+ D
class B : public A; \1 X$ N* V0 I$ w* X
{4 l, F  z* f1 v. W/ b% ]
public:8 K- k1 ~" A: j% q
B(){cout<<"B"<<endl;}9 Z$ @# d0 j7 C- J2 g
virtual ~B(){cout<<"~B"<<endl;}; B  h  ?8 t" W5 S/ C! t
};' u* |0 L& P: K+ I; p7 |+ i
class C : public B% }9 G3 ?( s5 }9 z8 h6 u( U5 B* `
{
! X1 A; F* {4 R: }" h0 O) }public:$ @( [3 J8 r+ R
C(){cout<<"C"<<endl;}0 w  R' E/ [+ m, n, E8 X
~C(){cout<<"~C"<<endl;}
8 M: X9 O  u4 D. q4 T};
7 y3 \+ y  i$ n. Z3 _" Q4 B( j4 U6 ~9 Y% J& _8 c! e* m/ }
void main()
  L/ f% m+ n* N6 N' \+ J6 @{
1 G+ i& R4 o6 a: ]; a. n# @7 b
3 m& ]7 w9 X# o" ^2 D( Z6 H0 lA *a=new A();
* M$ t8 X& N0 x; ]2 i3 i; |B *b=new B();
& R7 X0 k4 E" E. U$ A  C *c=new C();
' h! @2 A6 c4 {+ F8 t6 SA *d=new B();* f4 v, V5 w0 ?9 V, ?
A *e=new C();
8 ]; N- C8 w" k! e9 v( _B *f=new C();8 N( ^4 t, A* x- W4 g1 v
3 A: R6 U4 I* D  F) |/ m
delete a; cout<<"---------------\n";! h/ B/ l5 V, c. x1 Z  a! P
delete b;   cout<<"---------------\n";% @3 E/ B3 K8 Z7 k
delete c;   cout<<"---------------\n";% H; Y) O, {/ N/ a2 p
delete d;   cout<<"---------------\n";
) p& U- D& U* p0 Ldelete e;   cout<<"---------------\n";5 e7 E* l5 o* X! B0 G" [
delete f;   cout<<"---------------\n";% D! E: F* @& H: F# H- _% G7 B
}$ O- V& Z" J! S6 U; M
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。: Q$ G% b  f6 g
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
, [3 |, a. I7 A) G' H* w其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)5 w- Y9 x- Y4 V1 \7 Q2 ^! {
(2)面试的诡异题目
& O+ W/ d9 g0 F0 M大意就是如果你 test *p=new test[20];
* N- ?4 h8 c2 c/ C  U, `. p: V- P然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
: u  f9 ~  a" i; p& S/ Z$ ~答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
& U7 K0 Z! [- y( s9 ?! w( h+ M5 E
Zz; a' x  G  J7 U# W( J5 f, A
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
! }: g. W; Q( T+ [) S- Y上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
/ U# X* N2 ~0 O, ^: o8 R% r爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
1 Y4 c& k4 U7 C——% X, Z  |# f& W1 Z2 f% q2 f! P
百度2011年实习招聘专题  _) ]" s! q) x+ ]% {+ K) G
http://www.aftjob.com/portal.php?mod=topic&topicid=224 v' A# }; Y+ t; v
爱立信2011年实习招聘专题$ L* p! r" x0 [7 l0 c/ ^5 o5 [
http://www.aftjob.com/portal.php?mod=topic&topicid=23
2 z7 C" L9 g7 W, i( e3 Y新浪微博2011年实习生招聘
6 Y4 Z5 j0 Y( Xhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
4 I/ c9 C3 t; m( J- J2 e6 ]8 k; B阿凡提招聘http://job.aftjob.com/job
8 D+ W1 ?! a2 T& d( |8 [* I阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag  J0 x6 c3 T8 V7 G0 l; p/ O
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum% `  q" a9 _& O" k
阿凡提职位搜索" v. m( {" X/ C( B2 a# r+ n
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-6 03:32

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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