找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1289|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题; c! V, h5 c' V* j3 u; Q. S+ {

1 S$ ~" i4 v2 \6 L5 LZz
0 ^- t* ]7 d( O! A0 o9 g8 i! |9 ^7 L- v7 `8 B) N
(1)下面程序运行结果是什么:2 V* `( R0 H" \' f  u3 _7 D. y
#include "stdio.h"0 N5 o7 K6 Y6 e$ [
class test
: q$ @( H$ [: c{. T0 r3 \9 t* e
public:" Y$ p( K; M9 _/ v: p) z
test(){}( p& H* a. ^% [3 T* s4 u
void hello(){ printf("hello\n");}' P3 L; {" g. q1 W* o( L
};
* K' I2 I8 h# d/ }' p" J% s1 kvoid main()6 a) @; M5 Z, V7 J
{  w+ R# O9 }) u" h8 c* p
    test* p=new test();8 L. S5 @; E3 r7 L0 `+ C
    p=NULL;
* P5 |9 K: z6 |' R7 G* g    p->hello();1 B0 a( P- l7 |! a
}+ ^' D/ N0 o& a
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
6 x2 s6 \: H; h& Y9 Y1 u/ c#include "stdio.h"% ^  d! s0 n5 I
class test) C. A: d0 s5 k5 ]1 n: d5 s2 y
{
1 Z7 R7 y: N) M3 H( Cprivate:. z. t: s, W: E, |3 a
int i;) y& l# ?6 J/ @7 g8 y! @; T- L
public:
5 `6 l4 l% }- x1 q6 b  w& ~) ^test(){i=1;}0 h" r$ @! o2 q, D, q6 j
void hello(){printf("%d\n",i);}. Z" `. D9 v8 `; p
};$ g) _+ a* k2 e( C. ~* A$ m
void main()
5 e0 L+ O$ A) \$ [. r$ |{
8 s2 M1 y6 S' g6 C2 G) w0 ^    test* p=new test();% t7 q) i) s: Q7 p
p=NULL;- t$ x$ g! N! y! t" l8 U4 z
p->hello();
) L4 p) v* I& Z' t/ x5 u}
( L2 {; U" T( }+ N; z, u# V如果将p=NULL注释掉就无误,就会输出1." V1 C# U7 v7 Y/ E
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
% m" C, w/ v* O( A5 i/ e(1)C++的构造以及析构顺序" I2 O. e/ ]' X. ~8 H& p# \% p
#include <iostream>/ v% B0 v, r$ e/ G3 `: F
using namespace std;
4 c6 g( P/ M5 Q! A: i; X. Qclass A
7 V5 b1 Q; C4 Z6 }" |{
1 ^# Q; t) e. Y3 M7 s- m3 A% R% l2 y" Cpublic:  g+ S- I  |: T  T- J( ~& i
A(){cout<<"A"<<endl;}
1 Y+ h. q5 s3 p6 f% B+ O~A(){cout<<"~A"<<endl;}! N3 O- S  T6 W2 V
};
# o3 A9 P/ @4 E# xclass B : public A
/ I; k: |  s, Z5 n{
2 O# o# o9 a, {& t' kpublic:
2 v0 @3 T  ?1 \( E' s( i. dB(){cout<<"B"<<endl;}& E0 D! D$ P( T( w9 N9 e. A
virtual ~B(){cout<<"~B"<<endl;}
) B4 m' e9 n7 t7 l3 x; `+ I& q};
4 w# Y% H8 N+ cclass C : public B2 k. [0 O! t4 f' U9 Q( b
{
. s8 |% _% X& I; x4 Z. tpublic:
% q. c; i5 @  J+ [; [7 |C(){cout<<"C"<<endl;}
* i( f7 x& g/ T: x2 b3 c9 R: W~C(){cout<<"~C"<<endl;}% d' g- k3 W  q8 A
};0 [: [) k. T/ R
0 ?, ~. N7 W9 k
void main()
  N" R, d  ]; l# R{9 A  W% u2 G( ]) W: m/ M% m

. [* \/ p: Q# j8 q* o1 [A *a=new A();
8 Y, _" d6 ]& z9 xB *b=new B();
0 n% m) z1 p. x5 G: B. d  C *c=new C();
1 k# L4 M& X% i, DA *d=new B();
/ D0 ^$ Q- e3 TA *e=new C();
. @4 t7 r+ K, B2 A0 v3 F. eB *f=new C();
# u# t3 K$ Q+ k% y( e
8 m9 W& N! X* X% ddelete a; cout<<"---------------\n";
0 S5 i4 G. i; ?delete b;   cout<<"---------------\n";
/ T7 G' M  B7 h0 ?0 h0 gdelete c;   cout<<"---------------\n";1 k) N6 N6 ^( }
delete d;   cout<<"---------------\n";- o5 C. F, `5 ~' E/ z
delete e;   cout<<"---------------\n";# \! ]9 A3 C  B
delete f;   cout<<"---------------\n";
& W4 `# ^6 i% w. b& g/ \}
- W2 i; A9 h% T4 J  h' M! ]这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
- A9 ?" Q  I$ O; A3 F2 s: \8 h9 M; D) [6 p这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。% E' \! ]/ V4 H# x
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
4 G& ?& i. J# S(2)面试的诡异题目, _; W+ d6 y' W: R
大意就是如果你 test *p=new test[20];$ l# S7 [6 i: Q* _; @
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)9 J9 _" f/ T4 f2 d2 i  e
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……) O0 ], ?2 k: V
; Q0 m9 D; z/ I* }7 j
Zz
% l4 V8 n& U+ r! s- p爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html* O0 s* b! o8 S
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html) t, v) B* H- e  ^2 p
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html3 I. ?; k/ D1 P9 b' m! _
——( m) K; F1 T9 t7 C0 ?! k/ I% ]
百度2011年实习招聘专题
8 \  s  c5 w  W& e0 nhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
; E7 j3 h4 U* W& {5 I1 A' j, G爱立信2011年实习招聘专题# @# A; J3 k2 ?( I% ?1 C; B) h9 @
http://www.aftjob.com/portal.php?mod=topic&topicid=23
% T1 I- _' Z2 f+ l" i; d3 S) M5 l0 r新浪微博2011年实习生招聘
" x7 c1 q0 k  a/ _! t9 f% a/ s; t( zhttp://www.aftjob.com/portal.php?mod=topic&topicid=21& t( W( d! C& x* X/ N( D2 A9 f
阿凡提招聘http://job.aftjob.com/job
( M: a8 L- Q  b$ M9 g阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
+ \, H2 g! g. ^# a阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
+ w' M* c* O: R0 a, t* q/ g7 P阿凡提职位搜索
0 Q$ Z9 U! w" ~——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2026-7-11 23:26

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表