找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1189|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
- d0 f( b% {: m0 i8 y/ G& a/ r4 W; ^9 v. i8 Q/ K+ M) k  Y
Zz
; H* x) N- ^3 A' B1 L" i8 c& K/ ?/ ]- {2 W5 t% ~5 T+ k
(1)下面程序运行结果是什么:
- S* l! n# j' L! `#include "stdio.h"8 y$ d* n0 k3 F; r, R, D% B
class test6 }$ s- w3 H( v4 A6 r
{
, ]" v' z1 P! z, `public:1 O2 D& h' s( ?3 }; ?" V' `
test(){}: P8 p1 B+ a$ `, }9 p$ X/ \
void hello(){ printf("hello\n");}1 b& R) w* ?' J( D$ F0 M+ R
};
1 ]! u* ~! T+ i, \void main()$ `$ M$ V' e6 X+ r. S5 i6 X
{
* u" D. Z' r$ T4 ~. J$ C% ^! Y# S    test* p=new test();
0 R- {% Y- ]( G9 Y' W    p=NULL;0 s/ e% o3 h4 C
    p->hello();
5 P& a. H- D; i9 q}
9 O( l9 q# T; n& @' }事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:) R* {3 ~4 _/ O% X
#include "stdio.h"
( J! o8 F- t/ mclass test
  |9 @( {6 P$ B' D$ [- o* d{
% v4 f* X, m1 n- S8 Nprivate:
- y7 q- Q: G2 ^5 z5 e4 Q2 xint i;: Z) B4 H- f* B' ?
public:6 ?: S$ ~3 {* n/ j) }
test(){i=1;}/ i9 p; M+ k7 @: s* [
void hello(){printf("%d\n",i);}* ?, O6 n6 T) p  k
};
: ]! ^% H2 K7 B6 M! ovoid main()
7 E  F; _5 N( H: r! [* X{
2 O; Q. ]; o9 @9 U! Q    test* p=new test();& i" h. i& k$ w( X
p=NULL;0 }, K& G& h# h  {  f' f
p->hello();" z6 a, U' f$ P# S6 j
}
' `8 s$ X) r( h. B( y' G9 C如果将p=NULL注释掉就无误,就会输出1.
0 i3 t$ d& {0 a% q注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
) Z3 A' [: n! n2 F(1)C++的构造以及析构顺序
5 l# ?! ~% ]! Q* ]3 o) @( Y#include <iostream>' F: y( d8 }' m
using namespace std;. F/ u' b0 G8 D, t
class A+ _8 H$ X% [4 g# R6 F
{9 B8 [# j( {. W  ]% Z! g
public:
( q+ {( o7 E) {# X9 w( f3 ZA(){cout<<"A"<<endl;}7 I+ T1 p6 T& b( f
~A(){cout<<"~A"<<endl;}8 V+ ]7 T  A3 p2 I4 n1 `: x! Q
};
( J7 F! W  I* v2 m; ^! _! g, z5 bclass B : public A
  L8 d3 U  s& ~. }{) K: N- j0 p& }- w6 S3 q
public:/ k. R0 q0 D( I& j# t" @0 [
B(){cout<<"B"<<endl;}8 j5 D! m9 O  t) c$ S9 u4 R- w+ R! n. B$ v
virtual ~B(){cout<<"~B"<<endl;}: l( o, G0 u# z$ ~5 \& q% g: ?
};/ Z) }% O1 `  e! p$ a4 ]$ C! e
class C : public B
3 a2 Z6 O3 ~% ~2 Q% x2 w$ d! h9 N{
3 K7 s, ~3 Z" t. [' e* |public:7 N8 |6 a- z2 ^! C/ [3 H9 L0 g
C(){cout<<"C"<<endl;}$ ]$ G7 T9 m. ^! H% C7 \6 M6 B& E
~C(){cout<<"~C"<<endl;}  S+ e. c7 A+ y9 g
};
7 B; Y, T3 a$ w( ?3 q& Q7 |$ c$ U5 J+ M  O. [/ Z
void main()) i! s% i' Z) e  {% x/ e
{$ l5 M% [# ^: R' I* Q, C4 R

/ K% V4 ^3 k7 R* xA *a=new A();
8 s( C- G9 p2 n% ?B *b=new B();+ Q! ?: T' r" C( E  z9 i4 ]/ b
  C *c=new C();
4 p- z3 G1 n/ t5 o7 |# `- cA *d=new B();
1 U( l! k* W% R* dA *e=new C();, }1 F" |' K6 T# N+ [
B *f=new C();
1 f/ N* p# ]1 M# ?* |
, e. l) N! D9 @- i# n) m' j1 W' cdelete a; cout<<"---------------\n";
7 L$ v2 s# c. l! ~, M% Bdelete b;   cout<<"---------------\n";! t; C3 y3 k# K2 L2 T  v
delete c;   cout<<"---------------\n";
" J" I: a* E3 H* [: @delete d;   cout<<"---------------\n";
+ n* P- o1 T0 C3 C3 Qdelete e;   cout<<"---------------\n";
9 X1 `% W" ~5 K+ }! b  T, i, xdelete f;   cout<<"---------------\n";: z2 V: w. T5 C8 j1 e
}! ~% O" |; w. @
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
8 W- R/ ?- O4 \" Q0 F: J这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
, d8 E) F1 H' Z( e% E) J其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)3 F- t' p% W3 p
(2)面试的诡异题目
! r& J# H: c: j# x7 b# {大意就是如果你 test *p=new test[20];# S- }, @* t, w3 v: D! K8 M
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)% `$ J4 e8 m5 i4 O' l5 K
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
4 }9 M+ ?) G2 O3 Y$ h; g! H9 }7 }/ d; K$ E
Zz
% X9 m3 D* b* t  L7 P爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
- u/ O3 l9 j# D! Q上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html7 I$ a9 _) x. g6 c( _' N+ S2 }
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html/ ~% b1 a1 ^9 R' n- t
——
% w) r# P, w' o" W- K百度2011年实习招聘专题; w0 A+ a7 S. G( f+ l) B/ _+ x
http://www.aftjob.com/portal.php?mod=topic&topicid=226 _! I  J% T3 r
爱立信2011年实习招聘专题# v$ N5 P( }" Q. W3 U9 U3 a
http://www.aftjob.com/portal.php?mod=topic&topicid=23' u' i; Z. s5 ^4 |5 p8 G6 _5 M6 b5 {
新浪微博2011年实习生招聘( P& j. @3 T, e
http://www.aftjob.com/portal.php?mod=topic&topicid=21
* t1 @# v7 m! ~; `6 K8 L阿凡提招聘http://job.aftjob.com/job0 X- u2 t% v+ h+ u9 U2 D- X
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
/ z% [" q' a4 Q6 A* S5 R阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
# a7 O  A1 C* m% K* W阿凡提职位搜索
* @! A  A$ I6 ]——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-5-2 07:34

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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