工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1049|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
2 D4 F( D5 o5 d+ P* u$ N8 Q
/ Y  W) Y# ~5 v# j2 x# LZz) o. A: E% M0 w& V2 Y0 v, |

* n8 V7 g5 l! ]+ Q# }(1)下面程序运行结果是什么:
1 n2 C' f1 X8 c( U6 e& A/ @( b#include "stdio.h"' e; w& I9 m! m4 j! |
class test4 T5 Y! m+ l9 }) ~2 M, z; `' S
{, A5 `5 ~( W& I2 U7 S, ^
public:
$ R2 v; }( T" b+ k3 Y) btest(){}
  b  Z! b  K4 X- s' n, ~void hello(){ printf("hello\n");}
8 C& z: M4 M$ N( ^: c/ g1 U8 E};
! ?  H. t% Q' p6 B( Avoid main()# T7 v7 M, y' j9 w% s0 V, _
{
; B  B& }* g4 b1 f  s- `( W    test* p=new test();' l2 M  w& g* f
    p=NULL;
* ?. R% A! |# u; v' S# F    p->hello();5 l7 u2 S& X( J  i7 s
}8 y& n5 g  c; U8 e% ^: V
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
! R7 E6 x3 S2 r5 H% S, z#include "stdio.h"
/ R# z. t" D( z* d# \- Lclass test
" R' T# _, ?4 \3 _{
8 D# @+ v- {; j2 ?private:1 U, P2 R% P1 t" S/ ~! |" e
int i;* u# w$ E) @: z- o$ G; K
public:9 f8 M0 o1 Y* Z: [$ L
test(){i=1;}
6 Z5 N6 ?0 J% W3 T; x. M, @- r% Qvoid hello(){printf("%d\n",i);}# P% Z( o  b6 m! f$ Q
};
6 o. T& ]" ~6 q3 B4 |void main()! {5 r+ \% j. a% Z3 k, {
{
; S/ q: k8 R& V  n: r    test* p=new test();  V) J# J* @) G! q2 s- i
p=NULL;' V5 H( g6 a) t0 R
p->hello();
' \$ M: Y# a6 D7 Q$ _$ C7 j. F}* y2 F4 q: S$ h
如果将p=NULL注释掉就无误,就会输出1.% p; V4 i/ ?' v
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
6 \# F/ O$ I( L- x( |" h(1)C++的构造以及析构顺序
+ f. k5 V8 D3 q" j, _$ w. r5 T! j#include <iostream>
- o4 z, Y/ x8 B0 S" l& [1 |6 T% ^using namespace std;
3 C0 F8 q# e# bclass A
) z/ d7 ?* q, L2 z5 Q7 k8 Q; Z{) Y$ J) Q3 |  }) F: q$ l. L+ A0 T
public:5 ]( W, V/ ^4 u7 I. _
A(){cout<<"A"<<endl;}. R' z! b' P$ o3 N8 |, d0 k, S
~A(){cout<<"~A"<<endl;}- @4 B$ i, V2 l) a4 N7 h- B3 g
};
, H  V- Y. j" A# s' _6 I. }class B : public A& _7 C8 {" A  B
{
3 G0 Y) N; O! L9 P" d* C" l3 T7 v, hpublic:% u( W, Q" x  A5 j' G* X
B(){cout<<"B"<<endl;}" m( c5 z  s+ A4 e* i
virtual ~B(){cout<<"~B"<<endl;}
2 v: T: j4 S2 z9 @/ V7 e};
4 |1 n+ [. A; i5 u8 C6 Z  \6 [& t$ `class C : public B  O) D$ j/ K1 C" T5 M
{5 d5 Q# |! D: T" B# @4 o
public:
& G1 d! u. d* F5 T1 L4 d/ p+ @C(){cout<<"C"<<endl;}
/ g+ r; W: k/ j- K! a~C(){cout<<"~C"<<endl;}
: m- J; x/ S# l( r};5 X( I) `0 B6 e, k6 H/ @' s4 d

: X5 z2 ^( j- H# Q' yvoid main()
! i: T% j  y! t8 b' W, `{
4 J' @' L- R1 J
+ b) o" P. E5 n; H1 R7 ^9 p) {) ZA *a=new A();* X. r4 k" S) }  V
B *b=new B();
0 H) B: b, K, J7 M. B! ?  C *c=new C();
9 E. |# W7 x. K, o0 ?; v' w7 ~& kA *d=new B();
: {8 O2 k' a! s  V  O* V4 D; ]" MA *e=new C();( \3 z: W$ a0 ?% d
B *f=new C();# s7 D& V, w3 d9 l! B
- H: |4 ^) f# }
delete a; cout<<"---------------\n";
+ Z0 Q  s+ j' k) Ndelete b;   cout<<"---------------\n";0 w# J& Z( @! r) F6 Z
delete c;   cout<<"---------------\n";/ |- Z- R8 ?% [8 A& B
delete d;   cout<<"---------------\n";
2 K$ r& X5 G6 Edelete e;   cout<<"---------------\n";) X0 `( K; J' T% f7 f9 z
delete f;   cout<<"---------------\n";
) Q* n  Q, k+ q! j}! ]# ^2 u  ~1 H, y/ V4 g
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。. M; T' |7 X& E: X6 a0 u$ Q- V) B
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。/ v5 K: x# {1 ?' K3 O
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)! Y9 b7 o% Z! F
(2)面试的诡异题目
" a9 |, [" C1 ~8 c" h5 `$ k大意就是如果你 test *p=new test[20];% X" ~& X: k% E2 ~
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)1 @/ h# q6 x5 E7 `. ^" q
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……7 l" ], `/ q) |; |# F

- j$ D1 l" k+ t% Z' ]Zz; h1 F6 l: R: w5 `! p
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html* F) @- i4 Q; Z2 Q6 ~8 O  Y7 u
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html1 g% c: L  ^* ~: J6 b0 R7 _5 n
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html* [1 M6 V) y$ n4 v$ L$ z# G
——
+ O  _8 {9 _. Y5 [% M* ]0 {/ b百度2011年实习招聘专题: ~. @+ Y9 F/ I! y0 @$ e( V9 S
http://www.aftjob.com/portal.php?mod=topic&topicid=22
/ ?/ }0 x. q5 Y- V/ Z爱立信2011年实习招聘专题& x+ z1 D! j  o6 O; X: ^
http://www.aftjob.com/portal.php?mod=topic&topicid=238 a2 [) @& U  F+ p
新浪微博2011年实习生招聘7 |: X# {' Z' e" g/ F) k: i/ e4 L7 x3 G
http://www.aftjob.com/portal.php?mod=topic&topicid=210 x$ Z9 l4 ^$ A4 j/ Y' l( c
阿凡提招聘http://job.aftjob.com/job6 m( v! s7 F( [0 X0 [
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag, v/ g. L+ p9 i0 i5 T( ~5 J! @
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
( g+ W# `1 I3 O' x5 J阿凡提职位搜索2 b# f7 c& ^, D7 a
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-11-6 00:55

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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