找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1098|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
/ R) S3 T$ Y# L  R
+ h6 J) F; Q2 T5 @Zz
  m/ ]) d5 R3 X) Q+ C9 _- I3 H4 v7 ]- d6 V( s
(1)下面程序运行结果是什么:
4 p' s% e" n+ {  u, `: z: ]6 y#include "stdio.h". N% |+ m& d4 n+ D
class test, @# u8 Z, d% A, ]
{
/ _' S9 D$ G$ Ypublic:5 R6 @- ^& n) F. `
test(){}* x0 y5 W# ^5 K" @, x' Q- n9 N5 }
void hello(){ printf("hello\n");}
9 V1 T0 b! ^1 j; V/ O};! M3 _4 n6 T) u, ~7 Q8 f
void main()
# s' ?8 P8 r1 f$ Y{
* O1 y, O# E* d# C% I# N$ }    test* p=new test();
1 L6 o3 Y4 e3 S# k' X2 s    p=NULL;/ U( [' ~' T& n' v4 ?0 z
    p->hello();$ M- [: e/ c- p) M. [
}
2 h* m5 h: f3 P2 X7 Q/ T: K事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
7 E, I8 j9 B' J7 B7 P+ l( n#include "stdio.h"3 Z8 _5 c* k4 u: J7 z
class test
* I- S$ ?4 ?2 u{4 D/ N- ^- x1 y5 T) {
private:
/ {7 W# G# M) {) Iint i;
, }" ^4 V8 {* [7 D9 P  o" O8 D, Qpublic:/ c. n& K2 _8 n2 _+ ~
test(){i=1;}
5 I% i$ b$ }+ Evoid hello(){printf("%d\n",i);}3 f9 L9 a: r( i9 d; F7 U& R
};
* s. l& j/ ]' y, [void main()( I, j0 r* A6 {# Q2 E* C
{
( ~3 ?0 u; v4 ~, `0 u    test* p=new test();. {- [( `) K; ~4 }) M
p=NULL;% R3 {; o& z1 r; p$ x. Y, `/ `
p->hello();
6 x! U  P/ X7 W4 I0 a( |. R" P& C}
2 K+ M8 }9 u* b/ [; A9 h- M如果将p=NULL注释掉就无误,就会输出1.
% h( e6 f$ b( ^0 t# Z/ Z注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。! l" W. v4 d, W( W7 Y0 Y4 q" P: L
(1)C++的构造以及析构顺序
: u3 a" z- U  j6 a( c#include <iostream>! r  H+ d# |9 w: L
using namespace std;4 d$ X2 I" i- k3 F: B" O
class A) V' I& C5 Q: w# x& P
{
2 n. a9 Z: C0 c$ [* f% j' r$ }public:
$ D1 Z, r6 g" d8 I. R0 UA(){cout<<"A"<<endl;}
4 }( ?7 `1 e! \, E2 `& b9 }/ U~A(){cout<<"~A"<<endl;}4 N6 [) R* ~* Z0 R  n. |7 z& C
};
7 j' U. u) v, I$ u( M2 G( T( Vclass B : public A
% q$ n9 C/ G! h* n+ X7 O$ T( D8 t{0 z) o; H$ F% I
public:4 {2 Z/ r/ H# N3 M) r2 T2 e. c  ~- s
B(){cout<<"B"<<endl;}
* W0 x% L$ h& U  v9 j$ Y; N* F* C6 yvirtual ~B(){cout<<"~B"<<endl;}& X8 h) _( y0 J1 e8 o
};
) g- A6 |9 o* _( s1 `4 K. B/ l& lclass C : public B& Z( i; f6 c% `! g, m
{/ z) k0 b1 F5 @' v) X6 j# \
public:
1 L# n0 f4 b  A: XC(){cout<<"C"<<endl;}
  X! O/ o3 p% |/ N0 g! Y~C(){cout<<"~C"<<endl;}4 i- @* ?7 ]& u+ |( O2 X. r
};' a- ~7 i; Y% A: D/ _+ L8 c
4 f0 f2 h0 ^% o3 W
void main()
3 u2 c2 u% ?9 X& H) A7 z' \{
) \" j* w( i3 n, T) W2 q) l7 S9 ?4 C) G% q) L: ~' U% q: P( u* T# k
A *a=new A();. ]- s4 V+ H1 K. O, Z5 ?1 B* E
B *b=new B();
9 Y* I0 R, s5 @- n$ |  C *c=new C();
7 F" h$ I! U/ V0 S4 O- ]- |A *d=new B();6 d+ I4 j! t1 V0 m6 F; ^+ s6 ?& c
A *e=new C();
* r8 g! ?6 D' @# f5 E5 Y8 D9 B. KB *f=new C();
* Z: f5 l4 E, M& A7 K$ m3 k1 J" v. O4 ]
delete a; cout<<"---------------\n";
' R8 H& e! @  k! o, R- Xdelete b;   cout<<"---------------\n";
2 \- k: [0 j+ ]% g4 \5 l$ {& O& o: Fdelete c;   cout<<"---------------\n";
0 [9 b' r6 l$ z- f+ i8 Fdelete d;   cout<<"---------------\n";
# Y$ g( k% P7 h2 ]0 J0 `8 I( qdelete e;   cout<<"---------------\n";) h$ d1 p. _, K
delete f;   cout<<"---------------\n";7 A( u& \/ O* S3 D7 n5 c4 L
}
. i, x, @8 [' X+ V这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
! i) Q" ]2 V, H: K1 M# K这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
* k- E& b: A1 r* ~! j其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵). C9 L. Y# T, g, Y  X* P4 M* f0 @
(2)面试的诡异题目
0 H4 w" n/ W# C! t3 ]) _大意就是如果你 test *p=new test[20];
  z" }' u2 L3 e+ U4 X, e+ b然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)+ F6 H+ e2 \% |3 n2 G: L
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
. d$ C. d$ x7 M1 p3 t
9 j2 I: X" v  }! Z+ B+ ]/ NZz
7 U/ n: y- y2 _. N8 k爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html6 L' w2 `# I0 U8 {0 {' C
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
3 \8 k3 C/ e- V爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
4 O3 _5 q7 m4 P9 n( u* D8 |" D——
) J$ C; @& t7 w/ x" J" [* J# m百度2011年实习招聘专题
; w/ F7 s. o. ahttp://www.aftjob.com/portal.php?mod=topic&topicid=22
/ X) N6 l9 ]& i! A; i爱立信2011年实习招聘专题
4 B. g5 @/ ~% y+ r: [* _9 Jhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
8 G: B) L& V& o, M7 L, W. \- a新浪微博2011年实习生招聘
1 f/ W2 j% p& \, N+ a: Z  L0 B8 vhttp://www.aftjob.com/portal.php?mod=topic&topicid=218 k1 ]4 c) ^+ A- l
阿凡提招聘http://job.aftjob.com/job
1 y9 m1 v/ ?" K阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
4 x6 z0 _4 v# W/ v. f阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum6 P) t9 h8 t! e, h
阿凡提职位搜索
$ v8 |. d9 V  H6 e7 n2 P——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-1-11 20:27

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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