|
|
2009爱立信面试题 y$ G9 @5 L, p6 i+ K
, T4 Y; H+ o8 ^0 F; Z$ y1 x5 g
Zz
. k1 Q _/ ~+ s: U2 U( H$ A6 ?4 j2 d6 b: ~: d+ _. x3 r
(1)下面程序运行结果是什么:* D, b- {- `# q8 S% K: P8 e
#include "stdio.h"9 }: h. c! c' V$ s+ d- m8 ~: |
class test
- _2 ? C" r) _! |9 a3 z{
7 O+ x# L; o5 v: F* qpublic:: u2 _4 \, K* o! K7 H/ m* |
test(){}$ v( D$ C, _* ?- I3 ?
void hello(){ printf("hello\n");}
7 ^% x% ^; Q$ F4 S( H7 Z1 @/ T};
/ _/ J0 R: @' j2 ]6 v7 {+ ~void main()
4 j: k1 {3 I8 L& P$ x{) F, P- N+ r, E: F
test* p=new test();8 S3 U5 r( }3 S: t5 H. N
p=NULL;
. V# N7 r( u2 L/ f p->hello();
' @, K) J- G- m, F2 ?) ^9 V}
& T t# y3 D B事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:8 D, K3 J. x# m' r' d
#include "stdio.h"3 Q# q$ I# c W$ t* w$ C
class test }! i. u. g7 e3 x! l$ X
{
% [% _% q ]0 Nprivate:
0 s9 n1 q0 i. T( m: A$ |7 O; C2 Jint i;
2 n2 L7 f2 {" s& O2 L% ]public:
1 @ `9 l r' W+ s) \# ctest(){i=1;}
1 M+ H* I# ]' P2 b5 I. l- Wvoid hello(){printf("%d\n",i);}+ R, {# h8 j8 \0 }: X
};
' |* k6 e# I4 e/ a4 ^- h7 Wvoid main()
8 _- J: ~, r) I{
/ _' b& f+ N2 g5 s f test* p=new test();
9 U8 k0 _2 d# n3 f+ Jp=NULL;7 m; S9 A% t& r( V* W# t
p->hello();
9 z' h+ {7 d. [+ v$ E}
$ K& O1 y0 M) E; |如果将p=NULL注释掉就无误,就会输出1.
5 k9 s/ i, X2 B. V' `+ j5 [' [5 h注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。8 d8 W- L9 i& u* b3 O: N% y! E/ F
(1)C++的构造以及析构顺序
4 `7 P" Y' H) N2 l6 M. z: _#include <iostream>
9 }6 n! H# w# t; Iusing namespace std;
# V" v0 a% T1 w5 |class A+ E6 u o. L8 e( _! t" R: N; i
{. L" o: v4 M a/ S: H- Z. I
public:
. r1 c+ H( }/ a6 @3 }! G# Z9 I& K5 aA(){cout<<"A"<<endl;}" p* Q1 o6 h/ u* t3 A: {" S) y! @
~A(){cout<<"~A"<<endl;}
, P$ I1 [6 Y: L" `( q! G};
* d8 {# e$ s9 M, z. y fclass B : public A
# ~# ~6 j! y/ e/ M- n1 R$ X{
/ C2 |) L \* E" Spublic:; |( l4 j- ]5 j5 f
B(){cout<<"B"<<endl;}+ \0 b$ W6 L, n7 k
virtual ~B(){cout<<"~B"<<endl;}
1 S' t; q0 s# G: U6 R$ |};/ e3 s0 v( Z) Y/ T
class C : public B6 F7 p7 T6 B. |+ z
{
. D \" r3 M/ r' S4 c3 Hpublic:
, a! |% l+ ^4 L+ }$ p4 XC(){cout<<"C"<<endl;}
p5 d+ B/ {5 e~C(){cout<<"~C"<<endl;}
7 W4 H9 @6 H8 h! I( N};7 r: O V0 _) ?
7 R* f# b% r; x4 _+ evoid main()8 W. C, F: `2 ^1 Y, M4 l5 D
{& B/ c F, @% Q! u
* `4 W% ^: e! a( e% v+ lA *a=new A();! N/ h3 ?. _% }7 Q5 g: v7 e
B *b=new B();
y: G0 L6 o" e C *c=new C();
# Y% C+ b5 a$ @4 m% T/ A6 J. EA *d=new B();5 n7 c* k) ~. D) O @8 @- W
A *e=new C();
$ N2 _$ ?, q( Z% K6 D! T$ t" ^( pB *f=new C();
1 _1 G/ P( Q$ n+ V$ s: Y7 j, s- v" M( e* n" ?. K
delete a; cout<<"---------------\n";
7 ]5 R Z B+ m% _( U2 ldelete b; cout<<"---------------\n";
9 t5 z" U6 I# F0 t5 |delete c; cout<<"---------------\n";
# A1 N# Y9 P; s& t7 r3 T _0 Xdelete d; cout<<"---------------\n";5 u3 S' ? R T! K9 Z) M0 l
delete e; cout<<"---------------\n";7 n1 b0 K- F, K4 L" [% F
delete f; cout<<"---------------\n";
7 m& B: i. e2 a8 o}
* N5 k1 t& ]: }: k5 m这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。' u) D" L! t4 B7 H5 o
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
' m% D; H1 J9 W: ], [4 u其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)$ \( S. R; `* J
(2)面试的诡异题目
$ |! R; E7 l1 \* V' S% H大意就是如果你 test *p=new test[20];
( F* X0 y, o& }5 f2 I* @然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
( b( Z' D, o& [( h: P6 g答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……! w! d+ x& T" `- b
+ S& a# M5 N" E1 O
Zz- k6 q' p8 f# B$ n2 `
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html+ g6 U9 V* i- r' H" Q' ], _
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
2 d& v1 {8 k, V1 \/ k$ ]$ m# p+ C. k爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
) s& K& T# X7 a! Q5 y——
# t/ ]. X, {: }5 |; G# N百度2011年实习招聘专题0 i# @; V1 e# C* P3 m* e# b) s1 d
http://www.aftjob.com/portal.php?mod=topic&topicid=22/ a* }3 H$ a6 j9 i
爱立信2011年实习招聘专题
9 W7 e% X" V$ Z" A& r/ Uhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
! v& a. C, s" w8 d: S7 F新浪微博2011年实习生招聘
; Z& A# I6 A) o U8 k4 b2 G5 |( Vhttp://www.aftjob.com/portal.php?mod=topic&topicid=21% p/ L0 T) W- B1 ]' `& [. f" r$ a
阿凡提招聘:http://job.aftjob.com/job
3 k7 n, F! N, ^/ s5 H9 K7 T$ e阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag
7 H! _* p5 ]' L阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum8 u& ?7 C, K: \
阿凡提职位搜索:
3 [, b( K+ ~" ~$ k, u' O—— |
|