找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1270|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
: p, o! V* w) x+ t
: t0 J6 T) r/ M) m& hZz
; J9 b/ L4 U' M7 l5 ?4 ?
- Q  I. L6 W2 }# K(1)下面程序运行结果是什么:* o6 K6 H$ F0 O6 D6 {& b
#include "stdio.h"
; Q, b5 m" Z; ]! H' [  iclass test+ s5 L; W% @" i' w
{
3 j1 }2 Q# G; d# s* {public:: u8 V! _$ T. U" k4 L+ b
test(){}! j' k7 h) D7 ?1 Z
void hello(){ printf("hello\n");}
* _/ w. Q4 `0 w) a};
& e+ Y9 y  R) e, T. z; ^void main()/ {# s* e1 k! F' q. a
{
9 S% w" _7 t3 I+ B( r( R* O    test* p=new test();
, J* I4 Q9 N  {$ F  k. ]) c' E8 l    p=NULL;
6 v5 H' r- \4 y. v    p->hello();3 d: A& M" X  b. s2 B) F" J
}/ Q* c1 }8 D, Z0 e+ _) V  g
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:' U# n2 [0 Q7 A) G. V. s( g: b
#include "stdio.h") S+ U, y4 v$ s+ [# ^# F2 N1 h
class test
- c4 c$ K2 ^2 x! G- x{
0 H1 T# t( F$ X. `: O; l; Uprivate:- z8 H# p" L* K1 k" M
int i;
4 ]/ B0 @! C, y% `3 u0 ^public:
5 f7 @5 g- o5 T/ |test(){i=1;}
% V0 }" I6 O+ hvoid hello(){printf("%d\n",i);}
& }2 B6 |" P9 `( X+ @: B+ C};
9 d, i* n% |. h+ }- ~, n' Hvoid main()9 E" k2 {) K  @1 J: U. N& x3 h
{
" O$ g# X/ S* \* K; N8 H    test* p=new test();( f/ \5 D4 X2 e7 V% y0 q
p=NULL;
& U8 ]1 E* r) e* J' N/ Up->hello();# m& x: O/ k$ t' u$ K0 A
}
# e% N) N6 H# _0 d8 p; @5 h如果将p=NULL注释掉就无误,就会输出1.
" [( L" |) J7 i注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。0 [' N, i1 M; i- @) m! w, y
(1)C++的构造以及析构顺序7 u1 @# N4 M+ _1 L- b
#include <iostream>" o/ v3 W6 h8 h9 G' y' W1 G( D
using namespace std;  i3 x( z" ^& Q; l* o. m5 l
class A5 _" G5 m0 F, A
{2 [4 ]# c9 P- ]/ ]8 @
public:
5 Y& _6 M# o1 M) RA(){cout<<"A"<<endl;}
! F, w( y2 l) b- A1 ]2 M. L7 ]' h. q~A(){cout<<"~A"<<endl;}; |$ W0 d& ^3 e8 T' Y6 t1 r4 f
};
& d( Z; }& o$ I+ Cclass B : public A
: ?6 y' i7 E" u5 W& S0 i. {! P{
; U* H' T" }3 c( Q* l1 {  o% W. L7 z3 {4 }public:
  _; N$ J2 a; G$ P3 PB(){cout<<"B"<<endl;}: Y5 l& Q5 y8 y4 |' d% l' q; {
virtual ~B(){cout<<"~B"<<endl;}
4 ]* h5 i- ]5 [  Y) T  k};+ J& r" I: W2 f' `! a, o% y
class C : public B5 \7 s( c) s) B
{
4 i; j$ V' \/ f9 k, y- C- M) x' v1 hpublic:( q3 X7 {/ E1 c- k6 v! p& R
C(){cout<<"C"<<endl;}
2 X' V  z% q# q2 V) k5 U# ]+ e~C(){cout<<"~C"<<endl;}
. k/ J* T0 B$ |, F' U  o8 w, G};
/ t+ Y+ ?7 g. I3 b/ D4 L2 a0 `
& Q4 h* f! ?% t$ k3 Avoid main()
7 j( r8 R' s  }$ l. Z{
0 N  h; z" ]8 M6 K) E" \
" z3 c+ q, v2 n$ s& I6 ?. B3 vA *a=new A();  @) B% j% N/ D
B *b=new B();6 m% e1 [$ y0 x  h
  C *c=new C();: Z  N; N. e( U" m) I/ d
A *d=new B();
# x& F9 N/ a4 J; Y9 oA *e=new C();1 a5 z9 ]$ W8 a% H2 ?5 H3 M. w: }
B *f=new C();8 ^" I4 V) Q' Q9 Y$ S+ E8 i
$ n5 A- r( }% b; ]1 o0 h, E
delete a; cout<<"---------------\n";4 Y, h* F, b8 v- n% P, Y, v6 O
delete b;   cout<<"---------------\n";, K' z4 A. z+ J! `" Y; W
delete c;   cout<<"---------------\n";- ^, Y( Z8 `& O# }6 ~
delete d;   cout<<"---------------\n";9 H6 \2 w+ x: f! p( s! A4 A
delete e;   cout<<"---------------\n";
* v4 o0 w: y2 {) j+ I$ A8 Pdelete f;   cout<<"---------------\n";- u$ X5 i. U) M0 j2 ?' w
}" Y7 V, Y3 y( q/ c7 e
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
( z8 g$ b$ f# Y- n0 b这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
$ m' j$ h; q2 ], O其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)3 {6 T# H5 o4 n. |+ B! w) `8 s
(2)面试的诡异题目
3 F' P8 v6 J, z* z' b大意就是如果你 test *p=new test[20];/ _* y0 u5 d9 m) H' u
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
" A8 S. J2 m, T: B) r6 s答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……# {6 L+ K" e, U2 m1 Z+ ]' Z

0 ^( f: d) t" x; K. aZz  T. O7 v0 h) f1 R3 c
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html" J' \- k, [* O3 V  G/ U+ M6 ^
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html- r. |3 t+ C( s! a4 r( V7 z1 b
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
6 x% d( C# t) i4 j* |/ s1 \6 i——
' J( r& o4 }. S! k5 r3 W) p百度2011年实习招聘专题' [/ l1 ?- v9 ~7 A/ z
http://www.aftjob.com/portal.php?mod=topic&topicid=222 R& @  F. G/ R2 S; E& L
爱立信2011年实习招聘专题
' Z5 ^" O' ~5 C& D& z4 fhttp://www.aftjob.com/portal.php?mod=topic&topicid=235 Q8 H" [: l+ s; U" v6 ?7 M
新浪微博2011年实习生招聘1 n- M* J% j8 Y
http://www.aftjob.com/portal.php?mod=topic&topicid=21; e% u' s/ q# u, {5 ]
阿凡提招聘http://job.aftjob.com/job
1 w3 x1 Z3 O+ K0 \9 W# O5 e阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag6 c4 I  d& R% }+ d# J! Y7 F6 o$ z
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
# M, ~0 O" S3 n8 o) I3 G) P! k阿凡提职位搜索
5 h- n4 [1 ~# l——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-5 00:19

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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