找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1124|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
- c+ R" n6 o7 W$ \- q8 s9 `
( u: J* f& X* s3 JZz# t- m9 ?& J! T9 k) p, r3 _
4 D" e' ]0 l' u& c9 P* p# E: f
(1)下面程序运行结果是什么:* l& Q* ?& k( @: X3 o7 V4 i5 P% w* |
#include "stdio.h"$ n) e* b; H5 `' y6 c+ k, J
class test0 r+ X- S$ _7 Q
{
  R8 `0 \9 j9 F1 w( ?+ rpublic:. c6 K. p$ U6 E* R0 o+ T, |
test(){}/ S2 q6 }$ }6 l! g7 l% H
void hello(){ printf("hello\n");}7 D6 d1 b; c8 |5 [6 n1 w
};
" R' p0 R4 ]) ^( f, }: Cvoid main()' d, X1 I0 O  `" u9 T3 w
{
8 y. a. Z8 C0 k* S    test* p=new test();5 `/ k! u- z: o, H5 [. h
    p=NULL;, L, }  J3 H2 e9 w' d% \
    p->hello();
" `1 U, t/ ?9 C" v/ Y}
' H: G/ g0 Z9 S- O8 P& @事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:% I9 n* j1 @& r) t" p
#include "stdio.h"* t1 w1 ^- F0 x1 ?4 q# s' `% [# n
class test  P. F* d. l  ?8 w8 o, [* v
{
: w9 \3 m; `- G# Oprivate:
& ]. Z2 w" ^9 T# Sint i;* @. B; i+ w, }4 S& H
public:
1 H6 X: {2 \" Ztest(){i=1;}( T  I2 e# ?7 q" y
void hello(){printf("%d\n",i);}
: X  K, S+ n% \3 j! z; _};
! \9 ], f( E- ]- t- \void main()
% a, N9 V0 s- k: q$ q{: T/ j8 _- E9 Y
    test* p=new test();9 E% B4 {- K1 @; b
p=NULL;+ P1 v+ N4 |+ A( [3 ?  `
p->hello();
# I+ d. O$ ?5 h! f* Q9 Z}
% M  b) w  {0 y' w  N' C如果将p=NULL注释掉就无误,就会输出1.- S& m% R+ x; C: ~  y& D, v/ R
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。, ?( `1 m5 Z; a" \' q
(1)C++的构造以及析构顺序% L# E: ~+ ?& m0 {/ f: }  a
#include <iostream>* C  z6 \3 H; U$ A. {, X
using namespace std;
6 b! }! p+ ~0 K7 g" j5 U; oclass A! g) F8 p8 H# l2 b8 z( T
{5 J- Y" t8 ?2 N- s; s
public:
: N& V! L7 H0 R1 HA(){cout<<"A"<<endl;}; R) j8 S( g  ^# J2 K: e+ q% p4 X
~A(){cout<<"~A"<<endl;}. Q9 O! S; O1 q0 ?
};* p1 J- ?4 j2 \
class B : public A4 J, u( W9 K3 R
{
! q+ I; G6 M; _- Q- j4 k6 v: apublic:
; p9 H+ z  S" i! `5 Z2 OB(){cout<<"B"<<endl;}
- J: e7 ?- a3 L9 x- w. d  Avirtual ~B(){cout<<"~B"<<endl;}% t/ h8 P2 R& {
};: Z5 r! \- C9 D6 R% ~- d
class C : public B: A* d& _3 c5 C& \# L  P0 d
{
/ s1 N( E: {7 e- U1 ~: P' Spublic:+ M8 {/ H/ K: e
C(){cout<<"C"<<endl;}
2 Y1 v  {) n. B3 Q! E% N& `' ]~C(){cout<<"~C"<<endl;}$ B( G' K8 \7 D9 m! X7 C
};
2 F% E* `: R: G1 M: ?) l- ^4 ^8 J) G. M, Z  Q3 L
void main()- E, I, I/ N9 l
{
: w) a  ^4 D  D4 ^6 B0 j% @/ h; ~7 t* \+ n) [. \  Y
A *a=new A();
1 E. E% x& W4 C% Y. D; o3 nB *b=new B();
; }  p3 N2 `# D! Q) C, A  C *c=new C();: e+ \( R$ t8 t
A *d=new B();% |( ~- Y; f$ l6 A- S
A *e=new C();* i" w/ c& o4 I2 {4 P
B *f=new C();
6 ~; \5 |/ v/ W6 q" s& \) E, a- A! N2 @6 t. E5 Z$ h: M6 O( A
delete a; cout<<"---------------\n";
8 a: i/ S3 n" ^# b# jdelete b;   cout<<"---------------\n";- ?  n% l* v) [( R3 [6 S
delete c;   cout<<"---------------\n";
3 C. ]+ m: K0 z# F+ b0 J0 q& Gdelete d;   cout<<"---------------\n";+ k5 K, `9 Z4 m7 n$ w" K4 E
delete e;   cout<<"---------------\n";
3 o0 P9 O7 h; [& P+ vdelete f;   cout<<"---------------\n";
3 {9 ?: G5 y1 D- q; S}+ L, c# N3 P1 G) M4 \- ^  [  z* F
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
1 k8 _$ z0 t! l) M3 Q这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
0 h! f# P3 h9 O4 c2 B: M  n其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵); Z: |  g3 ?5 k4 m( Q
(2)面试的诡异题目  B) l0 P, H" ?7 M* @
大意就是如果你 test *p=new test[20];: Z' A% U, I& i. s8 Y
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
; _* \; u9 o* [% B+ {" e4 z答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
+ }5 H6 N9 Y4 r( z" _* N6 S
' n0 G: {' U5 j# {Zz6 m7 h: D" y# W$ @. l" j! v
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
1 m2 T5 j* }6 I0 n7 p% D上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
6 ~+ N2 K0 k  @- v0 g: |0 X' v爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
& ~. M& ]+ y! h+ U! I1 E8 ?4 ]——& C" Y( @3 ~/ w9 d& b
百度2011年实习招聘专题7 `% z# v9 h0 }; ~
http://www.aftjob.com/portal.php?mod=topic&topicid=22
/ F' g; s  s: F& ~/ T  g# R/ B9 k爱立信2011年实习招聘专题
4 l6 y1 a  C" F+ }7 Ihttp://www.aftjob.com/portal.php?mod=topic&topicid=23
' z) n4 Q$ ]* V. ~6 j% q0 m新浪微博2011年实习生招聘$ R5 v' i2 K0 a
http://www.aftjob.com/portal.php?mod=topic&topicid=21
0 d8 _4 u+ `0 S* R阿凡提招聘http://job.aftjob.com/job
" Q" C7 h; v8 V6 N7 z/ o  L% r0 y$ C阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
. `* O3 ~& A! r3 ^阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum- I/ Y, N* ?  h1 a6 ]
阿凡提职位搜索2 ^6 R! C0 l  L& B
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-11 01:04

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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