工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 913|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题- y% C$ ~+ y" h7 U- @- i/ n2 K
; }6 |5 \0 B- H% Q4 _/ c6 ^
Zz5 G& B7 t; s2 Z/ m

. O8 w; {& w+ |& i( o* D(1)下面程序运行结果是什么:
3 U  Y' V+ I- p+ j0 E# i#include "stdio.h"
. x! l# ?7 v( j' S9 x6 F2 }/ z. @class test
( |1 y: i# Q! Z- R: g  H% x( \{
% e# V4 C# _4 m0 ~public:% ~: r. ]' a# _' {6 t
test(){}4 h5 t: F1 k& R" y. [. V9 _
void hello(){ printf("hello\n");}4 Q1 e7 M# d- ^/ _" B6 b* \, A5 B
};
" E$ _/ e4 @1 A& Y6 e0 [  ^void main()5 t# d( n/ a/ a' W) P" Y, {
{9 D* m. A" ^* A- h1 K
    test* p=new test();  S' b# {; T, n! ^1 T
    p=NULL;& D1 o4 O' |6 `) g7 ?0 ?/ z
    p->hello();! \1 C+ g; A# T1 E; z
}5 e/ G5 F& c& y
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:3 \1 l1 Y* p5 V5 m5 i
#include "stdio.h"6 W% l1 w8 @( c/ y; ^7 ^8 \
class test+ ~+ H/ E% i8 J8 A' y- O2 g
{! m' g5 ~7 F$ k! e0 W1 v
private:3 L$ R4 u1 u5 c# @
int i;  a9 z) O, {8 o$ a8 }- [! `. Z  @
public:& {2 w3 p, C. F. Z( A! L( W
test(){i=1;}+ u; b3 J" i$ u3 Q) ?  p7 y
void hello(){printf("%d\n",i);}; \0 i# X+ S; Q# u- I6 K0 j1 C& z4 {
};
: p/ M' _$ B* I1 S) y0 m$ Nvoid main()
# u* J5 U( D& M{
. O( t& o  _+ l0 D/ g0 L    test* p=new test();8 s% }1 W9 p! }' l# t
p=NULL;
' G7 A; f3 y$ }( O  F, p. Zp->hello();
, C% t6 v4 C9 o2 W# A! q}- }& z# j) e8 ^& ^5 S
如果将p=NULL注释掉就无误,就会输出1.+ n6 j% R& v$ J1 I+ G0 n9 P- @8 w. d
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
; V1 h. n5 Z6 r/ s" z(1)C++的构造以及析构顺序6 j: ~. d3 L# f
#include <iostream>
& [! H" r3 R/ }- _1 h! f0 susing namespace std;
* E! C4 k" ]  s8 {class A
5 X$ z* d! }* O{
% c* ~8 t- x# Rpublic:
: [1 t6 N8 Y3 i: {A(){cout<<"A"<<endl;}
9 ?* m* w3 ~" A. ~  @. x: b. i~A(){cout<<"~A"<<endl;}
) F+ _: P/ d$ G3 k% T+ @};
/ a6 ?7 E5 C& j# e& o2 gclass B : public A
9 z* v6 \. h: x+ k/ {8 e; B{$ q# `- o7 Z- g% ?, t5 K
public:' u: T* B4 @- y# u6 h' k4 f
B(){cout<<"B"<<endl;}
# c- B2 ]: m7 P; v6 M4 @virtual ~B(){cout<<"~B"<<endl;}6 G" L2 f2 P2 x$ {+ R1 d
};( \  f* z1 t/ ~2 j+ }( c$ f
class C : public B
5 c* w/ E$ l2 q: a( P9 X# K{
2 A$ v3 C, p6 P$ Epublic:
3 [6 K$ U7 e/ L1 E1 }. IC(){cout<<"C"<<endl;}: U! F% Q2 Z% \' G
~C(){cout<<"~C"<<endl;}
8 J6 e) ?; k3 C% c. p};) P1 b" M% E* H3 p: E
0 {$ P# D' v6 @' {
void main()
  |. ?0 g4 Z7 x6 M7 u% C* T{
1 }1 r1 Z  k2 m* C6 `9 G4 Q! j0 s# e( d0 `% y/ r. I/ z8 I
A *a=new A();
* h7 [3 H4 F" ZB *b=new B();: u! z* i8 {6 V4 {6 I$ \& w
  C *c=new C();: i  y; O& y& Y: y# D" N
A *d=new B();- y7 ^$ s( A! t1 o) V* o% g0 q
A *e=new C();; e1 `/ c5 O- ?3 v0 Q+ R" L
B *f=new C();1 J  r4 s" k; b- m$ d3 J, L
: P) M3 A/ h4 K3 T
delete a; cout<<"---------------\n";9 }* g% K# U$ @2 F) I7 P
delete b;   cout<<"---------------\n";* @3 h! p! e$ }! x8 k
delete c;   cout<<"---------------\n";
4 U6 C# C- O) ?0 c# s" Adelete d;   cout<<"---------------\n";
: N: r/ f# R8 K. ^. ?, E2 B8 mdelete e;   cout<<"---------------\n";
& v- K* b4 o0 s* ~& e  W5 ^2 E2 Odelete f;   cout<<"---------------\n";
3 F" v. C0 T% n0 h# \}1 o" e/ }+ ~4 y! \2 J0 i
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。" z6 g* I4 R" e' a3 P0 r
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。+ F1 o; H8 d3 k& ]5 ]4 ]; W/ S3 W+ a
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)2 M+ N5 N- U/ A, K, t' L
(2)面试的诡异题目
* x; r8 j1 ?# S; |) P! c大意就是如果你 test *p=new test[20];
7 \/ E* Y- C1 C; ~  U& _4 w然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)% c9 s5 c/ u$ Q. Z! S+ A# b1 S4 h& ?
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
3 ^* N  f2 J& d4 l. i: S, X0 k) p5 u0 X; H1 u. V1 Q0 p+ S
Zz
, V6 X' N) u- h9 g9 S爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html, P7 v+ @0 d7 e. s' V& c& M; g& ~
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
4 F, r; y9 P( L3 W4 T3 Z, n. K( a" [爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html  L3 b% N4 m3 y/ d5 s5 O
——
7 c" y/ C5 o) U& _; T# ^( t' I百度2011年实习招聘专题3 L7 H) H, \3 D: w; v  i6 t
http://www.aftjob.com/portal.php?mod=topic&topicid=22) ]9 ^# ]2 h1 Q( Z9 Z
爱立信2011年实习招聘专题2 J! G8 \8 L- c7 w( G3 o
http://www.aftjob.com/portal.php?mod=topic&topicid=23
$ U% Y: p' j4 {新浪微博2011年实习生招聘. S$ p5 ~  b+ O9 n# E% ?8 t
http://www.aftjob.com/portal.php?mod=topic&topicid=21) s8 u, l/ P2 @; c/ [+ P8 q
阿凡提招聘http://job.aftjob.com/job3 ?, y" u' T; S( R! `
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag" z6 Q) s+ Z( {/ Z  k+ ]7 T
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
$ }  e: y; A- Z$ R' _* |& x* h8 n阿凡提职位搜索
) G  {+ p* g6 I" t——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2024-5-23 10:53

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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