找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1264|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
* w5 O  i$ B! V3 U
. `3 c5 f5 k) X3 I& m0 `- OZz* F* E' G. a. ~' Y: M. k9 @) i
8 J$ `+ F  r( n8 Q
(1)下面程序运行结果是什么:
" H$ ^7 o8 v  ]  R, I) O#include "stdio.h"2 N2 r2 q6 r. a9 k) H( U/ X; S
class test
9 ^6 K$ I9 \- e8 U3 {{) R9 @6 P, P& b9 W; U7 x1 G; K
public:
8 M$ U1 b+ O3 l1 {7 a, ytest(){}
1 m* n/ z7 r! E$ M% x4 Zvoid hello(){ printf("hello\n");}
: X& x# ~* C" k. q! E" R};
2 w! [$ _8 Z5 j5 l; d7 ]void main()
0 a. c9 l  U6 n* X6 m; _/ B{$ Q% O8 I! ]3 V: E/ ?  W, D$ o
    test* p=new test();
& _" d3 q- x- |  J4 G    p=NULL;
& @7 s8 E; g; I* Q    p->hello();
" w# f5 L8 c* l; R; Z) E( i0 c}2 ~# N6 c: A( m7 F3 g( x& \& S- b, H
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
2 H. M9 `9 V+ \#include "stdio.h"
' z( @$ I) s- T& R! `class test
, c( U2 t7 `2 W% A{
3 i5 ~2 G8 U4 s2 W9 g$ Eprivate:
  |3 L. Y5 k/ Q8 a1 ^9 T& i+ wint i;) j. u( K# ]/ j! G2 H4 e. Y  J. J4 i
public:
  s. N% U0 }: R0 T* ?3 {test(){i=1;}- y3 T3 D3 y3 ]9 |" m* }1 U. G
void hello(){printf("%d\n",i);}
$ l3 ~/ b/ C9 B$ ^* O  Y};
2 l" I( J. }% b4 J  y* Xvoid main(); b$ w- B6 b- W5 C' P- K
{/ Y' J7 [( {* i; Y5 }1 h% B
    test* p=new test();
6 {9 a4 t  z5 A6 G2 o; M! F4 U* Ip=NULL;
" t. G3 e8 `0 Ep->hello();& x5 u; v! S4 A) W6 e8 d& \
}7 z" P# d: F: i5 d
如果将p=NULL注释掉就无误,就会输出1.
4 G9 |; m6 n: k, L8 E) `注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
; }; v1 [8 K- Y  }% h(1)C++的构造以及析构顺序
- t4 t4 s9 ^( S( u( k  W$ t; Q) z& A#include <iostream>
1 H, w6 W' [2 _; Q5 z0 U8 _using namespace std;
3 R% D! P( A! U; h: L5 {- y( Vclass A
* M/ A: `+ I/ ]7 z0 n7 G! k! j{
! X; Y6 I* H0 ~% z$ F! m6 tpublic:5 e. {( J' o4 t2 i( l/ C4 i
A(){cout<<"A"<<endl;}& w0 D$ z! }- S, |/ r( C$ P- e
~A(){cout<<"~A"<<endl;}. u3 G% Y  e: R0 \/ P2 y0 |
};
4 y: n+ G9 l* @% m6 h* v+ X( ]class B : public A1 [0 R0 A. a5 |; l
{  _7 y) q6 f( V9 n$ X! K2 B/ ~
public:
" I, `. j. O9 X% H% FB(){cout<<"B"<<endl;}
# g! h3 [& Y# o  a5 wvirtual ~B(){cout<<"~B"<<endl;}
( [" W7 Y' _+ l$ k/ J8 o8 g};2 e! O% ^; a* l1 E8 p4 y! f
class C : public B
, ~. f& p1 J) y0 f' q{' H5 e0 d- l0 Z& f
public:
* W+ b* @) E5 G9 |( ^C(){cout<<"C"<<endl;}
# p" J. C. ]. s; r~C(){cout<<"~C"<<endl;}5 ~) b8 a/ [2 S! b* t9 _& v% I
};- x' q1 s) D4 F* M) f

# M9 }) p' F) l* Qvoid main()3 e1 V2 W) K! a# U# P5 L
{' |0 s. `3 F8 b2 z

0 ?- b, W2 u! _* MA *a=new A();
( X/ ^4 }  ^2 {. m. m. K; |/ VB *b=new B();3 d( w4 g  P( i/ w& N
  C *c=new C();2 R  R9 ~+ J5 B# o
A *d=new B();' @& W* ]: }4 K; ~
A *e=new C();
' N; N! x% C* N! N( DB *f=new C();
1 C8 y' f* Y* C/ V& q; L
% _4 R) C. y$ K+ Qdelete a; cout<<"---------------\n";
! W2 B# b$ s  X2 f0 Hdelete b;   cout<<"---------------\n";! F9 Q5 ~& B$ c, h% w7 t8 v. z/ j
delete c;   cout<<"---------------\n";
. g- j9 R1 u& {& xdelete d;   cout<<"---------------\n";1 D  s  Z, d7 \4 k
delete e;   cout<<"---------------\n";" a: ~" S/ w  B9 J
delete f;   cout<<"---------------\n";) b1 X/ f2 m/ h9 w3 M  |% l! N
}" c" d  H9 A. Y, n/ N. ~
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
/ K9 l1 L- ], y; |1 ~: i6 ^' b这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
( v* g) X" x! ?1 \, L7 l$ F其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)' K* I( N: V, H
(2)面试的诡异题目0 S) @  O4 a: F6 C" b
大意就是如果你 test *p=new test[20];; n" b9 K' z( A1 p  P4 U1 v
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)( O' i: p5 u) ]. w
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
# e( c4 W  H4 s+ g9 n5 Q9 P1 [3 _
2 h" c2 N. p0 y1 }* kZz
; Q4 [. P1 i$ j0 j1 p# {爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html3 o% v* W0 o- W( ]) m) [
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
; s9 L; y: P. q6 {, ~% s& W爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
/ L$ L% w! x/ H0 ]; K8 I. Y——) U3 n( d. n# {, S$ g# X- X- h% l
百度2011年实习招聘专题
/ a& T4 m7 e0 ahttp://www.aftjob.com/portal.php?mod=topic&topicid=22
/ [, N) M. d% f爱立信2011年实习招聘专题
7 X* L; {) S+ i% L7 @8 [http://www.aftjob.com/portal.php?mod=topic&topicid=23& _" w, D7 |6 g# e( j& t1 L9 ]
新浪微博2011年实习生招聘1 b. f5 P# n" T' a2 z9 O
http://www.aftjob.com/portal.php?mod=topic&topicid=21
$ V( E) c( F1 e3 ?$ D- c2 a阿凡提招聘http://job.aftjob.com/job; @5 n1 `; p% k2 \# `9 T/ a
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
: k) G( u/ f+ o( L& V2 x阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum3 Q7 `6 v( \' d% g5 O9 Q! T
阿凡提职位搜索( a6 `0 s: v# p. N7 y! A9 X6 Z' x
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-2 05:05

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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