找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1082|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题: }$ ~9 r" k4 V1 c7 {: z
6 u5 o4 y2 U- F
Zz: X* {' q/ q) x6 S8 K, {, j; r
" c3 Z0 \; C0 e5 H' Z3 ^$ s5 ^
(1)下面程序运行结果是什么:
/ t9 ?5 @' p9 |- `* S$ D#include "stdio.h"' I) B' b1 g9 ~* x  q
class test
4 Q; w; c# {) D: l. |6 y1 z{
4 R$ {+ P! \8 o8 q" M. H) `, P4 \public:
9 o) ]: q+ K* q( `' S+ U# rtest(){}
0 U! c, p, k% {( R( d3 J5 X# J+ ~void hello(){ printf("hello\n");}5 T( R7 P# k0 Z, W
};
4 k. ?' n2 c9 j3 ?$ d$ r5 J# [void main(); s; |& K3 k0 M- a# d* w2 L
{
4 y2 h# q1 m1 c    test* p=new test();
" O9 G. T$ [+ O0 R" S    p=NULL;. O4 V1 d, \' P) \; v( }  L# \8 g1 a
    p->hello();* a1 k3 _' O9 ^7 G& C
}! ]- G& a& |) ?! G0 H0 ^* y+ X1 H
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
: Z" v% A6 k9 t0 i  H8 k; _# k& f4 U#include "stdio.h"7 h" \4 h# d% w+ J1 Y+ Z7 H
class test
+ A6 ^* u* X8 d6 a  ~9 L+ U{
' q2 R3 A3 H" ~, i5 Xprivate:
! N: U' }2 P$ F1 }  G2 E4 Sint i;8 ~: I" J/ F' Y! [% H2 [% _
public:
; f0 i2 a# b5 s% m* ^test(){i=1;}
6 _. V7 r: L2 q2 @0 s9 Yvoid hello(){printf("%d\n",i);}
/ N2 d* D7 m+ D4 f8 n0 n5 b3 t};% J. M- e( Z" w3 m) G. W: t
void main()
4 S; C5 i( s' u{
; ]* Z; b. }$ }  K, `* `0 m% _8 p7 {4 d. h    test* p=new test();
. [! V' H! u9 x$ z  zp=NULL;
9 ?3 B0 s/ Y+ Y6 h4 h. `p->hello();
) }2 _2 o, T1 {8 M2 Q}# L1 R0 W1 P# {4 C( U5 p
如果将p=NULL注释掉就无误,就会输出1.$ S+ S9 N: [- H, S2 O' r
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。3 @& L/ T3 V& A* S( o
(1)C++的构造以及析构顺序
6 b1 E0 R# ?. |, ]( B7 b( ]( T# [, ?#include <iostream>
# N8 b3 E8 T' W0 n. Fusing namespace std;
0 H0 D8 F- R  h( J+ F7 tclass A# J" z8 c5 h$ B* @
{4 I8 b; z% f/ _8 \
public:4 m& s4 Z( }0 Y, h2 w
A(){cout<<"A"<<endl;}2 {% q) T) a  f6 O. M
~A(){cout<<"~A"<<endl;}; |9 y0 s7 {% N# ~/ F3 I% `
};
6 F9 m: q' L6 e, Tclass B : public A
1 ]" d9 I, V; g( {" Z{% V) q; g7 r3 F+ Z
public:
2 Q1 {) B  R+ |7 lB(){cout<<"B"<<endl;}
6 G7 e$ h  U4 s$ e0 q7 r. Qvirtual ~B(){cout<<"~B"<<endl;}
' G+ V, {% k2 q- X2 \& S};
8 t5 }, @* k/ j, ~class C : public B- n9 w+ }0 m5 N
{9 g8 u* X2 T0 Z' B
public:
) k  a/ y) E: DC(){cout<<"C"<<endl;}
6 r+ K$ h. K. _# E* X2 e  f( m~C(){cout<<"~C"<<endl;}
( `0 e/ _9 k! Y& F};
8 J! t3 p* K2 p+ \; Q. l4 L
, M8 X8 w0 Q* t' G" g3 y# d' ?, qvoid main()& [4 \: L) o- h0 h6 D3 k
{
1 {& f2 y' u% y: g/ n' B  n  E! d7 ^+ {7 N- y
A *a=new A();" c& {, Z0 O: l: d, x  T2 _
B *b=new B();7 C3 M$ T2 \& s' P  x; v: |5 m$ f' h
  C *c=new C();
2 j  X; w) t3 u/ D5 L6 R+ S" |A *d=new B();! A* _6 R, n, X8 ?9 ]
A *e=new C();% N9 L: }  m, {1 O. T/ r
B *f=new C();- D; C0 _, B( q% y  A5 Q5 c# b$ o1 A

  S+ W% t  S9 Q- F! }delete a; cout<<"---------------\n";
* G' p6 j- t$ `delete b;   cout<<"---------------\n";
# {9 C4 F6 N- L8 |% H& p: `  S8 j8 zdelete c;   cout<<"---------------\n";# F! k2 ~2 b; K- S% h$ J) r! W
delete d;   cout<<"---------------\n";
) Z4 w" f) C' |( V; K% j4 Ndelete e;   cout<<"---------------\n";
, ^2 o. x+ h5 B' _delete f;   cout<<"---------------\n";
2 {# _# `; C- d# f9 O5 w% P}5 A/ \; Z) z8 ^5 l
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
$ z  _1 v9 }1 F5 G- h) K这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。( Y' }' p* K3 \, Y/ y
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
7 w3 M; P5 R4 H+ S$ d6 d(2)面试的诡异题目( K8 j' g% S5 V5 m# O1 j
大意就是如果你 test *p=new test[20];/ g' e/ e  F7 C
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……): [3 Q& ^: s' U2 w- C! |6 C0 j
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……( a% [) X& d" |; k5 @5 K  w2 m% l
2 `' K8 C, x/ z7 ^, E2 m
Zz
4 h0 z2 H. P3 a/ s) S# O6 _爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html# Z  ~5 P0 e/ r- N
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html' }5 G" g' C$ U5 U) E" s
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
; W" b6 @  l8 K" A/ t——! N% C1 A4 I2 ^. b. q4 M
百度2011年实习招聘专题4 W  J/ f! J1 y; O2 i' a- o9 X
http://www.aftjob.com/portal.php?mod=topic&topicid=22
$ |: L' |. L$ F爱立信2011年实习招聘专题- L3 U* @2 i5 B  W  o4 E! J' h
http://www.aftjob.com/portal.php?mod=topic&topicid=23+ p3 U3 ~& s2 k7 r
新浪微博2011年实习生招聘
1 u4 q9 S2 v: _( W: W7 Fhttp://www.aftjob.com/portal.php?mod=topic&topicid=21; D, u0 w9 `0 d( Z
阿凡提招聘http://job.aftjob.com/job3 V& |4 H8 l/ A3 H4 q: ]; j2 o- s
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag& [) _: s" w/ |; ]* \
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
& s( S6 T- t* Q- ^阿凡提职位搜索
/ s/ g5 C! Y  ~* r——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-11-29 11:44

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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