|
|
2009爱立信面试题5 ]6 S8 A" H; r' W
$ ?& y* s( {) x, {! L9 HZz6 h! O0 X6 i! W) d! \
# y0 h, v2 q! v9 P% V1 F& ]! {(1)下面程序运行结果是什么:
' t4 j4 ~2 x/ J& y* T& O& M#include "stdio.h"* E: g" M1 J3 c" m7 @# Z/ M
class test/ e: [+ p( p6 B8 Z3 S6 N7 Y7 ?
{
7 U/ Q& t9 w% v" ^public:
$ b/ X, }: `- Ntest(){}( l& ^) O0 ?: h3 s1 s
void hello(){ printf("hello\n");}5 c2 Q8 D: G; n1 @9 O. r, ^
};9 ]- |7 ]5 a0 }# |2 ?
void main()/ ^/ S/ d: N3 j* \" R( T
{9 }+ Y$ W ` I3 n* l5 ?. v2 T$ [
test* p=new test();
8 n, W4 Y: f+ G p=NULL;
8 Y1 z+ X u+ @ p->hello();% w- {& P4 N# a4 P- l n
}
8 L" |7 o1 M! b事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
3 h1 k9 X! I7 {+ Q. B0 M#include "stdio.h"
' w! l8 K' b v3 _6 L b hclass test
* P- U, A$ E. x. R/ l5 F6 z{ `$ ?8 l( c! B. Q# O& p0 }
private:, B9 p) c) U6 t
int i;
! z, L* b( T3 R. D0 d) F! zpublic:# r5 L" i4 b6 D! b0 m8 {. G0 F
test(){i=1;}, ~0 F! n7 u e
void hello(){printf("%d\n",i);}* w+ K; G9 y8 g
};! v- [3 ]8 X4 f- v1 F
void main()
5 |- q3 T. L7 } W) z5 F. J{, B$ v1 l C L* E& x3 c+ ~: p4 B
test* p=new test();
& |' A, @* q7 q; V& Up=NULL;
1 o8 S/ w! M( ?0 j; mp->hello();
& \2 x, A" j5 ]2 W8 }} g5 O3 F1 R" }; f, m
如果将p=NULL注释掉就无误,就会输出1.9 U2 \, m- ]# f) P
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
+ z8 \! F u1 C! |6 M% A(1)C++的构造以及析构顺序8 _ K1 A C& @6 g T8 h
#include <iostream># `" T$ C: t. S4 H
using namespace std;, ]% h4 w3 _5 k- I8 p
class A8 v, ]7 f) j6 a& `8 O6 _
{6 B' Z' n. ]. ~: v
public:. K: M. ^. h1 V( [; s* u' N
A(){cout<<"A"<<endl;}
+ p* s f7 S- c~A(){cout<<"~A"<<endl;}
% e5 h, }7 ?7 w$ t1 H};- m7 B) t) O) {
class B : public A
, R" U0 \8 D' v" Q9 b7 b{/ W( ?7 e8 f, g
public:
. K0 V6 m# D" HB(){cout<<"B"<<endl;}! s% \( H# d- K4 F4 u
virtual ~B(){cout<<"~B"<<endl;}
/ @. {' f/ x F# W};
8 T* x" L9 u, Q4 `8 Bclass C : public B
/ O f8 O' d$ x) o4 H{
& @: @* v* ]+ T, ^1 Z( r, N- ppublic:
* r& U. f3 j+ z; RC(){cout<<"C"<<endl;}& |; O4 _9 S7 l G& d
~C(){cout<<"~C"<<endl;}
, R) m/ `* e+ I: o) ~};. F: m: i" v3 l. i' E! O
* i; X+ b) F. S/ i
void main()
/ A; ?1 i) P: O+ S{* G- o7 _& z. [ W
. s8 S' b w8 H" ]- z7 d" m3 T( DA *a=new A();
r& @/ b, r4 h9 m+ f1 ~8 Q1 `* v& fB *b=new B();# V& b0 T a4 u0 H6 P
C *c=new C();! C) v" `7 p5 J% S5 r$ \
A *d=new B();
" N3 j! U: J$ u! q# D$ ^0 R2 M5 jA *e=new C();0 {! R( I7 k7 n7 d" u: ?
B *f=new C();
& |8 c: W0 \" g
( M8 S- s' M. ~5 p8 e1 Zdelete a; cout<<"---------------\n";% z& p6 T: j6 L' I
delete b; cout<<"---------------\n";
& l5 D' O9 s- ~, a2 u cdelete c; cout<<"---------------\n";
- G& t9 l s8 Q X9 Bdelete d; cout<<"---------------\n";0 T( u+ Y9 ?3 n8 l
delete e; cout<<"---------------\n";
0 D' @$ T1 k6 `4 s8 Jdelete f; cout<<"---------------\n";
0 R8 p8 H/ `% ~6 X" S" F}! I( f$ j' o+ T- @- u2 X
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。6 J/ v9 o8 }, O2 L2 _7 @
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
a" k1 r+ a9 `/ F' c1 M其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
- _: D9 h8 f5 H* A(2)面试的诡异题目) l% `7 Z/ I: Y3 l) P7 L
大意就是如果你 test *p=new test[20];4 E5 W* G4 M% `: i4 [; u
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……). ?1 w3 a1 ~& [
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……% i- A7 X& y. u% r) P
# J4 |% P j4 h& l
Zz. j) g& s1 z+ o) P
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
8 ^* R7 ^: Q9 ?; h' j3 n上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
; y8 Q! ~; `& U/ l, R9 \爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html. c; i0 Z; p+ c% g
——# M1 @6 [1 q$ s- V; F
百度2011年实习招聘专题
9 m# S% r" W( W" I3 s. Ahttp://www.aftjob.com/portal.php?mod=topic&topicid=22$ e7 T& Q1 b& }8 j& |
爱立信2011年实习招聘专题
& c7 `& C! d" p5 _' G) ^http://www.aftjob.com/portal.php?mod=topic&topicid=23
# [ z' r+ Y2 b% u新浪微博2011年实习生招聘
& n; z6 | V( ?( c$ e7 Xhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
7 _/ T% p( e5 w7 [( R5 A! f阿凡提招聘:http://job.aftjob.com/job
- k& A0 y) n* D$ y1 g5 h" {阿凡提热门关键字:http://bbs.aftjob.com/misc.php?mod=tag, G. a* W. u: m* K. \* a
阿凡提内容搜索:http://www.aftjob.com/search.php?mod=forum
- Z* L0 l/ n, k: e9 @阿凡提职位搜索:
4 C( m% c8 P E4 f& J—— |
|