找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1221|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题: K7 c7 E; y( {1 _

, c6 Y, q7 y4 E( Q' ^Zz
/ i/ ?0 e; ~% y5 a! g+ b/ C0 |0 o1 `0 O' U8 a
(1)下面程序运行结果是什么:* S( P' D! V6 n6 a/ U* j
#include "stdio.h"& l( y) T# t1 I/ Q- t
class test/ [- V  d3 S1 R2 O1 c) K
{
  t  J% U9 |  H4 e% @  ypublic:. j+ U8 e! V2 A1 ]( A
test(){}
) K- L9 i4 B& y6 x/ Q2 \/ G  Svoid hello(){ printf("hello\n");}1 b- X2 z% `, Y3 K+ I5 ~$ w0 T
};
- I" ~& X, h' i/ Fvoid main()
5 g4 V: d  l7 E' R" Q* X. X' l{) A0 J# h/ t& B, H- X
    test* p=new test();
2 ]) l' `% v1 c  C    p=NULL;& d8 B. v: O4 U9 W
    p->hello();) W* w6 [; W' a. g. x- c7 @9 z# @3 m% k
}
- u. T& I" G( i事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:; J) O2 r- {% q5 J) w, z
#include "stdio.h"/ m3 k* f/ F6 S/ h# \5 F
class test
% ], r! }& F! Y# {  B{
3 P" v- q1 G% U) C& H' eprivate:
0 Q1 q# A% l: {% x' W5 Xint i;  m! G5 d0 [# e- Q/ o; P2 g
public:  H9 R# b5 w5 P/ a  I. _0 e
test(){i=1;}9 F7 A2 U  r7 C. ?3 {, c; W; x
void hello(){printf("%d\n",i);}
# v0 `2 V  H: ^6 g+ O  J, h( e};+ u; U( A8 ?- d5 M- s# |6 z
void main()
7 O. |+ U3 ]! l$ N- q{+ h8 x- H: i* u# S& b3 }
    test* p=new test();
3 @( E4 e6 o2 {" W$ l! lp=NULL;, n4 v  k0 ~$ Y8 t! o
p->hello();1 @2 }  n( s9 G- l
}
. F% w7 u( {, T8 S- c* l7 P, j如果将p=NULL注释掉就无误,就会输出1.
/ d" y! K7 H4 \4 ^! Q4 Q# T. s注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
$ h+ U1 R2 d+ \3 a& ?(1)C++的构造以及析构顺序
2 }1 T8 w7 P2 K#include <iostream>
) g/ u* |5 Y, Ousing namespace std;
1 R( L# l+ Z7 Z# Pclass A
: @/ E8 o! G6 o( N. O{8 ?/ Q# E1 d. A2 l7 s/ x9 d
public:
: k6 b5 e, p8 k! }5 g* a. p7 H/ uA(){cout<<"A"<<endl;}0 B% T4 R7 H& j$ E( s( c  U$ F5 F
~A(){cout<<"~A"<<endl;}
5 }  u7 M: A& {3 E) e* s" A4 I  z};
( k, U$ J) C5 C  w+ x* ]class B : public A
+ A' p7 ^# o/ z9 J, f0 G$ R{3 q3 M" t5 n6 e% o9 [& ?; F1 l9 p
public:% h5 P6 q/ B- P* {
B(){cout<<"B"<<endl;}
. i7 \0 h+ w; E7 H9 L  evirtual ~B(){cout<<"~B"<<endl;}
) G( ?% ^$ X& Q% e. F};
0 I) ?8 b2 ^7 ]6 Uclass C : public B  J; N' \$ M$ @: A8 F! o
{% D( `2 ?$ o6 D( g+ K7 |3 m$ W
public:
1 u) m/ x! V8 p; ?$ K6 X2 KC(){cout<<"C"<<endl;}* x. X' z' X& O0 q
~C(){cout<<"~C"<<endl;}
3 ]8 w, E* [8 ~2 a};  T! x* w; A0 K1 ~( x3 x6 i
: b1 r1 q- h$ U$ D1 Z
void main()& ~& O# j* f% m  {# u  h* W/ p1 ~  ]% e; P
{0 e$ V* W+ M& D: ]( K

5 h. n4 k+ F5 [A *a=new A();
$ p9 I* M0 d( \' S! G! }# {B *b=new B();
3 o$ J7 g) M; ?% d6 ^! V, G' \, D; i  C *c=new C();
% F# U8 \2 ~+ B, T: X: ?A *d=new B();
! q: f: g& F; u0 w; |7 ]A *e=new C();
% X9 W1 a$ w7 v( Y8 nB *f=new C();
+ ~" }1 \0 p' l* U
7 q. b! m, |/ A9 f6 L; ^2 n: Xdelete a; cout<<"---------------\n";5 t8 y+ x4 A0 A' p0 [
delete b;   cout<<"---------------\n";
0 P, ?$ |' b9 d8 sdelete c;   cout<<"---------------\n";( ^& {/ V5 l2 O$ H3 Q# t; v
delete d;   cout<<"---------------\n";; d0 I" j, N+ g' q
delete e;   cout<<"---------------\n";. y$ p) m+ x  P5 @, O6 O1 T
delete f;   cout<<"---------------\n";
) F7 z$ `6 G8 k6 t6 k}
6 S9 `2 c: l) v这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。7 p9 z: k. h, G
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。1 Q1 B" Y/ _3 q( {
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
1 ~  d! b# x0 @! e" K(2)面试的诡异题目
4 }8 F" i9 B6 B* d# w; c( A5 f大意就是如果你 test *p=new test[20];. H1 d0 v  w# ]1 [$ Q0 n+ ?( y
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)% f! I% X, z) d) |" i7 O
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……  y" x! a9 i$ V: x% R& l; r

$ |8 N) `1 ~, |  x% ~7 W& TZz
: T) s0 y; x# y* O" J爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
, s- W+ V6 E. s5 L) Q上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
! ]1 O6 i# c7 }( o8 S爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html, [$ h) j1 g* z6 u0 m* e& S6 o4 a
——
% S' J5 Y! u" w: T" T百度2011年实习招聘专题
* x; \3 |' l3 Yhttp://www.aftjob.com/portal.php?mod=topic&topicid=22* o0 X3 B' |) N# o0 N: w4 x4 I
爱立信2011年实习招聘专题
3 E" w. l! F- ^* S: q1 Ohttp://www.aftjob.com/portal.php?mod=topic&topicid=23  d' Q: k4 p3 F) s9 D2 g) J
新浪微博2011年实习生招聘
9 w( d" M0 v4 G1 q; x  Uhttp://www.aftjob.com/portal.php?mod=topic&topicid=21+ ^1 z' U( T! W9 \* D& k7 \2 K& k9 H
阿凡提招聘http://job.aftjob.com/job8 l4 ]% c4 |' I7 K8 @$ W
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
2 ?! L5 W" x5 q2 {阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum* @5 |- c6 v) `( t
阿凡提职位搜索' X& p  y* n% `8 L- v
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-10 21:04

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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