找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1129|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题7 h4 A6 v( w, @7 v2 l( k( }

  m% Z) ^" Y! n6 E4 d7 bZz0 Z( D' y/ g0 h0 e1 Y7 Y% a2 o

6 D* Q* {$ i% R! Q/ ](1)下面程序运行结果是什么:$ v- C' v5 y* K4 D9 R
#include "stdio.h"
" @* \( a5 W# G" E. |0 \class test3 H& ^9 I' ^/ Y% h* v
{& u' A/ Z9 B  j+ e2 s9 j
public:
, K& c$ `$ V; u3 n# ~. _/ I# Ztest(){}3 c+ P/ G# K% r1 K
void hello(){ printf("hello\n");}
, B* ?* D5 K; `; c8 E) [, y) `7 k# i};- m8 S2 J3 Q& d5 p7 s
void main()
/ f" e" b  l7 o& T7 G' Z, g{3 G& o9 A0 E& E4 H1 X8 d6 i# u
    test* p=new test();+ A0 _% J& Z9 H( l# V( {9 m
    p=NULL;  J5 Q3 h/ y/ G
    p->hello();; y2 T$ h4 G  r4 s" `! Q
}
3 ], R$ a/ Z/ [% g$ ]2 A. D/ i7 q事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
) m$ B) E1 x9 R- d#include "stdio.h") R: @( a) U  j" A8 L3 F
class test9 ~" h, T1 l. }, B0 D
{
' O! r2 d8 j, S0 Qprivate:
+ n3 d! S& N' cint i;
7 K, x6 y: F7 w' \5 v- Opublic:
5 t8 m; K! F0 G" vtest(){i=1;}; V3 Z: E( p' W% U% S
void hello(){printf("%d\n",i);}/ f0 g/ m1 q) I3 o
};) {! c) Z! G1 E/ U
void main()8 H% F- p8 D: [2 r7 _6 N! F: M1 m& v
{
% ?3 U5 h( j; B/ ~9 c7 E1 V( b    test* p=new test();" K; N5 v* D4 f7 k% ~* b1 c6 T
p=NULL;  I: Z! N; f) K  |, O5 N8 }
p->hello();
, t0 e. ?7 f1 W6 P: l' H6 X$ q}
! p' q3 m! Q2 t4 O3 K# y8 M8 L1 I如果将p=NULL注释掉就无误,就会输出1.
* X0 B" j' u& U* s4 ~: y注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
5 s! }# t  o8 P  b, K5 v. n(1)C++的构造以及析构顺序, w5 p0 u9 W3 j8 t
#include <iostream>
8 {' G# s1 f) P& a( u& y3 Nusing namespace std;# q' S2 _+ T% j) ^1 s
class A
- f9 Z! [% g. E9 _4 M! p{
3 Q  O9 z& L( q. Ipublic:  \8 e7 V- E" _/ i8 U0 J
A(){cout<<"A"<<endl;}
- k& y. G! W7 y: W~A(){cout<<"~A"<<endl;}
3 x/ `+ F7 \, ^& n0 a: w};/ r: m8 E  ]' P1 `  F- J: f/ B
class B : public A% D4 X) l  t! ^1 Y/ K7 B# P* i
{. p9 o3 D2 R, e( B1 K6 o( _/ f
public:4 R2 [/ `5 y+ {5 T. B$ `
B(){cout<<"B"<<endl;}) D; V. Q" U" |. x, E% ~: p% \& p8 v
virtual ~B(){cout<<"~B"<<endl;}2 P; M1 o3 u" H; b* f
};
2 _2 t  \5 q$ _/ R4 Hclass C : public B
# h7 U& U; k/ B' u{3 [+ N" p) [! q# g3 }& S5 `, U
public:! T6 n: a/ [9 M; n! ]1 ]6 C. w
C(){cout<<"C"<<endl;}+ F7 {$ {, o% a  }
~C(){cout<<"~C"<<endl;}
  h  t( d) q( L};
& [3 f4 d7 [3 ]7 m2 ]% N
& P$ E4 p6 a5 x' N' e% Uvoid main()+ D3 V+ I4 Z9 |* v8 \
{9 V* N& u8 [. U* `$ i

# s6 R" X( x( a0 b  F) EA *a=new A();0 S2 ]! f0 r* l/ W1 u' u
B *b=new B();* f) B( @& H$ l3 b
  C *c=new C();! o+ r( c* R; `; Z& Q1 C6 A# d# B  Z- j8 ?0 _
A *d=new B();/ B3 F  O- ^/ ]) C: s* A
A *e=new C();
+ O- M4 J6 M& a) B, E' HB *f=new C();
: L  w. Y* g" w$ d- V* S: j% y# _6 x9 m6 H* u
delete a; cout<<"---------------\n";
( }( O7 f) w2 u" Odelete b;   cout<<"---------------\n";
, Z: N% C- B' v1 m. a$ udelete c;   cout<<"---------------\n";( |* J  T) w8 D
delete d;   cout<<"---------------\n";  o4 X: A+ _0 C& Q4 |
delete e;   cout<<"---------------\n";
1 M! I6 V0 g% U  S# ^delete f;   cout<<"---------------\n";7 V4 Y& t8 Q, E- O; P! x; b
}
) f4 i" ]2 w# U2 I: D这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
/ H, i( F! a: t3 ]这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
! j8 H$ d( q7 L3 L7 |/ x+ S6 w& f其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
+ b! W) `% S! @(2)面试的诡异题目
  y% S* p, L5 q: R4 r大意就是如果你 test *p=new test[20];
# Q* M2 u+ D% Q  F( Y5 S然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
0 A& f3 b& R0 u$ ?6 j; W答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……4 ?; R  C7 c: R/ q

8 T& h- ~: e$ _5 qZz$ m( i/ S! F2 \: R3 B: N4 P
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
7 ~2 t' V+ ^4 v& m上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
& |0 {9 r5 Z: c9 W- p3 i爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
9 d# v  w. ?. d2 S! o——
8 \) ?) w+ q! U4 ?7 f百度2011年实习招聘专题
) }3 W% B# o- k# A: fhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
. C/ h1 t6 j' \& j1 g爱立信2011年实习招聘专题
! p) k5 B$ [/ m7 {8 C2 S9 dhttp://www.aftjob.com/portal.php?mod=topic&topicid=23$ x; D, p: Y9 J1 F
新浪微博2011年实习生招聘
: o+ d  J( a  j0 g3 F8 ^2 p2 s0 A0 ^% dhttp://www.aftjob.com/portal.php?mod=topic&topicid=21! D1 x, U2 [# W2 M. p/ T: y$ q
阿凡提招聘http://job.aftjob.com/job# p# Q( G3 G! Z, Q
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
& w% x# o2 w2 |阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum6 K: Y5 X) B. O$ ]" h
阿凡提职位搜索! F8 c: g9 _2 A8 x
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-15 23:06

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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