找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1360|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题& ^5 o) V# {- V9 Z/ P3 y
6 H; f( N' E( t* d7 c
Zz4 s- u2 F2 H7 ]6 A3 y  F8 y7 P9 C
) h/ ?+ c1 S, |3 s
(1)下面程序运行结果是什么:' E5 A) {* d0 c
#include "stdio.h"
, {2 o7 i! U, b) v+ t$ P5 Pclass test: i/ ]2 x+ @8 ]8 e  g5 w( v7 B, _( z! N$ z
{
4 z) h  n- q# s; S5 C* vpublic:+ e( q$ @" Y3 \7 T
test(){}
" H0 _( X) n$ p' M& ?8 d8 S" W+ ovoid hello(){ printf("hello\n");}  ~4 X2 \: M# X: {, @" G
};0 f! l3 g' i% U* ~3 c
void main()2 b& {9 V6 o8 `9 {
{
8 {8 j9 f* C4 K& c4 C    test* p=new test();
8 @% \+ J! X2 D; ^7 T# @    p=NULL;
+ a" W+ c3 m( u/ i2 \0 `    p->hello();8 B0 _3 \8 Z1 f. H2 w
}  H# ?  a  z- L& v" ~3 U
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
8 x  Q. C# X* f/ N( K#include "stdio.h"8 l' p7 R" U& i8 M  w$ m+ i
class test
! N* ], i* J+ t9 n, g{! @0 v8 F) w* g6 M
private:
# U: b$ T3 d8 J# @5 n6 S, v- Rint i;% J$ U2 s( G9 f- ?$ A, p3 ]
public:$ _; |  y" E% N1 J
test(){i=1;}
9 H5 ~$ g2 `% b5 N! U8 M& Kvoid hello(){printf("%d\n",i);}
7 `1 O; x7 w! k& \2 s2 Z% ^};
- s8 U8 W% R9 X' c6 s; p( D  kvoid main()6 b9 }5 C" R) q5 E. \- w0 x
{* t4 P* h0 [# `7 z+ T8 Y
    test* p=new test();% \7 ?" u/ t6 O+ Y4 D9 G
p=NULL;
* A% U" U) }# Lp->hello();; \" L1 x7 P, J
}
: v3 |+ l* O5 p& `2 m: o如果将p=NULL注释掉就无误,就会输出1.
2 r" [' Z* f$ l7 v1 b! T; {. I注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
( U7 F8 o5 ]% M(1)C++的构造以及析构顺序8 T/ t0 t. E# a. t) w: A
#include <iostream>
" O+ [' ^; J3 C) x% \4 k4 t* Pusing namespace std;- i9 x: B. O" b+ `
class A
8 f3 o* l, s* ]- W4 `9 A' H8 P- Q{
) L1 h3 `' [6 c9 [# f& p& d  Qpublic:+ K* i1 b) }/ b+ Y7 x
A(){cout<<"A"<<endl;}0 U/ D8 t% v$ }  I' P) X
~A(){cout<<"~A"<<endl;}
" v, t9 N- U# U3 q% n};* M2 Q" K4 v/ ^* o; r& S# E3 _
class B : public A
' H" W$ u; B  _7 d{1 |6 o' C1 \/ K0 n6 V
public:( T* L8 r: ^7 L" a+ u6 b4 ~) g! ~
B(){cout<<"B"<<endl;}8 w4 Q5 S: E) l% o3 I: Y, |
virtual ~B(){cout<<"~B"<<endl;}/ c) [/ {: O" n% ~2 R
};
' g( ~7 T, w" q+ n. v! Mclass C : public B) J6 Q. O& L' i- ]. Z- E2 \
{! w7 \- v! h0 i  u2 W! c
public:
+ A* C1 R2 u7 Y/ `: yC(){cout<<"C"<<endl;}& ?' z4 W! r4 B# h
~C(){cout<<"~C"<<endl;}
: x8 g, o( H0 b) Q, y; f};
* I5 J- r3 Y9 I! e! _' W$ H/ q
7 p/ y  X9 p/ w9 Z& ~3 t" N9 |- ]1 Dvoid main()
0 k3 L1 Y$ _0 H5 t6 n) R( O{1 J2 q7 ^) p( N7 O
; f, x4 R$ m( }$ v
A *a=new A();! U7 ]) N" K# U! b$ F
B *b=new B();. i" L# O) x  T/ _
  C *c=new C();/ w' J9 _5 l% L3 P, |
A *d=new B();) Q/ e, B, ]; a4 R
A *e=new C();# j9 w0 ^! s! Z* E
B *f=new C();5 z1 ?2 @% I2 `; k3 O. A

) m: N4 P9 C8 t- J1 bdelete a; cout<<"---------------\n";7 W7 u' F2 H  [1 q$ Y
delete b;   cout<<"---------------\n";' {" |2 c& K* t2 C
delete c;   cout<<"---------------\n";
9 e- D# H% M8 e  [* F6 Edelete d;   cout<<"---------------\n";
) A' M( B6 A& q3 e  w( K: ?  ddelete e;   cout<<"---------------\n";8 g* v2 g+ ?3 d
delete f;   cout<<"---------------\n";; Y0 |$ z/ G* f# h% I
}# W# D5 h& ^" E( ~4 J6 ~
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
0 L4 Q2 g. R3 s7 O这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。9 A3 T3 R/ J. r
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)/ U/ I& c' ~4 w! C
(2)面试的诡异题目* N9 J8 k$ V  X  g" ^' \
大意就是如果你 test *p=new test[20];
8 A' w' X' b5 ^" k" t然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)& s  k- o! A6 V
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
: S& e& q% ^5 e# ]% X
* K3 [( v) v$ U1 P+ WZz
/ L9 W8 H# I" O6 d9 b: T% z爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html4 \( @' M% {4 W) ^) @2 d
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
5 C. D& y( |# Y  L爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
: N. s; \: t8 k6 r4 g) C: ^——
1 P! C1 Z5 y2 {8 z- B7 m& ~  ^百度2011年实习招聘专题$ L& |2 i  C3 s4 Q- X9 M( K& y
http://www.aftjob.com/portal.php?mod=topic&topicid=22
# E  ?5 H+ q: M. p$ ?  M5 f爱立信2011年实习招聘专题- _" B- ~6 b4 `$ n
http://www.aftjob.com/portal.php?mod=topic&topicid=23
+ R; ^* ^" W% \* e新浪微博2011年实习生招聘
. [% I8 B; \, t; bhttp://www.aftjob.com/portal.php?mod=topic&topicid=21' B  L4 t; }3 S
阿凡提招聘http://job.aftjob.com/job
1 O/ B* @8 L3 h9 w阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag- e: r! m& a0 J4 o
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum: g9 W  n- ]8 k) P* T2 g- A! ~
阿凡提职位搜索
* z- k: r& o. o——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-20 00:48

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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