|
|
2009爱立信面试题
3 {0 h) p8 y) J/ W
' @# Q9 ^+ z. M# l3 s8 |Zz
7 z- H+ i, l( |9 _" d
$ l* P. e' r; `3 D- _(1)下面程序运行结果是什么:+ }4 o1 I* l+ E$ I1 \* z
#include "stdio.h"3 ]/ c8 C. {# G7 m0 X4 s: g" T
class test
# L U+ v) d2 S{
$ w+ q; o9 R. [3 Y, ]" B$ a: F6 upublic:; w. H- K2 |. \# |/ Z9 |+ \
test(){}
( p/ F1 ^4 o' m- ?' | y% R- U7 ^void hello(){ printf("hello\n");}! Y7 u* b7 y! Y" i0 I w1 @
};2 E/ W( P" A5 D! R# Y8 r$ T
void main()
1 R9 f3 E: u; o{# ^) |! z% K6 h8 i( k5 ]
test* p=new test();
3 U0 \# L% R2 q7 i2 I' J2 a p=NULL;% J' a& Y) v3 n. y- w, s7 L
p->hello();
( A1 e& |2 S# h}
! Z7 b! U) t, @+ Q事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
8 a/ D4 t$ h& y5 i8 g1 w. \#include "stdio.h" T1 h) H' w& e- {* G; K* u2 ~' T
class test8 |, |" G3 g5 j+ A( m
{
- A3 @+ L6 u: g1 u; l$ _private:
0 t3 N" n# y! _1 Oint i;
5 Q: \+ _; c7 Ppublic:
1 I/ y' t+ f. Ntest(){i=1;}& j7 W' q4 F# A) C
void hello(){printf("%d\n",i);}! a+ j1 \7 e* s. X; E/ C# H0 v4 o
};# G2 K" i0 o; S3 ?; R
void main()
! |! E1 u. ~ \8 P{
, R! ^4 B) u; s8 G, @9 c. [ test* p=new test();
6 d" J& Z8 @$ b& u' ]& Qp=NULL;
% O! R6 N& J4 ^; s8 S3 Jp->hello();2 D0 D; r3 {9 Y/ x+ n% H
}
1 v5 H9 T& H2 e% C- j: y如果将p=NULL注释掉就无误,就会输出1.
1 U( G/ z# U# E/ {5 u* F# C: W' H r注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。3 O P! q0 h. o
(1)C++的构造以及析构顺序
: [9 S+ W3 b1 k9 H6 X! j$ m& G#include <iostream>8 T- |4 g. c/ l& Z# p$ T6 z
using namespace std;
6 r! j6 V! c( E Q. kclass A
. H, y# |/ y9 [% ^ W1 A5 {9 n2 y{
9 a I! y1 n3 `8 @public:
* u8 V; l: |+ [8 bA(){cout<<"A"<<endl;} v& w3 `2 Z. _- X" ]! Y P
~A(){cout<<"~A"<<endl;}
3 X5 q V* E/ N3 X};8 |1 [3 I5 \0 L7 v6 P- V1 L: e( U
class B : public A. {4 {/ C5 P" n
{
. s* j+ U; k, y) Dpublic:% a. K1 @) U9 @0 `2 P8 v; x# \
B(){cout<<"B"<<endl;}
`: k! Y) x3 \' |+ I/ lvirtual ~B(){cout<<"~B"<<endl;}
2 _& ~5 T, M1 P: u: D6 M) G. c};" S& V# V2 B9 j% Y) M
class C : public B: O, s6 a0 J+ S# l, W( q- c
{7 {8 p9 C% q5 z, X) t. O
public:
& F+ U- O" b; l7 {" dC(){cout<<"C"<<endl;}5 R4 i) a; ]% g8 k/ `" O
~C(){cout<<"~C"<<endl;}8 h8 a( m! p( w, G* k& l1 H( p( A
};( G8 Q. x& q4 P' I- Z* ]$ b+ I
/ F; |8 n" }7 h! b. Y% wvoid main()
% t+ ~9 X! {% ]! n4 U" a- O/ `{
: v; E& o6 f9 I( W# U& a
$ N" l, j- A. @" c \. ]A *a=new A();
: v& B! J8 Y N4 n" l9 F% jB *b=new B();+ {7 T; j% I! U6 { L3 x% |8 S W' ?
C *c=new C();
$ T. e9 s$ ?2 {% e$ e! D. IA *d=new B();
4 t' `6 w( D5 AA *e=new C();6 i7 w. H* v. G4 u
B *f=new C();
V& a7 D- ]1 k7 D3 L" L6 R
$ s2 W" h8 _% Z6 U+ H& |% J' udelete a; cout<<"---------------\n";
% K9 {& l; q$ @8 ddelete b; cout<<"---------------\n";" t1 A% [3 R9 u% |
delete c; cout<<"---------------\n";
l$ f6 ]/ f) R# v& [4 b L2 `7 B8 vdelete d; cout<<"---------------\n";
( I: `8 G: \" K9 C! u1 qdelete e; cout<<"---------------\n";
) @6 w8 G2 k. P$ w& n) k& ydelete f; cout<<"---------------\n";7 {- I- X7 H( }8 e* Z/ u0 h( M5 @
}
: Z% A3 \, T& n% F; t这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。# U4 Y+ m0 w: p( c- H% R* `
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
; |8 P2 g) \3 k其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)/ a* d$ ?; Z; Q) S* e
(2)面试的诡异题目7 y: A0 o0 K8 z, E8 h
大意就是如果你 test *p=new test[20];4 k' h6 n: @& V5 U9 `0 R
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
9 d9 [' n0 R1 M7 b; f$ \- c$ {答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
; A1 Q6 ?* J. F
; Y7 C) w! B. vZz3 E. V$ n+ f8 M& C, x
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
2 u" Q- _5 i* Y$ K5 `1 s上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* v/ p" r6 E. n
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
, R' K) J: E |+ h$ a R" y/ O——
4 K& ]2 q: |9 Z7 b, i$ M6 O百度2011年实习招聘专题: ^2 S3 ]( u( c5 o& d
http://www.aftjob.com/portal.php?mod=topic&topicid=22
9 P* K5 v" W1 B6 G% ~; ]爱立信2011年实习招聘专题
- [$ y) ?4 J. | X- Lhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
" U- _* m% @7 v+ J2 Z+ y新浪微博2011年实习生招聘
# ^0 m* I0 T" l; ]0 _1 i4 Y$ @5 e Hhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
" z s. W; B" C3 D, J; q& Y阿凡提招聘:http://job.aftjob.com/job# M- U- L/ ]" s9 t% Z' R
阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag
$ z6 |% b6 [7 r阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum+ v O. t$ p& Y* e2 U1 P" M" X: [
阿凡提职位搜索:
! ]# V, U" c: m; R0 ?4 d! t& L& H+ G—— |
|