找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1354|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题8 ~- s' h* ~) V% _

1 ?% Y& k+ n# N  \# p- sZz
0 M' j5 j5 h0 {0 V, e, A8 |7 c" }, m2 J% Y3 f! ^
(1)下面程序运行结果是什么:
+ g, l) j$ B3 `0 g+ P9 u/ P#include "stdio.h"
8 g1 @, J+ S( k6 cclass test
3 Z6 R/ t, u, T: A5 L{
2 r4 m% j  o4 b: x2 zpublic:
9 {1 P/ W8 H8 stest(){}8 z8 n5 f3 v! W7 `  n9 t) B* D
void hello(){ printf("hello\n");}4 h7 e: C* ]$ A8 L. k0 p
};5 ~6 Z3 J: t6 l8 L
void main()( I- c! z! W0 o9 n" ^# ]8 ?: z( s1 i% `
{
& z; E1 C1 c0 V: z. d. h2 c& M& l    test* p=new test();7 X7 w  @6 {* T. [" q+ N
    p=NULL;: g  x6 I# E5 h) q
    p->hello();. m7 V& r$ R  B7 v
}
' Q4 q- P0 m5 t- E6 D: F事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
# F5 @/ Z$ U/ J#include "stdio.h"5 Z8 B9 [8 ]( V9 T! L2 N* M& w* x
class test
7 X" r& H2 H- U7 X{
+ P1 @/ X2 C3 M  yprivate:
0 u( e8 B6 {+ H  B+ o3 V1 J/ Uint i;
  G; y, O, `/ Q6 I3 p0 o& u' Ipublic:
/ ]- n( ^: }% U! v& a# G" Vtest(){i=1;}' Q, {! D) f1 l+ X- N9 g
void hello(){printf("%d\n",i);}& q0 y# _) z1 @' U
};7 U, |8 w7 O( c
void main()
( P% Z: j- J6 P  W' z& K{
8 J  ]5 w1 B0 H4 T0 Z    test* p=new test();
, ~* I, m: ~$ ]  O. Gp=NULL;
" b# [& I1 z. H# U, c; S; Op->hello();: C' q, K/ L9 {; s) @$ Q+ I( T. E
}
  D2 `& F1 U/ P  n# v- e, j如果将p=NULL注释掉就无误,就会输出1.
# e+ v& e. t  y7 K4 ?, Q注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
' A) s1 x& Q0 U6 F2 z% a8 `# Q(1)C++的构造以及析构顺序
5 u& W: B1 `& C1 ?+ r' P, c6 d#include <iostream>6 e, |% [9 f% @+ U/ N
using namespace std;
3 M; T9 {! p( J; _class A
# Y) K& M5 f$ b' R" x! Q% e{
: c; _5 t" I% L5 G4 T" T* }public:
' R- b  D# _2 kA(){cout<<"A"<<endl;}
. S% W+ r8 t2 x~A(){cout<<"~A"<<endl;}! Q  ^5 l9 a) @2 I
};. v0 b' g( C$ ^$ a% G
class B : public A
  N0 k' c! [# `  w{( ~% [+ S. a7 I2 G
public:; O/ a5 X5 w' C) ^
B(){cout<<"B"<<endl;}4 O( S9 s8 g7 e0 q
virtual ~B(){cout<<"~B"<<endl;}
2 x; k. p5 x& x+ i$ w8 G};0 [* C, t2 S9 C3 I- _
class C : public B: U# z/ R  d2 f2 F1 O5 I, u4 g* \
{; F) g# Q2 e$ m! Y: @7 H
public:% D0 {7 j0 o8 ]3 y
C(){cout<<"C"<<endl;}9 I7 U- q& Z8 H; u; y0 [( D
~C(){cout<<"~C"<<endl;}
! F, D0 F9 N4 W) H4 u+ T7 S. e};5 m& @% u( N, Z# d- r0 D8 D! d' }0 q
+ P3 s6 P) u! y7 e; }6 f* l0 r+ z
void main()
0 S0 j% P) j5 S8 A{
5 @9 p$ ?# {. L3 k  n1 A# i6 S- D- |6 a; q, H
A *a=new A();
' k  W. V6 B9 S- q* h2 ZB *b=new B();. c) k* x3 [4 s
  C *c=new C();- p6 M  m1 J2 m" r  {/ n/ ~: F' S
A *d=new B();, g- h8 l/ R" x8 Z3 I* S" J! M
A *e=new C();: |- ]- e# g. J" A7 ?" y
B *f=new C();
+ `3 s0 G7 K" m
7 g1 h, u6 M/ Y, @- i) X' ^; Xdelete a; cout<<"---------------\n";7 f" Z( H! a- g" B8 J$ L6 S
delete b;   cout<<"---------------\n";
, I3 ~: S' y$ }) ?delete c;   cout<<"---------------\n";
9 h: z6 j, }" H! f2 y) Jdelete d;   cout<<"---------------\n";7 G  [* Q( R6 ~0 x" D
delete e;   cout<<"---------------\n";
* a2 Z' ]; V$ }' `! ldelete f;   cout<<"---------------\n";
, e6 V6 {$ b. M5 ^  B}
2 i4 s; p( B, _) Q这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。& k* v5 z- L$ b/ s
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
; G# |2 X8 D2 s% i其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
* R/ k* c7 j& h. R(2)面试的诡异题目
% d5 @& Q, N! I! D  R大意就是如果你 test *p=new test[20];
3 u, P+ [9 E2 T7 A" O3 ^然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
5 O: ]8 P% K$ A答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
9 j* M+ ^" k  H
; e( T& c3 g( oZz6 ?, B9 k( V" P. s
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html8 M% {1 E) J7 m0 Z; }+ [1 S9 d* \
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
( h- {. x$ K5 K) o9 Y$ V' K- D爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
. m% o; E' x7 C, I5 O+ k3 W——% P9 B& L5 d) L# r( l, W
百度2011年实习招聘专题
2 z3 L  m9 H- Nhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
& S$ t5 T- }: C! Y$ O9 e爱立信2011年实习招聘专题
3 X0 |& ?2 \( ^. i$ w; Thttp://www.aftjob.com/portal.php?mod=topic&topicid=237 l& t6 V9 j6 o. ^2 H
新浪微博2011年实习生招聘
6 @9 p2 n' s  U, ?2 r' Shttp://www.aftjob.com/portal.php?mod=topic&topicid=21' E) `$ ]) O# m% u1 D5 ~* v
阿凡提招聘http://job.aftjob.com/job# B, j9 ?- g9 z, Q( N" N; l7 P7 d
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
5 y% K, l7 U4 d- q! c' \阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
$ Y0 i, J4 C2 p9 f阿凡提职位搜索
' T; a* _' B! n——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-17 10:37

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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