|
|
2009爱立信面试题
: q, Y6 J/ e0 `; G. P3 \6 q! a3 H s5 e! ~
Zz
- d" w& Z, x+ m G; a
3 `1 g M7 }) t2 w- F' k8 q2 u(1)下面程序运行结果是什么:
4 x8 G; Z( j% ?#include "stdio.h"9 C5 @- X0 p" E& V, n8 \% k
class test% `8 F2 w' H/ l, z$ z
{
( r+ [! T/ N6 E, _6 Dpublic:
0 c0 e: E: N4 n' ^% U; Z* {, T$ Ftest(){}
, x! b! N2 N4 ?( M. wvoid hello(){ printf("hello\n");}
! H0 u# {5 w/ P7 d0 O; M/ N};
* o7 {/ N8 ~- e, p+ J3 \" Evoid main()
0 ~6 Q6 v% ^% r' F+ E6 k2 M" Z1 ?{6 o3 n; s/ d8 A; w1 N* b' k3 j
test* p=new test();' C9 O6 @+ T$ R& d; n6 |1 K9 E
p=NULL;# o; [( j3 ?' L5 \6 Z5 ]
p->hello();
+ n2 k5 a. K9 Y+ K) H}
# ~1 {6 K F ?, L) A1 m事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
* y/ n7 i: m/ t- h4 K#include "stdio.h"
5 r6 I' M$ q e! @. gclass test# T. E0 W$ S2 ~- t, N
{6 w- q/ T- ^3 s+ O: S* _
private:
8 H8 ?0 J! m8 L gint i;
- d/ H$ E, r! @$ p* Bpublic:7 i) e1 q3 s( }) j2 r( |$ r9 b# E
test(){i=1;}. [) l2 T! ?/ g
void hello(){printf("%d\n",i);}! ?, E! S$ [. @7 E: T( {
};
2 H- C& w/ K/ J# I' R4 |void main()/ \# C0 g7 X* Q8 D
{: C! Y, X7 f: V! ]
test* p=new test();
+ k: H( X! V- f% }- i) u$ n5 G. mp=NULL;
2 {! H8 T: J* z. pp->hello();
m* M. T. {- w( o1 n* F* \3 u}
& { N4 n# C9 q; x# o0 i如果将p=NULL注释掉就无误,就会输出1.
; q" ]: T$ v3 j7 T, {注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
( w x' u: o5 k+ F. X. U# k(1)C++的构造以及析构顺序
: {0 k; `$ G/ z5 r, A6 j( M#include <iostream>& T& B/ M) S+ Z$ `4 _- \: N
using namespace std;
1 v1 k$ [$ D3 {- g* p) {" `. aclass A& v, R5 y% g; Z) M2 g
{
]8 o$ ^$ j6 g: S8 }; g! [public:' I8 q- F6 j% ?' [/ ]4 M0 k
A(){cout<<"A"<<endl;}& W8 Y/ K: q/ u, y7 m$ T
~A(){cout<<"~A"<<endl;}
0 k/ X) d8 I N4 }! d4 E. Z. d};" C# h) N# }4 B4 [8 n
class B : public A
4 J) M: N2 G* \0 U7 j/ q{ l6 I1 x& f0 V
public:% c+ `/ j+ u( Y1 ]
B(){cout<<"B"<<endl;}: i, ^6 O5 Z3 Y1 w
virtual ~B(){cout<<"~B"<<endl;}, I; v, g9 I# N/ y3 m7 }, I3 [
};
+ ]2 c* S- H% e7 A& ^0 h' f0 [/ Pclass C : public B
* M9 y$ `+ O: v{
1 y0 H# @* m0 K& } M* k# Npublic:
5 U+ j; i$ v7 s$ L# s6 eC(){cout<<"C"<<endl;}
6 O3 V/ i3 a1 i5 K" B! \! m~C(){cout<<"~C"<<endl;}1 Z& I5 U6 M, L: a; r
};$ i9 h7 F4 D7 N( }8 ~ `7 b
# [1 s' a1 ~% Zvoid main()8 D- B+ |; J) R$ ^/ M' W1 Z* t
{
' B) Z- j! E ?# g X, h" q, y% ~: p, E7 z" Z+ L) T4 w! W
A *a=new A();. l' H/ k0 e$ f1 P/ O0 {
B *b=new B();' n F+ ^, ]# R& P
C *c=new C();
3 t$ `0 y: T+ e9 h( nA *d=new B();7 Y& z7 i( Y$ N- W7 v, }; M
A *e=new C();
m/ ^. \6 L7 X5 AB *f=new C();" j* e( N% A# m# G
4 I0 } k& g. ]9 O U
delete a; cout<<"---------------\n";* N" r0 o" E- D# p* W2 o
delete b; cout<<"---------------\n";
, _! p0 e, L+ Z2 t9 Odelete c; cout<<"---------------\n";
5 I8 I5 r* P3 _$ C: W7 gdelete d; cout<<"---------------\n";
' ^5 F* y5 v4 W3 q' q5 Sdelete e; cout<<"---------------\n";
+ l! G6 V, j8 g2 O mdelete f; cout<<"---------------\n";
5 ]! ~# R* E. q" b4 F6 h}/ P7 u4 {8 e3 B N- `- t! E4 i
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
4 S G4 E5 L( C8 X1 M, C这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。2 l5 V* E! N$ ~: E/ o' ?
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
" G0 J X; V) e& \7 ~# a1 G3 h(2)面试的诡异题目
) o8 b" ]( U: ?2 u7 _5 V大意就是如果你 test *p=new test[20];
6 O9 ?- Y2 r, v: \7 F/ m然后释放的时候用delete p;会怎样?(明显这样做是不对滴……) P- G- B2 P2 w! E
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……) ]) Y2 X+ g! T0 G# Z+ ]
% R# ~/ y3 l& a9 T% HZz% E3 l* j* b; t7 D
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html$ E+ C3 |9 V/ W, D# A+ [
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html5 ^' s* L1 {, V
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
1 }/ X6 ]0 ~6 L0 i+ u! }3 Z1 k——
" g8 q/ t7 T, |9 z5 j/ F6 H百度2011年实习招聘专题% P- H. u, c$ m) _) }! S, \
http://www.aftjob.com/portal.php?mod=topic&topicid=22
0 J- }* B" V& G爱立信2011年实习招聘专题
; R/ e& w1 `8 C- e E/ i5 A& J1 ^http://www.aftjob.com/portal.php?mod=topic&topicid=23
8 [5 s; v; w" g# w新浪微博2011年实习生招聘8 O1 G5 T2 Q( w0 x4 B, h- s
http://www.aftjob.com/portal.php?mod=topic&topicid=21
% F' E' Q9 o5 ]- O, l$ m6 N% u: t阿凡提招聘:http://job.aftjob.com/job
, `% b) c% ~( ^. q" G阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag, n8 z% R; ^8 v6 M) F
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum
7 w2 y# y2 g0 D; N u9 Y8 ^+ m阿凡提职位搜索:" r/ e9 E- R" p$ Q- o
—— |
|