找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1291|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
: `2 ]  ?/ m- o5 x5 a- g  k! z
( x& w( ]2 G8 b$ U; OZz
1 G. m# s, D1 x" K; ~
( _8 X: S$ p1 R/ W(1)下面程序运行结果是什么:
# F. i, z& D5 ^9 f; X7 z) `#include "stdio.h"
! i! J" G% o) [2 {* kclass test; _# I( E: d& q3 y
{
5 R& D& X; s6 rpublic:, [! d) n  B; q% P1 d
test(){}; {8 ^4 H# E; F7 t( x
void hello(){ printf("hello\n");}
0 Z$ Q9 ~( q9 _4 o& V6 p  g- X};6 N; ~& ]4 e1 C/ \/ s
void main()
9 g$ `  [8 P$ P; Q5 }{
7 a- d* V. d3 e$ A    test* p=new test();
) H" B' k; g/ G1 i/ }& {  o* i    p=NULL;1 ?3 Y+ m" c! |: V& f
    p->hello();9 L$ k) [+ g' x4 [" u" Z
}
& K6 ?0 n3 K6 j& s: w事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
: E7 {! L* P: \1 G#include "stdio.h"
) k4 H/ L/ x" v' w* |class test$ H' n. P1 Q: l3 O# `& k
{
; L% X1 n& [& M0 G2 ]: l$ F* Fprivate:0 @7 R( z8 o/ g1 [/ N
int i;/ V* r/ x, u& o! y
public:
6 Z. o' {% r: r$ E% E* [test(){i=1;}
4 ^* L- t) e; j9 M- W% [, x% Dvoid hello(){printf("%d\n",i);}
& w% u8 _% {+ E- G1 e9 V};
3 I7 M3 \4 F1 z% `6 rvoid main()( c7 n# {! k5 D' x. {4 L
{
8 A. D/ |6 A7 c3 k/ O, Z& b# l    test* p=new test();
: J5 ^4 k- `7 O7 Qp=NULL;
8 p2 r0 r2 n! u6 J; Y) v5 h" x, Gp->hello();) ~' C+ ?! s3 Z4 D
}0 ^4 R4 [7 Z1 C$ T7 p
如果将p=NULL注释掉就无误,就会输出1.
- R: J. F0 R, l2 @3 o注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
) I+ I8 D- R( b8 t' s+ I(1)C++的构造以及析构顺序- n9 u$ F$ ?6 Q8 I# v+ Y, g
#include <iostream>
. _9 [( _$ Y7 V8 l5 iusing namespace std;% G/ J6 e) I* P" S* K
class A
3 V! ?' e4 A: G* L6 g* p5 e( t{; u9 k' u* U9 [; I' {9 m; L0 g; S
public:
; E# T0 \5 |9 O! zA(){cout<<"A"<<endl;}) C) r) f, y, W6 l
~A(){cout<<"~A"<<endl;}& @# z- i5 v/ z. }
};
8 A7 @7 u" C& E- A% {class B : public A0 k+ P: z( `$ H; `5 N. ^
{  {# q; o0 K( l0 E+ d% v6 A  R
public:9 a* Y) y6 b& E. m+ R) ?
B(){cout<<"B"<<endl;}
! S* Y2 G7 ?9 {7 {virtual ~B(){cout<<"~B"<<endl;}! q/ Q/ M' [( Z# H6 x0 F8 p
};  Z9 |2 z9 k( o9 P( p( V( e
class C : public B
- D* G2 U0 ~5 M' w- {$ P: i" m{* ~7 q/ e* Z  }+ {2 |
public:; D6 `3 P: t0 D% ^
C(){cout<<"C"<<endl;}0 k+ w: x6 k/ `; r4 F# M
~C(){cout<<"~C"<<endl;}
/ ]8 e* L- }& z6 e9 W  P4 D/ ]};) n0 a( i8 T6 A* ^0 }
: ~5 _2 X. K. F( F% v, @# |8 B- V
void main()/ |. |1 Z1 |( L
{
  ^6 g* y/ p; q- j5 s) n& \3 x9 G
" y) P% A- E0 ?$ E) ]6 U8 sA *a=new A();' N5 |  l; R# t$ z" c8 |7 D
B *b=new B();
/ ^8 b  i/ O5 I- d9 t  C *c=new C();- B' y( A! O2 q
A *d=new B();
# U+ N5 F  j! a7 K, i$ qA *e=new C();
2 K# p. C& S# n2 aB *f=new C();; g  [8 Y8 g7 ^$ A6 U1 ~& w2 v
, P: K* h( h4 @. I1 z
delete a; cout<<"---------------\n";5 q% {  n  m. g+ p, U
delete b;   cout<<"---------------\n";
5 F( [8 |* c5 {delete c;   cout<<"---------------\n";
" C# i" Y' M+ R- A# ^  A' ~delete d;   cout<<"---------------\n";; b3 E/ v1 w. F& h' Y( n
delete e;   cout<<"---------------\n";
- [" s/ @, g2 c5 @7 k5 edelete f;   cout<<"---------------\n";9 s& \+ X7 b$ }0 [- S7 R1 C* @
}
$ o0 T0 {( ~. a+ ~" K这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。1 T5 X. c% x& {, d% S/ {
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
2 ~. a! q. k  E' {2 E% |其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
3 J, Q8 A' O7 e" g; u  l9 |(2)面试的诡异题目
! @: K' o6 m3 ^3 {" ~8 U% j大意就是如果你 test *p=new test[20];0 E- L  Y; s; X$ _4 y9 j+ o* Y
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
9 O6 S* ]6 R7 A* p答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
! z6 p, ?6 [/ O0 y6 m1 W' N) }+ y
Zz
% {8 [' C7 r. J& g: S爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
% Z5 G, l8 ?6 C8 B" o- T上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
* c# n  k3 F: p爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
; V4 q! w6 f( j: H2 F——4 m+ b1 R% V- ~/ Z
百度2011年实习招聘专题
" c. `5 L" x5 D- f/ a, R4 P5 y4 _http://www.aftjob.com/portal.php?mod=topic&topicid=22: {: a& H9 {% K- Q- s
爱立信2011年实习招聘专题6 [' ?# b' E$ k7 c4 Z
http://www.aftjob.com/portal.php?mod=topic&topicid=23
, X$ O& [, n6 Q新浪微博2011年实习生招聘3 Y6 E. e1 R+ i) k$ o
http://www.aftjob.com/portal.php?mod=topic&topicid=211 x! U' Q" J$ @4 |5 L6 X
阿凡提招聘http://job.aftjob.com/job
$ k( g. ?8 |0 a1 g  Y阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
2 `4 a7 g% s: Y阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum' ^' x5 ?! B. s- P9 |1 v; h: e
阿凡提职位搜索
% [* h# ]: }) b2 s. k# e* R8 e: r——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-13 01:39

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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