|
|
2009爱立信面试题5 [' Y9 u- b* v/ c( f
+ j, V& S% T% O! uZz# G7 b5 e H- ]' y7 t! F& s# `: S# c
6 C1 w# z4 @& }. ^(1)下面程序运行结果是什么:) ]( c! G+ _7 G9 ~9 d# Z
#include "stdio.h"
# [1 X! r1 W( b- U/ A- I Sclass test3 {4 k1 t6 A3 z8 T
{
, |7 f [5 \0 L+ \! b. Y- ipublic:
3 T; l5 O0 }6 R3 B7 o. Z3 T( Ftest(){}$ b: x1 P% f) W/ _, ~& i. i
void hello(){ printf("hello\n");}
6 y6 j5 ?; ~, k/ R0 R A2 w- R/ {};
3 A0 ]; C7 r7 h8 R' k1 J* d0 cvoid main()7 Y1 q7 U) N3 {7 _- J" z
{
4 X" y9 l$ q! c$ w# B) F test* p=new test();0 ~, O: f& W% o9 b' R
p=NULL;
, S! j$ _% E$ G+ x/ Q p->hello();
, F; n5 m0 {% d6 X S+ c6 @- i}
3 n' W- X% I1 P% b- x. |事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
! I) x+ w X; g, ?#include "stdio.h"6 h) R8 |( Y' d( M, g- k8 X
class test
! S1 s$ ]" b# o& T9 O% A0 x6 b" ~{
8 i+ X* u4 H) H+ Q6 m$ uprivate:
2 N! T3 U! S2 U9 ^% u/ {" U- n ]int i;) A, c" \; _: S3 {6 a* u& H! r
public:
* k9 B" J+ f$ p- V. ^+ I* a9 ttest(){i=1;} H8 g/ c4 z6 y G! K1 ?% n" B! S
void hello(){printf("%d\n",i);}5 w) C3 S* M+ O5 w- L) l! x
};1 l% n. @2 \- z! U6 q) t4 d
void main()3 C6 n" S! B' ^" L' G
{
$ X2 x2 u: R, F% m; D( d) J4 X: a; M test* p=new test();
& c1 ]; s6 B+ v3 v/ vp=NULL;5 P9 u" s& @+ ~9 O- U7 w" z9 o" B
p->hello();
. P; o& m7 X) E) \}
" }3 k# Q& _& }+ c. J, {如果将p=NULL注释掉就无误,就会输出1.
4 q, S' j3 M$ @- }% G注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
( b9 n$ f, M" Y( s( }. o(1)C++的构造以及析构顺序- P" S* k+ f3 c; t0 S9 Y+ h
#include <iostream>9 E) y$ V( Z7 k
using namespace std;8 _2 [' ], V: M' {0 A# g
class A- l8 _, M5 d) n3 Q% l, p$ w9 w! W
{
' N4 i; D: l U B+ y; ^public:; a. t2 _/ i. f6 D2 `. t7 ^6 B- D& N
A(){cout<<"A"<<endl;}% d: Q O9 h1 T& z
~A(){cout<<"~A"<<endl;}; E& f/ ~5 u9 R' |8 T% f/ x
};
! t' ~7 I9 P& S! i$ gclass B : public A. L: R2 B; T" B6 n" \+ ^* P$ x) f
{, J# O) j0 s9 ]8 w4 R- I+ S' C
public:
|; y3 [8 A: q r* JB(){cout<<"B"<<endl;} D h- K4 [8 h( A; `( y
virtual ~B(){cout<<"~B"<<endl;}
/ J- D4 C7 h" H+ J, y};, S! y& q, |2 o/ ~- @7 A
class C : public B
1 n) |$ i6 W5 i0 y6 }{" v. Z5 T3 [! ]7 \
public:
' e2 y6 ^0 Z: tC(){cout<<"C"<<endl;}
, t2 x$ k; J7 v3 M8 P% K- Q~C(){cout<<"~C"<<endl;}2 G6 L/ n. q- N0 R$ T. B( w
};" E# Y$ e4 U: Q+ I, p
$ m Q3 [# [2 |7 l- T; ]1 X* Z
void main()
! {, w( W' P+ S{9 t8 `* j. P- o$ `, s+ \ Y
( D* x: I6 d, ^. E% W
A *a=new A();: e* [* O' o1 E
B *b=new B();
" J Z0 v* E8 {& R6 s C *c=new C();
) r- ~; Y8 l4 B& X: YA *d=new B();
, c2 V# m5 i7 U( c/ ?A *e=new C();
1 B/ g6 d. f: |' H" [* S* i9 IB *f=new C();
2 {" G0 w$ p5 j/ f7 t
. P6 Q! w: _. _! ~' Tdelete a; cout<<"---------------\n";( h& ]! a# }% A
delete b; cout<<"---------------\n";
7 O9 a2 \8 i9 ? U8 c- vdelete c; cout<<"---------------\n";+ ^& o" h) x* E' r( d
delete d; cout<<"---------------\n";2 x5 {' I' _' _
delete e; cout<<"---------------\n";
+ Z! m; S2 V! V2 Tdelete f; cout<<"---------------\n";
5 S( o+ V# R! l! v9 t7 A3 p2 {8 k}9 e: _( x# Y9 o6 E9 Q
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。3 q$ e3 z: z$ m& u
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
% z/ j- f% `; K其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)& K8 A. L( Z+ c8 f
(2)面试的诡异题目
& T' j' K, P+ C$ Q7 A- D# \ n大意就是如果你 test *p=new test[20];
& P' o& V1 S8 q9 m/ u) a1 N然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)* p& X, C. D8 H9 Z# X( J6 M; @
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……1 {0 B' j& u8 d+ O- C
0 e, l$ v0 R9 `% ]. S$ ~( Q" FZz: f% q# _ Z0 m2 V
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
' @7 E- k7 l! t9 M$ k+ Y- O上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
1 k' l; l' C& p- w爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
4 b2 b; I; I- X; i1 g, x' K1 W——, S; j& z9 }! b' V: O% k' |" D
百度2011年实习招聘专题
3 _: b* c( U' Phttp://www.aftjob.com/portal.php?mod=topic&topicid=22
n; V: K! B6 E爱立信2011年实习招聘专题
! d1 {, m' l* ohttp://www.aftjob.com/portal.php?mod=topic&topicid=239 Y/ [5 I6 P( ^/ n3 O
新浪微博2011年实习生招聘
7 Q6 c3 Z: b0 @http://www.aftjob.com/portal.php?mod=topic&topicid=21
" G! d! u2 ~6 S阿凡提招聘:http://job.aftjob.com/job" X3 f& q6 K6 c/ i8 k( {+ ]
阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag
( c4 N. Q4 W" b8 l5 ]% K* G* Q阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum5 u6 E( L+ y: H$ F
阿凡提职位搜索:; x8 W' B3 u/ |( Z: L0 H
—— |
|