找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1226|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题4 ?" H' a8 {2 E% X, X5 O
8 k% q$ c3 T, ^( U+ Y
Zz
: g/ T. i+ A1 O: S; f  ~6 F2 R7 ~% f
(1)下面程序运行结果是什么:
! R& }1 [: e( e0 C/ v#include "stdio.h"* m2 b, m( _" a* }% J! T- U
class test
$ [. ~( M$ Y0 d: X4 m% f/ }{
! r  _6 l# b: q$ Q. Ppublic:5 u% x* o3 @. n$ L
test(){}: e& p9 V7 O) j1 A1 ?) K
void hello(){ printf("hello\n");}, Q& Z: q( w$ c3 V
};1 J* G  S6 I# Q+ i0 P5 x1 l
void main()
1 K1 b, @9 ]0 g{
- J- z1 l$ h3 L    test* p=new test();. e9 ?8 ^: B* w* `
    p=NULL;% I" Q0 i  b# l
    p->hello();% I2 W- X% y# D/ _4 X
}4 H5 s, Q2 z8 u. W: s
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:$ }% ?; V% W! e" l& {) A
#include "stdio.h"
  c% K0 n3 s3 G; k9 F- _class test
6 m0 s$ c/ H# p) C{# T! y( A/ d3 Q0 o
private:+ `  x+ o$ L5 B, x
int i;
( k9 o, R( k! Bpublic:
8 X# Z: Z; G7 Y' }test(){i=1;}
( `0 O* e. ]0 [: V+ F* _void hello(){printf("%d\n",i);}
' P& I0 V- o8 B- o& B2 G};1 w( F$ q. e7 B  s2 P0 o
void main()  ~. B7 J$ r( P
{; A1 n% K# Z- P3 h, u: D
    test* p=new test();
( F+ G; x4 Z" e% R4 Cp=NULL;
  q* n9 U8 j* \p->hello();
" i; r0 ~# E6 y}
! j& i' q+ A3 g' D( L; h如果将p=NULL注释掉就无误,就会输出1.# |) c: a* X8 s' {- h
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。$ o  }! e: [; d8 P0 O; v
(1)C++的构造以及析构顺序
: L6 C" ]; p  N3 }" ~#include <iostream>
) J$ D; b, ?$ ]+ y9 S1 J$ `using namespace std;
9 f) ]( _( ~/ L; ~class A
7 |" V# |' {4 h{
- z3 I4 b' [- k$ qpublic:: h& c" |2 H6 j2 g8 g) o
A(){cout<<"A"<<endl;}
" y  B- {9 h3 B9 f~A(){cout<<"~A"<<endl;}
6 g% Z  y6 p4 q4 u1 a3 w};
. M. V# h1 S3 \+ _6 r4 J1 n) `class B : public A
5 T& N0 h4 F% F" q! ~{) V; j- v  }! Q9 m# c- T8 k
public:
6 N( g" j, `2 WB(){cout<<"B"<<endl;}2 _: {* [$ o: t( Y
virtual ~B(){cout<<"~B"<<endl;}
5 W* _5 U8 X' h7 |* _5 L};# W3 N5 u* [1 f9 k
class C : public B/ D3 q0 y) H0 ]5 ?. @
{: _8 c/ X* a/ v/ I0 Z& {7 O
public:
3 _5 U2 o3 D7 o: ZC(){cout<<"C"<<endl;}
+ X% o3 @! u9 u' N; f~C(){cout<<"~C"<<endl;}
7 V( t9 V# j2 H! m0 [};; P" F2 J  l* h, E
( w6 b; S: k0 [9 A$ S  o
void main(), \  z& w4 y* ~! \2 ^
{$ m* b4 p" k# K5 L

- m+ f- i* \& N% y7 \A *a=new A();4 P6 B. [2 r. `7 x
B *b=new B();4 ?) L3 ~; h6 T- z3 i
  C *c=new C();
: k+ D' z* `( J4 r  yA *d=new B();6 v  E% Z9 B" O! o. O' u5 R
A *e=new C();
. K6 F$ H9 o6 E$ o0 e1 S% e$ GB *f=new C();
" h8 r' V. Z. ^) s' K
: b- G$ r$ \/ gdelete a; cout<<"---------------\n";
3 M9 I- z* {( X. Y! o" ldelete b;   cout<<"---------------\n";
; M$ K% D' g: W; D- ]7 g1 U4 wdelete c;   cout<<"---------------\n";! t) ]/ a1 C6 h& a6 a  a
delete d;   cout<<"---------------\n";
4 `9 l" E# v, d: w$ t4 vdelete e;   cout<<"---------------\n";
! k( {  \# G* n7 U+ hdelete f;   cout<<"---------------\n";
" {2 \% W6 B5 s+ K8 b}
9 Y' ?2 F5 l; a1 \( x9 f( j这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
+ [2 @! N, {5 I; J) M. ^4 z# R5 u这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。8 S4 F) g" `: o, V+ d
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
8 F8 ]3 X% W$ w: U$ _  g(2)面试的诡异题目
; f/ C1 ?7 G/ s8 d7 q大意就是如果你 test *p=new test[20];/ W1 u: O% k% @/ z8 e
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……): Y& c! i4 a9 R4 b
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……# N1 H& A" c# O! O

# ^. F1 G. n# A. g' sZz
) q& U9 M) G' z0 L, Z+ A爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
: V" Z$ g4 z2 y: ?5 s4 u* h上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
( N% h3 t* w! R) T$ u爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
& l8 m' v/ x! H. o2 C2 {) g——  R6 J8 w$ |; L2 ?; l) G
百度2011年实习招聘专题9 ~8 |( ]& m8 |& \% ?0 u* t. c- V! v
http://www.aftjob.com/portal.php?mod=topic&topicid=22) ]1 ]. p3 S" C8 {& j7 \
爱立信2011年实习招聘专题' E- t* U: H' N4 Q  V. j2 R: G8 A
http://www.aftjob.com/portal.php?mod=topic&topicid=23
$ c; D% d. R4 m9 G$ L# i9 i7 _) L新浪微博2011年实习生招聘
- t8 m3 b0 A2 D' s% j' V; ~http://www.aftjob.com/portal.php?mod=topic&topicid=21
$ z: c# `& ]1 k' C. q" o$ [  ^! @阿凡提招聘http://job.aftjob.com/job: o2 ~7 I- W4 d) {9 L
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
" \" Z6 {( @8 W4 P% w; S# x7 F0 q阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum& \3 H4 r+ V0 O: e1 U" ~
阿凡提职位搜索! E0 c6 e( e7 s7 L$ u
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-13 11:58

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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