找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1299|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题3 T5 w2 z3 Q0 h, e& s
; z. ^/ \/ A5 g9 i8 _' |0 O
Zz
( u4 t9 u6 }, [. T! z
! i/ g4 f# ^! Q4 ?9 g! d/ S9 j(1)下面程序运行结果是什么:
8 F+ x0 h  p% e, S* \1 d#include "stdio.h"
* N" m! }$ z# T6 A5 d7 W! kclass test
, _6 \% k( i/ M- P+ f  Q% D8 V{6 q$ }9 ^+ ?7 _9 S) q6 B! Z! u
public:; o$ n, i. ^! s2 L) f& p, l4 C7 j: F8 a
test(){}% [4 g# l( {, d
void hello(){ printf("hello\n");}
& O; X/ n% L* w' a5 V};0 E$ U/ j- b5 ^
void main()5 n" c: n, A6 P9 Y0 s' D; @
{
8 G: ]4 f1 y+ C$ P$ L, l6 P    test* p=new test();. r. Q5 B" `( r' E0 `) Z, O
    p=NULL;
+ t. b0 ?- b5 G1 }: @1 \    p->hello();8 }' P' p+ h. o$ C" V' F- z
}# b& R, B/ c. C2 {9 ^
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
6 B( w5 {2 v3 n0 H#include "stdio.h"! A& k) v* X, N' k8 h! L) [
class test
0 _8 `: `. T9 s! M2 Y2 U$ N{1 J. [$ f/ |, G0 w- |6 \
private:
2 K# a6 e$ |6 Wint i;; Y' I' l; [7 c4 \! @! Y/ u$ T
public:
- V7 n& y3 W8 U. J# [6 R8 ptest(){i=1;}3 b) M# D, R! x" w- T2 F6 ?
void hello(){printf("%d\n",i);}
* L8 t0 H: x1 y1 ^};, U$ z- Q5 n* k/ ?5 {0 L
void main()5 p9 F- @6 z1 J8 H
{6 h6 p" b/ Y! S$ x  z2 V
    test* p=new test();% L7 X% R) n  `
p=NULL;
3 M  h% |* X. {  `( ]p->hello();
6 @  m$ F+ d0 D. L6 R}9 X/ ^& a8 p6 F* K2 p# Z1 h8 B
如果将p=NULL注释掉就无误,就会输出1." y: c7 b! _5 y& \5 N
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。( D2 L4 y* J/ Y- I; }- C! u* e
(1)C++的构造以及析构顺序" P, n2 e8 T+ t9 H
#include <iostream>
3 ^* R" Q/ u, G4 p5 b( ?# z5 o' m1 s5 vusing namespace std;
! v3 X" \9 d) L9 Cclass A
$ O( N$ _* P0 ~0 u1 l, U{) {, S" j4 N5 S" U+ H9 h( G4 [
public:
% C: I8 a, }3 h7 oA(){cout<<"A"<<endl;}1 w6 o0 t% [; L3 X2 H% W
~A(){cout<<"~A"<<endl;}
" |. v4 X; R2 @0 V. B};
4 Y' b' S2 U8 Z0 B# F- m5 ?class B : public A2 a+ H5 }3 U4 w  z( x1 K  S5 q
{- [% x. v/ X! ]/ X' \- f
public:. g' |7 }( a% s0 i2 `& z: X& ?
B(){cout<<"B"<<endl;}
! Y/ @. p0 j8 h+ G- Q7 Xvirtual ~B(){cout<<"~B"<<endl;}. S# F: y1 P& K  ^) t! s( S! P' v! q
};
. B. y! \) M, _8 n( W2 G( g# nclass C : public B
5 ]. x3 F9 j% A+ ?{
  I: J7 `. f; _# ipublic:( L" K' Z# z! R- g8 I  I. h3 z
C(){cout<<"C"<<endl;}
; M$ @( T! f6 l% R! v~C(){cout<<"~C"<<endl;}
" ~/ r4 T1 A4 L. F2 f};
! r3 E, d$ I: B- I  `
* }. J- y" U7 U* ^8 o& @7 U% q* [5 d; ^4 {1 tvoid main()
2 S  M  R; P' l/ x; x{
1 f: F; |+ j* Y
3 U9 [* I9 @0 T" i8 T0 Z8 O4 wA *a=new A();
: y8 O6 f' T9 a. Y/ ?B *b=new B();
7 ~8 l! `. u/ z  C *c=new C();
" X+ r- y; j1 J5 r6 U# kA *d=new B();7 |6 @* Z/ e4 l; [. K3 B+ I% q
A *e=new C();
' j4 m3 I- E6 |: V" A: L8 A: D1 ]B *f=new C();$ h: H! t0 m( s
/ P7 Y7 m" W$ _: y6 k( E
delete a; cout<<"---------------\n";
( E% W+ W; Q6 d( ]delete b;   cout<<"---------------\n";* R& x! W( m% ^4 A- m5 j
delete c;   cout<<"---------------\n";
) E# \( s% ~; w: M$ X* ~delete d;   cout<<"---------------\n";4 c/ M" m, y, |+ n7 J
delete e;   cout<<"---------------\n";+ `; Z$ y4 x8 w3 j
delete f;   cout<<"---------------\n";
, n: t2 u/ N; s- j0 K) t+ b* A  `, Y}5 i3 Q2 N3 Q3 U
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
3 x! w  _2 h$ J! K' k这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。0 S% Q( ]. s- F1 `
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)5 Q3 d9 L" H& V" u" D' c8 u
(2)面试的诡异题目' Z; X+ A: ^9 @4 F% ^
大意就是如果你 test *p=new test[20];% U8 l6 J3 j+ g
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
/ f: h) D- l6 w1 V, V答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
. W2 Z' S/ ?- F8 w1 c( N
8 }$ p8 s7 {8 D% n7 RZz
# F& F/ |' R6 p% Y5 E: \) r爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html7 x) K  _; N5 C6 s
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
" Q# ]6 h7 @3 O爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
4 n0 b) Y! K& T/ `& g: ]; V, v/ `$ h——  G7 o3 L& y" N! T& `! i7 }0 h/ E# d
百度2011年实习招聘专题
# D0 }6 X: D. F5 n6 dhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
2 K5 A& H! v  a2 c8 D2 a爱立信2011年实习招聘专题
* y! q/ ^) b" B+ Nhttp://www.aftjob.com/portal.php?mod=topic&topicid=23; R( F& A0 v/ T) ^+ S: X
新浪微博2011年实习生招聘! f- G3 j/ v0 L* M3 B
http://www.aftjob.com/portal.php?mod=topic&topicid=21* p9 q$ j8 m; H  ]
阿凡提招聘http://job.aftjob.com/job" [8 @" Q" d2 J+ a
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag9 \+ P2 w9 |4 b# ^2 S% t, @5 Y+ n
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
6 W+ r% H2 ]9 P阿凡提职位搜索
1 O" [2 w9 E* W——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-16 12:54

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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