找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1140|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题3 @% Z3 \* n' \& I

' V7 Y4 g) [/ ?! }/ hZz
4 [& Y" W* L8 {' ~+ j
- A, R  t9 I9 w' T  E4 B(1)下面程序运行结果是什么:
6 X, H8 [- m/ T% K5 l; D#include "stdio.h"
6 A8 M; Q' L  {. b; [! v5 m( f3 dclass test& ?- T/ o* S' n
{, }5 p8 @- ]- b! P
public:
) W! }" W9 j5 t4 j0 D+ P& Ttest(){}
/ B) a. D! G: D7 y: K8 J+ Y# z9 cvoid hello(){ printf("hello\n");}7 l% I5 f- g. ~. v( F
};
9 Y! k: T( P, M" kvoid main()
" p3 f; o8 L# O0 n8 D6 T) @7 D3 b{* T1 s  m( \) k9 @) R
    test* p=new test();* e- [( w' v( F8 V& i, n! Y
    p=NULL;
/ b# b3 S* s) a' Q    p->hello();
" i7 B- t' I  q}" Q; R" R+ E8 d. ]% _
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
7 f. A' a. k3 r#include "stdio.h"
8 ]. d" e" m9 P) Gclass test8 c8 D8 y6 y- j1 L1 @% B
{
) w1 Y% f8 j8 H4 uprivate:
# B: W; L5 t7 k. O3 kint i;
" s$ L" p4 m4 z; fpublic:
4 b) Q0 r; {! Dtest(){i=1;}9 e: D3 ?* g5 C6 q6 N/ N! [& x
void hello(){printf("%d\n",i);}
7 L) J6 e5 D' B' k! m8 q};
0 D0 S5 i" @1 \* H, i% c: Vvoid main()# K9 d1 @; B) I1 f; r/ E- Q
{) R/ V/ l3 _) C% c* L  b( b
    test* p=new test();
! M* Y6 a' p  n4 k3 e2 F, ap=NULL;
" U4 K+ x0 ]9 n2 q' O0 [4 mp->hello();) _& h# R% k# O- Z1 L
}
- C, i+ R1 e4 W! P如果将p=NULL注释掉就无误,就会输出1.
" G# P, e+ o* m8 F8 T注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。' |% c- }! i* G! m' a6 C
(1)C++的构造以及析构顺序
6 g0 D, x: \+ p! M6 g8 L#include <iostream># @5 q* Z# S% C
using namespace std;
; L% g! [& A% L/ @; w5 t1 Sclass A& O; H; S0 ~+ D/ P
{8 H# M; w9 a$ y/ b8 l
public:. D3 p+ F) L! ?
A(){cout<<"A"<<endl;}
/ C. m' _4 ]: b5 S' H) Z% c/ @+ E  s~A(){cout<<"~A"<<endl;}
, t7 s7 o" _* y* ^' n! j- n) R};3 R0 f: u; Q; r) \7 `% F; B" f! Q
class B : public A
$ d; M$ y& [% i7 {/ k( h, B# X{
; \6 a7 |$ A6 J2 f1 s, @2 o. y* S: ~public:; P7 W( r$ t- d/ h% S
B(){cout<<"B"<<endl;}( s% J* n& L+ ^2 G8 g* ]0 H
virtual ~B(){cout<<"~B"<<endl;}
0 L. M/ L0 n- [  P. _9 d};2 i6 I8 c6 ^9 B' z2 q  J; Y
class C : public B
: i5 v; {2 D+ m; ]+ A{
  r/ U  x! C! K9 K0 R; X& Wpublic:! \0 D! u- Q! g
C(){cout<<"C"<<endl;}
6 @2 C4 r% o' p: Q$ J2 a# R. T~C(){cout<<"~C"<<endl;}: m7 \1 S, e) z+ i/ I1 q+ F
};- g5 J+ i: l+ f

2 K' E, n. y0 x; p+ dvoid main()
8 l* l6 R& j; g) h% D4 d% e" D{
* A  W" x1 ]* [0 A3 p( t. d2 C  E4 l& h/ l
A *a=new A();1 u' z& M% ~0 ]# @: A) \! |5 W
B *b=new B();
' x: Z6 N7 V- d9 G  x) i' ~  C *c=new C();
7 t2 c- x) g  H0 J* o6 W( IA *d=new B();
8 ]. C3 g4 [7 k- HA *e=new C();
/ @3 D! p8 s: w3 lB *f=new C();
' O$ Z; {6 s0 W
) u; s. N( v7 m6 |/ _8 Tdelete a; cout<<"---------------\n";! j+ z, ?9 d  N  G4 o/ C2 M
delete b;   cout<<"---------------\n";
/ \& @1 @/ s3 b  o. @& ndelete c;   cout<<"---------------\n";3 r7 d- ?* ]8 ~" K$ d
delete d;   cout<<"---------------\n";& ?: N7 C- y) q4 g: g8 z: \
delete e;   cout<<"---------------\n";# c, n) G% A7 N3 k9 N
delete f;   cout<<"---------------\n";
5 `5 y* Y* s0 N, p' j" {6 d}$ M8 s9 A) _9 R5 Z4 n4 V
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。& w+ X' h7 q. e" V0 z, c
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
$ c+ P, l8 ]% w7 X; D. z其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)3 Z/ v; h) h6 D, }  c
(2)面试的诡异题目2 ]. o0 _% A! w: b, P4 W2 U
大意就是如果你 test *p=new test[20];0 s2 Q( {2 K, H
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……). Z0 o  s1 O# ^' u
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……6 o& N- `3 X: D# `

& m: m7 s& ?" {$ IZz- j3 n) t/ A* c, I& B
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html, C; R, ~: |: R9 B* Q7 `
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* q, T3 _+ y- z% ^3 x7 S% d. _  n
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html7 `( M4 K' e! O: f1 K/ E
——. c. X( y4 c# W/ U8 n
百度2011年实习招聘专题
; U0 \( x+ x" s7 C& j* [# ]" V6 hhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
& I7 }' N4 @6 [2 K" m+ s+ S( M爱立信2011年实习招聘专题
/ I* }$ `" }2 H9 ehttp://www.aftjob.com/portal.php?mod=topic&topicid=23
0 h# |; o! Z& m, n1 `: m( j, d) l新浪微博2011年实习生招聘, X, P& o6 R, ~& ?5 ~) Q2 U. S3 F9 N6 S) n
http://www.aftjob.com/portal.php?mod=topic&topicid=211 p& V- M) G9 J, T5 U
阿凡提招聘http://job.aftjob.com/job
* s" M& A# p6 d: ?" |  Y' {阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
6 D1 n5 f) G5 W阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum) h' l7 g. g+ q+ p7 M
阿凡提职位搜索# N% Y3 w, ?9 r+ t8 p
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-22 15:24

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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