|
|
2009爱立信面试题
; z' }0 w0 h4 H+ D8 i) z5 f0 H/ V7 W; ~6 U7 w# e: b" o$ a
Zz
) [1 l: k" F, w% G" J: S! O3 K2 f) N0 f
(1)下面程序运行结果是什么:7 w7 s) M0 ?" p6 S
#include "stdio.h"/ w9 `( Z" v8 L- `4 A2 v
class test
8 R. A. @ }' \& `+ n5 j6 A7 Y5 E{& j9 Q- t6 ~/ v2 Q4 {# m
public:- U2 r/ A$ S3 B7 a3 F% f! `& v
test(){}
: h7 X; U6 ]2 k: o: m) } A1 _ Ivoid hello(){ printf("hello\n");}. n# {. p( P& v, m5 x1 \
};
# e6 y/ l& {2 \! p3 [& l, Uvoid main()+ A8 j, U0 H. I1 l/ E( ^4 s
{
6 K2 \9 [# W0 i' b) v- ^3 Q test* p=new test();! X v8 W7 }7 B
p=NULL;: D; _1 F/ A: w& }- f( ^
p->hello();4 n0 `- [' W/ ^, m% G
}( h( }- b0 t. v6 ^3 ?
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
0 s; y) p# ]" J. F3 \; z: u#include "stdio.h"
; a4 m, c- }# V' G' D# E6 dclass test3 }$ M C5 h: ~% U6 \# R
{! P- @7 J" |0 \. ?% \6 _' J0 A
private:
4 i" N/ g% b$ I, m" y% r7 X* Pint i;
9 a/ S- D/ R2 G9 vpublic:- s9 X6 i. {! V/ z$ J# {
test(){i=1;}
5 X: K% R) P. v2 \void hello(){printf("%d\n",i);}
- s; ~3 _( B( `. K5 V6 d};# S) p" x5 k- G( B( V
void main()
3 F9 k" d; i; ` k{
& @1 w( c- _* Z9 i3 _& j, P& B test* p=new test();
# q" _* f# G/ ^0 L- z7 N$ `p=NULL;
1 Y! S9 `# n: U* G; lp->hello();
: ]3 j& j! R" w) A}" _$ P# u5 Q, I9 m c
如果将p=NULL注释掉就无误,就会输出1.
) R7 }2 r: I) {! x0 B4 t) W6 G注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
. j* ?4 p' B( ]: T# A3 B+ {(1)C++的构造以及析构顺序
" Y; x0 r' w3 u0 i#include <iostream>
% C9 I* x& F9 F3 y8 ausing namespace std;# A) M! M* T) @ @
class A
- c) X4 _" {, {/ d: b5 Q. X9 j{' D# u& B- z0 e ` G
public:
/ g& } R1 {! ], i, vA(){cout<<"A"<<endl;}
7 x/ _2 N- x: H. y$ t3 ?. E c4 e2 g7 w~A(){cout<<"~A"<<endl;}
) Y. A% [; ~9 p4 h+ H};
" X b( C6 d0 Y6 C" R3 C: eclass B : public A
2 r/ x x8 Y, ^4 J, R{
! ]' c) ^4 t9 p8 y; _ h2 R, @public:" A" E h. t- f2 j- L
B(){cout<<"B"<<endl;}4 o/ |8 Q1 |- T* @' S: @, h
virtual ~B(){cout<<"~B"<<endl;}4 w6 ?5 x- t* H. m3 n$ y; }* U
};
& s- c' @; t. \/ d- W3 \ T: O' aclass C : public B- S t- @4 w0 F% d
{
& r/ m/ y" _+ S4 {public:
! K9 x. J1 d% o1 r7 CC(){cout<<"C"<<endl;}" i1 [& ^& C" H7 p& f2 |. J
~C(){cout<<"~C"<<endl;}8 T4 s$ d! u! F% x
};
I) Z- ?. z7 C. }7 S* G& U! X. d0 D; [
void main()
: b, z; ]7 h( ~. n{+ K6 Y7 V3 B" J% B: q4 d
( D/ H7 m( @( P4 yA *a=new A();+ b* s/ e4 Q1 j1 t: u
B *b=new B();
& t$ W3 R, ^4 ^% j# R* j C *c=new C();
+ t0 i- r- H$ \0 `6 r) U$ x4 F3 A& z- IA *d=new B();. }9 y* u( R# ~, ?( @5 g8 G
A *e=new C();
P3 M4 t0 ~9 l' `8 GB *f=new C();& h0 }. s7 ~: k9 m" \
# p) @& W5 C3 p. e1 }
delete a; cout<<"---------------\n";, M9 x: e8 e# s* p# x, {% _* L
delete b; cout<<"---------------\n";. s9 J7 b- L V0 C
delete c; cout<<"---------------\n";
+ m! d& h# D# l( a- t. |) Xdelete d; cout<<"---------------\n";
; P" z4 {1 t( z) i9 i6 I9 J2 adelete e; cout<<"---------------\n";
* b! I( Q2 G0 z% T( _' Z p/ L8 edelete f; cout<<"---------------\n";
& h$ u" \% g" e7 e}' y& U) j8 ?: E7 P6 _
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
' t, o9 L+ E* W1 L7 L% C4 Z这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
7 W4 f3 ?! C7 \2 ]5 X其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)3 }6 z/ H" x: s, V b& T
(2)面试的诡异题目
" Q2 Y/ i- U+ U8 L- V$ q大意就是如果你 test *p=new test[20];
8 c o; `& d* ^6 I$ m& K: {然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)4 A, M6 f( R3 i y9 f
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……7 E( X' }7 ^, |% o/ s4 S: T
0 A& _* @5 Z- ^! E0 h3 Y a$ EZz
' \2 S+ ?0 H7 ^ N) h+ j# ?8 m爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
: l- x7 v6 T, N# x上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* I/ ]& l( k3 B6 }
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
, w; \& v/ P# N/ M; v- @——
0 b+ m2 {: u1 h百度2011年实习招聘专题
6 c1 V4 S, |0 Z& Uhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
" a. L- W) X+ @0 J7 P' J2 O爱立信2011年实习招聘专题
' s/ V7 b! r, c! w T! [0 J; R7 vhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
" A5 T/ j4 g2 K. T新浪微博2011年实习生招聘0 Y. |2 n' u7 i4 A4 Q
http://www.aftjob.com/portal.php?mod=topic&topicid=21% t' N9 d: w* M, H9 e$ ~
阿凡提招聘:http://job.aftjob.com/job
& Z/ T0 c. O9 p8 I J阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag8 _- w# h: _# B# Z7 o% f" I5 }# {
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum
, J2 [( m7 i+ x& G: V) ?阿凡提职位搜索:/ N6 N& I: ]. [2 ^
—— |
|