找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1334|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
* [3 `  d  P: [9 X# N9 e1 W! J2 q0 }9 ]- x  C! m* q8 ^
Zz
  i/ ?; l, }9 J! m, m' Y# r8 p' j2 ^
(1)下面程序运行结果是什么:
/ ?; K8 Q" C. U/ I  F$ l, X#include "stdio.h"& j7 _* q) m5 e1 k. a7 `+ F: [
class test2 V3 J0 y3 F& l+ t0 u& @: p% |
{
* B/ W9 L% ]* G8 npublic:% a) B* Q6 V% L& V
test(){}  m6 H8 d9 i3 u
void hello(){ printf("hello\n");}
" r  W8 ^% B2 ~};0 N6 l7 f; T1 c3 r+ D
void main()7 L! J# ]: a6 |9 e
{
) u" k/ p  r$ E7 ?1 [* t    test* p=new test();1 e# b. Z# G' r& y8 Z) W( S0 I
    p=NULL;, q/ F% c. P" a/ k6 _1 l. o) p0 e
    p->hello();
4 p' Z% Y7 y, a, G}" O3 H1 s3 K9 `
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
7 Q; l- p- c  C/ h0 C  b: J#include "stdio.h"
8 R3 n6 n( t- B3 W- d& Vclass test
3 w+ [  A% c9 w) Z{
0 s6 U+ c" Q& q( r+ B/ d' l/ g7 Pprivate:9 W$ X$ _8 d: e8 S) u) N
int i;
# `( n4 N7 j: k4 I9 Y: Qpublic:
3 Z- O1 c/ e# j# D& J* dtest(){i=1;}* t& D4 v7 o! ^( f" m
void hello(){printf("%d\n",i);}1 G5 Y$ {7 ?% ~0 Y4 ~
};9 t+ \. }: I2 l2 \  M; J
void main()
& ]' h, O/ P6 r3 L$ Q$ D{
# n9 Y' x- [+ b2 W  a$ }) B    test* p=new test();4 \" x& r% j* B# b; ?$ Q7 b1 {
p=NULL;
: r6 U& N% d( a% C1 y$ h$ op->hello();9 |; u2 x  ^  y; P/ i/ z% Q
}4 k7 h. A5 I4 J" s! J3 {
如果将p=NULL注释掉就无误,就会输出1.
# a! H" k& a- G2 Q注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
  O) Z5 R: V* H+ l(1)C++的构造以及析构顺序8 b0 Y/ {' w5 S+ Y8 U* i
#include <iostream>" U6 ?, U9 F. Y; C/ N
using namespace std;
1 f2 f  Q* a8 P, v: e1 zclass A5 \! R+ x0 i7 M7 x. F
{6 I6 N1 s' f, V$ L* W4 s9 E
public:% |# L* E( R. P
A(){cout<<"A"<<endl;}& l2 D& S" G3 K- P7 E  t
~A(){cout<<"~A"<<endl;}3 s  P2 ]6 A- I! U3 Q' Q
};0 Z: U, z; L* K/ X
class B : public A
) ^: @3 l+ O* g8 N5 l, Y{
: X! Q- ]% ~+ c2 B2 y! Jpublic:. I1 V8 k: T) O; n$ x+ m: a- F8 A
B(){cout<<"B"<<endl;}
3 H8 m" g9 v+ l' l. [  \virtual ~B(){cout<<"~B"<<endl;}$ `* x$ F4 w% u3 t! m
};
  y$ o" }! ~. iclass C : public B1 n1 V" `* X. Z7 u3 _; z" \
{
& N0 y2 C0 b: L; u% s' `public:% f" b* }! J" U/ M$ `
C(){cout<<"C"<<endl;}
5 F0 f$ i* i. `( H7 B~C(){cout<<"~C"<<endl;}
" C6 @$ B, t3 O};7 F3 M& U0 b8 z) ]

0 `% I6 {0 w9 d+ y7 b' r' zvoid main()2 t3 j3 {* K$ J: ]
{
# _+ t$ G7 ^/ y2 r; a* W4 h/ b' F# R; I
A *a=new A();  |" v, |; }% M. e( k/ z$ S. Z! l
B *b=new B();
! W. X8 `1 ^2 c, i1 ~  C *c=new C();
) X0 W: k# l* v3 w: i' EA *d=new B();; e% m4 r8 H$ K- A$ n" v* l
A *e=new C();" n2 F) T; e) E; e( X$ S9 ^
B *f=new C();9 r8 g6 N' U/ R4 D  ^8 s" z
6 v: U1 p9 d; x# ^
delete a; cout<<"---------------\n";
& e4 B3 t4 X' ^" mdelete b;   cout<<"---------------\n";
7 U1 U: p  d; [& D! F9 U5 ?! o$ Edelete c;   cout<<"---------------\n";
5 V- R. z$ a/ q* R3 N5 Wdelete d;   cout<<"---------------\n";1 c6 P; f1 U4 z2 }9 e/ _
delete e;   cout<<"---------------\n";: X' z  S* J! c/ u3 w
delete f;   cout<<"---------------\n";2 J; E1 |0 x- J, K. ^$ w
}7 P3 i* q/ V, _" R
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。% K( v: m  }5 h
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
* o( k( y6 U; f9 U  Z) u2 [其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵): z! I6 M  t3 M
(2)面试的诡异题目
; D1 G& {5 G4 B; Z( Z: t8 \6 Q5 X大意就是如果你 test *p=new test[20];8 X) J# Y& e' S- ~  Y7 a6 g
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)- ]/ r8 L, [- p! z7 C
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……: D2 i8 c$ c; G  t% F* h/ p

- s) P- q, W. G3 c! J+ D' n2 JZz
( ?+ l4 Y9 g# }7 d+ Y爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
+ u% F4 W: Z! \0 E2 S% S1 b" l( J上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html: C* s  W3 f$ y- M7 \
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html; e, m3 k0 T+ w) s# ]4 a6 a5 s% A
——6 y# V& o; R3 i
百度2011年实习招聘专题/ R5 l# p4 b3 P+ y$ H
http://www.aftjob.com/portal.php?mod=topic&topicid=22. g% i5 t6 F2 t; Y0 K1 I; \9 g
爱立信2011年实习招聘专题5 G& @* U0 E+ I: {
http://www.aftjob.com/portal.php?mod=topic&topicid=23
2 X8 W; x/ ^! @  H% P* ~8 l* [1 D新浪微博2011年实习生招聘3 R/ s  B4 W3 L3 [7 o' ?$ |
http://www.aftjob.com/portal.php?mod=topic&topicid=21+ R+ w# d9 H7 `3 m1 s8 Z$ p- m4 o" I. Z
阿凡提招聘http://job.aftjob.com/job
( e" h" s" E! `' Z8 Y' g阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag+ {% r0 S6 Q3 ~) Q- i
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
: H2 w, x7 `" M+ W$ J9 a1 U阿凡提职位搜索/ D" i& r, t$ h! d4 r) b
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-7 21:50

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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