找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1327|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题# N# A# A* f( P$ Y7 N8 ~8 p( U

* {( k9 X9 K) b" O: [8 RZz
) K3 h. Y5 A# ]* C/ s  Z* Z, F* n! }6 ^9 O0 ~# |
(1)下面程序运行结果是什么:3 F( P; [( K# e7 ~
#include "stdio.h"; e- T: p; n2 T. I" a  ^9 c
class test; _; _5 B# g) W0 P7 y+ I, r  `! t# `
{/ _' G6 i; H* L- V3 c' @8 d$ T
public:
4 z; v1 s) l) l. qtest(){}
! s0 T* K8 `7 `* S2 H+ f  w' b# f) Fvoid hello(){ printf("hello\n");}
9 D0 f1 v, d+ r6 F& k0 p5 l};
, y9 `5 J, j4 b. ^5 D# z# dvoid main()
8 R. f: `: a& l9 `, ~( O4 e. {{0 _$ i7 G' ]- o. {
    test* p=new test();
& N2 X! n9 _: D8 U    p=NULL;8 Q& l. k: J* x* y
    p->hello();) m* M# G* Y2 }- ~' @
}6 G- h+ Y8 F  X- k5 l; C3 `
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:. Z: k0 Q" M0 m- Z
#include "stdio.h"/ J# z1 ]8 \( u2 x
class test7 Z, |, x7 X6 J4 ^0 C$ k& x
{
! M8 ~1 v9 J3 A# vprivate:3 j! o" Z8 ?6 ~2 Y/ l3 A2 I
int i;
  H8 z! X. Q" e! G- ?0 w5 _public:
! S. C0 ~, B9 D# n/ n: stest(){i=1;}' @5 Q$ i( k' d
void hello(){printf("%d\n",i);}
1 o; Z1 Y" Z& c4 r3 _% Y" C};! o. n) |' Z# y. w; y$ u
void main()# E  U  [7 ^; N; b8 t: U% V0 o
{( r+ S0 x1 D( v0 `
    test* p=new test();+ ^# L8 v& j; _( u4 o. z7 n
p=NULL;8 v6 {+ s: U- G  ?+ z9 X
p->hello();9 Q" d9 z, m6 [1 H3 d+ o& U: ^: k
}3 g+ J4 Z# V7 w" Q
如果将p=NULL注释掉就无误,就会输出1.
9 i7 {# R2 a4 f: s( ], w/ s* m5 v0 L注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
. `6 O4 Y5 E* p6 @/ v(1)C++的构造以及析构顺序
  g" M! }- K  {- I#include <iostream>
- C! k8 C: l7 P: O3 \) S- L% Dusing namespace std;
# j  S2 m7 }* G* Z5 p) Zclass A0 H' m8 o4 |, M/ Q& Y4 K1 S
{
! K4 ~; j( \7 g4 b$ \# Ppublic:
8 `: C# O7 Z0 G' IA(){cout<<"A"<<endl;}* X) p- p' j' n' A$ e
~A(){cout<<"~A"<<endl;}
8 `' s6 M, y# r5 c};: s- ^# p/ T' a; C, A
class B : public A
: c9 O2 {/ Q) x5 j{6 ]- _! p% n9 H- n0 u7 _0 V$ M2 x
public:
8 e3 N7 {  m2 X" N+ H3 vB(){cout<<"B"<<endl;}8 o5 v0 E! q" R" J- Y1 @
virtual ~B(){cout<<"~B"<<endl;}
8 s4 H3 E9 m9 n' B5 z" P6 Q5 k$ C};
6 Q; s7 X( o; u( u0 a6 C, tclass C : public B
# j# L# \+ U, O" f{$ f5 r* n. j0 J0 p5 |
public:2 ]$ w5 N) O/ t
C(){cout<<"C"<<endl;}
3 K3 f+ S" S/ T  U5 d9 Q~C(){cout<<"~C"<<endl;}
9 O( a0 I  ]6 w. b};3 _/ U. Y0 l5 D$ W

0 }) P5 L# C. m6 o3 Dvoid main()" g* M% j: o& }" j& v; a
{
) `" p7 s6 t( j- g1 a; k3 A# Q% }# f
A *a=new A();" \0 I* L) d/ a9 H3 Y  Z/ o
B *b=new B();* [1 W- o) Z" m* r
  C *c=new C();  C0 P% ~# a- x' b' q
A *d=new B();! N5 p* V& Y! k0 j: F
A *e=new C();: z& Z8 }# ?4 j  }
B *f=new C();: k8 n4 P! t6 Y; F8 c. I1 w2 n
+ H: t9 T$ q) x' \5 W& A) A' S5 Q; d
delete a; cout<<"---------------\n";7 J9 e( C4 {0 i! U* u* a
delete b;   cout<<"---------------\n";7 s$ L, N& W" J+ i3 Z3 D/ {
delete c;   cout<<"---------------\n";
* q$ g+ [" N7 O5 Jdelete d;   cout<<"---------------\n";  l  K$ _$ Y( X6 F
delete e;   cout<<"---------------\n";
1 x. J9 [' N1 r% `9 bdelete f;   cout<<"---------------\n";
: I: r( z: u3 f: ~. J}
1 o/ `  c1 |' R0 B5 J7 t$ U. g这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
; Q5 ]) ~6 C! t5 }; M这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
: E! ?% A: h9 D2 N8 |其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
+ x/ x- B  E. y) i1 o. A9 v(2)面试的诡异题目
/ r; R- N! G7 G大意就是如果你 test *p=new test[20];. P  _: r( ]$ y
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)) l0 z; K0 q( i* W- S- L' b" ?
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
* s1 o! f) T8 o  {8 D; `9 G1 d9 B8 f% l4 u! e3 e; d
Zz3 f1 n, N- p% Y, J8 T
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html+ B4 S2 a$ h  C$ k# j! S
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html5 |1 Y; Y# ~) C0 W2 c
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
2 g* j) p  t# t8 i# ]——
) ~9 h. T+ D$ V4 Y8 y) E1 `( P百度2011年实习招聘专题; k$ R6 b- F4 G0 i& o# ?" L
http://www.aftjob.com/portal.php?mod=topic&topicid=229 H; Z, u9 L$ [, p
爱立信2011年实习招聘专题
; y) C, G/ c2 \  }. a" bhttp://www.aftjob.com/portal.php?mod=topic&topicid=23! {2 k& L' R( e
新浪微博2011年实习生招聘
8 a) G' T# u! W* }- }6 Khttp://www.aftjob.com/portal.php?mod=topic&topicid=21
: i( w2 R, X; W: x) x& ~阿凡提招聘http://job.aftjob.com/job+ d' k1 Q: x( ]0 g( J7 a/ a4 l! W
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag" B! ]/ n9 z( \
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
) D3 L( D) H( g% Z; e& u- k阿凡提职位搜索
3 m2 H+ R) z+ I2 q- y4 u——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-2 09:00

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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