找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1241|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
; s( x* L, E+ \4 S  V
. O" b$ r3 q/ i5 y! zZz
. Q+ _) h7 N2 N0 c' m8 L. N# t; t+ n8 k7 Z
(1)下面程序运行结果是什么:
- a; u) j) U7 y' T. O#include "stdio.h"/ P3 h$ `) k5 a7 T' H6 `
class test6 z- a7 h" A' I& p6 I
{
% |2 |% H# i$ K6 |: Wpublic:
: m- F$ h! n8 O8 |1 h/ dtest(){}
3 f0 v' r8 K. X1 C! b- l5 B* f- Svoid hello(){ printf("hello\n");}. K3 [$ X2 T& l7 J: e) l
};7 s7 `/ B2 ]& f1 I, D, a9 k
void main()$ [# b. [! _4 b6 K+ T
{
- ]+ v7 l9 ?1 Q7 N+ r    test* p=new test();6 _/ |! f( K1 `  \3 ]+ O# x! p
    p=NULL;
2 E: v* `2 A! P3 S* T    p->hello();" x5 I8 i9 p1 R* g
}( d( \7 [4 w5 E% n
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:8 G: u3 B. {8 k( Q7 I: N" o
#include "stdio.h"
0 S1 p* F. g  x! V7 j5 }) {class test" o( V& I4 z+ d, F# @4 q7 R+ a" ^
{9 O! y5 d7 \  Q* }  i; k; i% u
private:+ ~* h9 ?. C$ N8 L3 {
int i;
5 P6 u) \  U1 _5 \( K4 [public:
! O7 b3 z2 b" w: \% wtest(){i=1;}$ c; I7 [! \1 s  R
void hello(){printf("%d\n",i);}/ t( \' T! u# ?; l# L& c
};
. e% S& r% L9 \. z# I: i8 w$ Y+ P8 n; Svoid main()  z& z2 c2 Q* ?1 q* Y% W6 G" K
{4 w3 M1 @6 {8 P) H( R7 N
    test* p=new test();% E/ B4 v* y' S$ S
p=NULL;
" N0 G$ o) b1 Lp->hello();
/ u2 f) [/ i7 [0 ?}+ R! b+ B  \9 Y$ J
如果将p=NULL注释掉就无误,就会输出1.
* e( V7 h4 _! {( I, q. I注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
# X* ?1 v' Y" L$ O4 m" X* o(1)C++的构造以及析构顺序1 b8 j6 l5 e& G+ c
#include <iostream>. M0 m, M  g: ]
using namespace std;4 N/ o( b4 T! x
class A
- ^3 t' l  p% G( _{
# L  k/ I1 _2 E0 ~1 s) [2 _3 E- \public:
5 Z; ^; _3 n8 c6 `$ d1 F9 P0 b4 RA(){cout<<"A"<<endl;}$ c; l) u  ^" O9 F
~A(){cout<<"~A"<<endl;}8 h2 B( e+ u$ o0 ^' n
};
# ~1 n+ O$ O2 ^# g9 L$ |class B : public A
6 a. m/ s4 \/ W. v! V& L, \* t  w( S; q{( t  \$ k& S  X& @5 V. `4 k
public:6 Y" `/ [  H2 }9 u7 `! y
B(){cout<<"B"<<endl;}
( B# g  }3 c1 _; \virtual ~B(){cout<<"~B"<<endl;}
) w( J9 m+ ^8 {1 I};
- O/ A3 K8 ^% ]7 fclass C : public B
7 q' x. Q# d7 _{: v! F* r0 @. t6 R
public:
" ~; l( E7 Z9 t* zC(){cout<<"C"<<endl;}
% n- G: _) v6 n, t" B/ b, z- q~C(){cout<<"~C"<<endl;}
5 {7 o2 W" u9 a) M- }% p7 y};% n) x0 e* R5 s" [' `; H/ B
# S7 d1 c/ b7 o/ a1 a+ i) X( e
void main()
1 h9 r1 T7 D2 L- c& a; L3 b{5 }3 M. c5 ]5 J$ _2 J6 I
0 i" u0 q1 L# Y' u( j9 G2 a
A *a=new A();2 o; E2 @: ]1 g. {
B *b=new B();
1 I5 @) R9 ]. Z7 ^# F  C *c=new C();4 S- n% B+ _: O0 h7 v: ?
A *d=new B();' d& s' _% A& L! r6 a8 c$ U& W/ A
A *e=new C();) w* ^/ J$ P& D- |% c0 l
B *f=new C();' B+ ~! J1 b1 u6 k1 C1 d* M4 D  w
8 S# X: e4 n3 c; d4 M% w3 N
delete a; cout<<"---------------\n";
' p/ M, Z9 y8 g( B, p- X0 \delete b;   cout<<"---------------\n";' _& F, X0 [) g
delete c;   cout<<"---------------\n";3 a+ W6 X, M4 E/ b% T# L
delete d;   cout<<"---------------\n";2 n% E/ y4 {! f4 u9 {$ K
delete e;   cout<<"---------------\n";
7 c7 l2 U; ~) K" }# o% Kdelete f;   cout<<"---------------\n";
9 s% b$ N' F( B5 o0 V' ~}0 W( P% {5 v5 l# z" [' a' ?' u
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
/ g! N: ?. z# H( Q% t这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。5 ]: _: a% L8 ?- v0 C' G
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
2 z# a3 m! i$ x' O# n( j2 I( O7 M(2)面试的诡异题目
9 b; u( C8 k- t大意就是如果你 test *p=new test[20];
% l+ s- \+ R9 M1 m. u然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
% m' f3 M& J) l7 w答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……7 Z4 _8 Z4 x- }0 n9 r3 v7 N# g

. z! {: ?& P* h3 {. H' }. QZz
- C: i0 e6 {+ q' h爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
. @$ v6 c) p; {7 F7 B4 w, w( x0 @上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html" i# w: h: I3 k: H
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
( T) e5 R# M9 z! O( p1 \4 i——, f" F/ s$ g& c8 N( O5 }
百度2011年实习招聘专题$ P" [1 t/ V9 g
http://www.aftjob.com/portal.php?mod=topic&topicid=22! C% k5 [- n1 f  ~: p# k
爱立信2011年实习招聘专题
/ l) Q) w. Z% S1 fhttp://www.aftjob.com/portal.php?mod=topic&topicid=238 i; ?) K: R$ \% y; _
新浪微博2011年实习生招聘" p3 m- Y- q9 r% Z: z' h  K1 W
http://www.aftjob.com/portal.php?mod=topic&topicid=218 T. ~( ^+ c$ b: w& I* t
阿凡提招聘http://job.aftjob.com/job
1 [* N  k3 G; e1 s1 B2 s+ `阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag" a' h4 X2 }2 F& W% i* z
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
4 F2 W# t8 T+ z9 z- L阿凡提职位搜索2 G5 }/ x$ a/ i+ C. V- c
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-21 09:37

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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