找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1255|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
# a: M+ Y+ \* _( w
" \6 u$ Y, m- OZz
/ Y# a5 z9 ?: B
# H  ~5 E( w  e0 F2 a(1)下面程序运行结果是什么:4 U& W4 _0 F6 h, \7 u# O
#include "stdio.h"
2 H5 e4 c6 M" K/ v2 Pclass test7 _( f  {( n0 T5 U  R
{; M" A9 E! {$ A
public:
; u( @$ m$ Z& D. B; b) Ztest(){}
8 z: P9 a3 ^& s# a4 p5 dvoid hello(){ printf("hello\n");}
$ `) w+ P* q- o9 {! r! P( {};
7 u3 @2 O# F5 M0 M4 w( cvoid main()
8 f( \7 ]* R4 H9 b" a{% a/ [- k. Q# Q3 R4 d( ]
    test* p=new test();/ u9 w5 ^- t0 r$ {: \' ^: z
    p=NULL;
" K0 X; l+ K7 {9 n$ f" U1 o    p->hello();  {6 U7 Z$ A6 v% G/ g
}8 J, K1 l8 R# ?6 i4 @
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:8 d. V/ N+ V. r7 j9 L
#include "stdio.h"
% _" j& U/ [' U0 s  Iclass test
' d  Z2 o4 l2 N{
$ Y/ L/ G# r) J) G9 Oprivate:% I  k) h0 `. Y( j6 b. M" Q
int i;9 _/ l% E. m6 A# u* E4 W% i
public:
7 W1 S: a" g$ j9 p: Y4 p2 {8 vtest(){i=1;}
) X) j! n! R+ Tvoid hello(){printf("%d\n",i);}
3 j7 J2 W) R% `& {3 ]0 V; U};, R9 ~8 d/ Y# x% m: r7 H! I0 q* t
void main()
1 t6 X! g, O7 T- K/ ^9 T, \{2 _, A, K# q$ m9 v- Q8 @/ j% ]2 y/ I
    test* p=new test();( A8 z* t% z  _/ ?
p=NULL;3 J5 G( Y. G; u3 d6 ?
p->hello();
  t2 M2 u; q- |0 j8 C}
" B% A2 _* K% d# j5 h如果将p=NULL注释掉就无误,就会输出1.
# Y1 ~) K; }% y注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
6 ~5 w+ e7 `% V/ h(1)C++的构造以及析构顺序5 x( {& P& I/ U  M
#include <iostream>
7 K  a; @) n8 n' J. u+ Jusing namespace std;6 n: Y3 Y' B, `$ P5 S- m
class A8 Y% o7 A, j4 h6 ^" F4 l
{( R+ \. O4 g% ^" m) v
public:
# ~0 W8 L* h! S" MA(){cout<<"A"<<endl;}
6 v9 M+ W7 I! u8 H~A(){cout<<"~A"<<endl;}
% L2 z5 Y0 z) ?: A2 o) @};
( w* q2 n+ S5 m' kclass B : public A" x- z- R0 i6 J& w
{
( ?- V- n& v5 wpublic:2 S! G9 T% R( v9 z6 w0 u
B(){cout<<"B"<<endl;}
' ?2 I/ X' u+ Q* |3 q" v5 pvirtual ~B(){cout<<"~B"<<endl;}
8 \' I6 u$ U$ S1 _; o};
2 w. A& t6 b9 ?: X$ g' W4 bclass C : public B
2 U  G5 }+ c; e: w; T. G* p{
, b$ [) c* _$ f+ L9 ~6 E' T& C0 Jpublic:
1 r3 |: F0 l& hC(){cout<<"C"<<endl;}
/ D. R. a, F2 [5 }, D( A+ x~C(){cout<<"~C"<<endl;}' m( a4 q- L' w
};! y2 m' P5 m$ |4 ~3 e  T

3 N. A& u% W# I) M9 u$ kvoid main()4 V( b0 u2 g% m- b
{
( a* [8 i& @8 H; X: w
; T4 m& d: i/ [7 v" ^' AA *a=new A();2 |9 U0 z$ L! c9 o0 Z
B *b=new B();
- n1 w7 [- r# A4 [  |% X  C *c=new C();+ |" S# p+ F1 z7 p# E% h
A *d=new B();, {1 k7 _  P: f
A *e=new C();% U& d0 b# N9 A  \- d
B *f=new C();
0 Q) ?& B( P/ @% @) ~2 F
3 O5 N' z, K# ~: |( d$ Adelete a; cout<<"---------------\n";, Y9 g, y) h. o8 [- e( l
delete b;   cout<<"---------------\n";# j0 b, D8 K- Q1 I9 ]& o
delete c;   cout<<"---------------\n";
+ H, |  g' L" ^+ V3 tdelete d;   cout<<"---------------\n";" N  Q- U& S/ U$ H' C# D0 B: r
delete e;   cout<<"---------------\n";3 _7 X7 O0 H* D* P' S
delete f;   cout<<"---------------\n";
6 m- o% d: B- h, Y}. H/ I/ p9 {% j8 w$ w, R  i& [
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。, U" `" Z( n5 a0 x5 {
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
+ y; H/ p; j; F- I) L其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
8 k' p  O: n% t% K& Y- k. `4 O% w(2)面试的诡异题目5 d  b" a- @3 a) `& \
大意就是如果你 test *p=new test[20];
9 Z- y  G* j4 \7 m然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)6 Q- E& U; L& P$ t) a% d
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……/ }, s" g  b# ~" O7 D& z
/ g* n3 }$ v# [' b5 c. E0 e
Zz
% t% b9 f) \0 M爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html. x0 N- h& |* K: m1 v6 j* ]7 I
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
; @" b( k- O! X/ i! ?0 r8 Z爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
6 l8 M5 D  v: S2 v1 q6 \- I% \% ^——! \4 I$ {7 J; H, d
百度2011年实习招聘专题
+ \4 Y3 @# [6 r" `5 Jhttp://www.aftjob.com/portal.php?mod=topic&topicid=22$ F" t- j' \- m
爱立信2011年实习招聘专题* E6 O& q4 G5 k. y: H; L
http://www.aftjob.com/portal.php?mod=topic&topicid=231 T% |9 M2 ^9 I! P
新浪微博2011年实习生招聘" q5 N5 I0 N! @# T
http://www.aftjob.com/portal.php?mod=topic&topicid=21+ T5 `$ G$ H4 R7 c
阿凡提招聘http://job.aftjob.com/job
* ]* n( Y" r3 k' e* v阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag( S2 R/ O0 ~' n* J* V
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum. S# ]( o( K6 P# j) _  z  E# k9 [
阿凡提职位搜索
7 b+ f  V5 y1 A——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-28 04:45

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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