找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1258|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
; z' }0 w0 h4 H+ D8 i) z5 f0 H/ V7 W; ~6 U7 w# e: b" o$ a
Zz
) [1 l: k" F, w% G" J: S! O3 K2 f) N0 f
(1)下面程序运行结果是什么:7 w7 s) M0 ?" p6 S
#include "stdio.h"/ w9 `( Z" v8 L- `4 A2 v
class test
8 R. A. @  }' \& `+ n5 j6 A7 Y5 E{& j9 Q- t6 ~/ v2 Q4 {# m
public:- U2 r/ A$ S3 B7 a3 F% f! `& v
test(){}
: h7 X; U6 ]2 k: o: m) }  A1 _  Ivoid hello(){ printf("hello\n");}. n# {. p( P& v, m5 x1 \
};
# e6 y/ l& {2 \! p3 [& l, Uvoid main()+ A8 j, U0 H. I1 l/ E( ^4 s
{
6 K2 \9 [# W0 i' b) v- ^3 Q    test* p=new test();! X  v8 W7 }7 B
    p=NULL;: D; _1 F/ A: w& }- f( ^
    p->hello();4 n0 `- [' W/ ^, m% G
}( h( }- b0 t. v6 ^3 ?
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
0 s; y) p# ]" J. F3 \; z: u#include "stdio.h"
; a4 m, c- }# V' G' D# E6 dclass test3 }$ M  C5 h: ~% U6 \# R
{! P- @7 J" |0 \. ?% \6 _' J0 A
private:
4 i" N/ g% b$ I, m" y% r7 X* Pint i;
9 a/ S- D/ R2 G9 vpublic:- s9 X6 i. {! V/ z$ J# {
test(){i=1;}
5 X: K% R) P. v2 \void hello(){printf("%d\n",i);}
- s; ~3 _( B( `. K5 V6 d};# S) p" x5 k- G( B( V
void main()
3 F9 k" d; i; `  k{
& @1 w( c- _* Z9 i3 _& j, P& B    test* p=new test();
# q" _* f# G/ ^0 L- z7 N$ `p=NULL;
1 Y! S9 `# n: U* G; lp->hello();
: ]3 j& j! R" w) A}" _$ P# u5 Q, I9 m  c
如果将p=NULL注释掉就无误,就会输出1.
) R7 }2 r: I) {! x0 B4 t) W6 G注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
. j* ?4 p' B( ]: T# A3 B+ {(1)C++的构造以及析构顺序
" Y; x0 r' w3 u0 i#include <iostream>
% C9 I* x& F9 F3 y8 ausing namespace std;# A) M! M* T) @  @
class A
- c) X4 _" {, {/ d: b5 Q. X9 j{' D# u& B- z0 e  `  G
public:
/ g& }  R1 {! ], i, vA(){cout<<"A"<<endl;}
7 x/ _2 N- x: H. y$ t3 ?. E  c4 e2 g7 w~A(){cout<<"~A"<<endl;}
) Y. A% [; ~9 p4 h+ H};
" X  b( C6 d0 Y6 C" R3 C: eclass B : public A
2 r/ x  x8 Y, ^4 J, R{
! ]' c) ^4 t9 p8 y; _  h2 R, @public:" A" E  h. t- f2 j- L
B(){cout<<"B"<<endl;}4 o/ |8 Q1 |- T* @' S: @, h
virtual ~B(){cout<<"~B"<<endl;}4 w6 ?5 x- t* H. m3 n$ y; }* U
};
& s- c' @; t. \/ d- W3 \  T: O' aclass C : public B- S  t- @4 w0 F% d
{
& r/ m/ y" _+ S4 {public:
! K9 x. J1 d% o1 r7 CC(){cout<<"C"<<endl;}" i1 [& ^& C" H7 p& f2 |. J
~C(){cout<<"~C"<<endl;}8 T4 s$ d! u! F% x
};
  I) Z- ?. z7 C. }7 S* G& U! X. d0 D; [
void main()
: b, z; ]7 h( ~. n{+ K6 Y7 V3 B" J% B: q4 d

( D/ H7 m( @( P4 yA *a=new A();+ b* s/ e4 Q1 j1 t: u
B *b=new B();
& t$ W3 R, ^4 ^% j# R* j  C *c=new C();
+ t0 i- r- H$ \0 `6 r) U$ x4 F3 A& z- IA *d=new B();. }9 y* u( R# ~, ?( @5 g8 G
A *e=new C();
  P3 M4 t0 ~9 l' `8 GB *f=new C();& h0 }. s7 ~: k9 m" \
# p) @& W5 C3 p. e1 }
delete a; cout<<"---------------\n";, M9 x: e8 e# s* p# x, {% _* L
delete b;   cout<<"---------------\n";. s9 J7 b- L  V0 C
delete c;   cout<<"---------------\n";
+ m! d& h# D# l( a- t. |) Xdelete d;   cout<<"---------------\n";
; P" z4 {1 t( z) i9 i6 I9 J2 adelete e;   cout<<"---------------\n";
* b! I( Q2 G0 z% T( _' Z  p/ L8 edelete f;   cout<<"---------------\n";
& h$ u" \% g" e7 e}' y& U) j8 ?: E7 P6 _
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
' t, o9 L+ E* W1 L7 L% C4 Z这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
7 W4 f3 ?! C7 \2 ]5 X其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)3 }6 z/ H" x: s, V  b& T
(2)面试的诡异题目
" Q2 Y/ i- U+ U8 L- V$ q大意就是如果你 test *p=new test[20];
8 c  o; `& d* ^6 I$ m& K: {然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)4 A, M6 f( R3 i  y9 f
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……7 E( X' }7 ^, |% o/ s4 S: T

0 A& _* @5 Z- ^! E0 h3 Y  a$ EZz
' \2 S+ ?0 H7 ^  N) h+ j# ?8 m爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
: l- x7 v6 T, N# x上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* I/ ]& l( k3 B6 }
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
, w; \& v/ P# N/ M; v- @——
0 b+ m2 {: u1 h百度2011年实习招聘专题
6 c1 V4 S, |0 Z& Uhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
" a. L- W) X+ @0 J7 P' J2 O爱立信2011年实习招聘专题
' s/ V7 b! r, c! w  T! [0 J; R7 vhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
" A5 T/ j4 g2 K. T新浪微博2011年实习生招聘0 Y. |2 n' u7 i4 A4 Q
http://www.aftjob.com/portal.php?mod=topic&topicid=21% t' N9 d: w* M, H9 e$ ~
阿凡提招聘http://job.aftjob.com/job
& Z/ T0 c. O9 p8 I  J阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag8 _- w# h: _# B# Z7 o% f" I5 }# {
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
, J2 [( m7 i+ x& G: V) ?阿凡提职位搜索/ N6 N& I: ]. [2 ^
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-29 00:32

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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