找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1357|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题, h: z# I- S+ {8 R" u

- R$ b# x, @+ XZz
; D) l. X$ S' a9 x* r# Y4 ^$ \& a) w  x0 w! @) d* i6 E3 R
(1)下面程序运行结果是什么:
4 Q# [0 j# m( q  X" v9 y#include "stdio.h"
8 D+ a7 I6 N0 z0 B2 sclass test
' c1 x1 x4 a( k8 i{
# U, b. Q: _- ]' ~( A' ^1 |) vpublic:
2 L# M. y: |7 {8 I: Q& ]test(){}; Q+ X9 r; e  q1 t% L1 A8 s8 s
void hello(){ printf("hello\n");}; `, @$ h7 ~; N' V
};3 d. {1 [% O; y" R% e
void main()
, u- }% s, _, \{
: w; C9 J& D8 _' A, m. ^    test* p=new test();
/ e' e3 D6 X2 P6 x0 V    p=NULL;5 m. H% }( e8 B7 A
    p->hello();. ]# Q: u: W  \
}# a  T& p6 ~# {5 I
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:7 @8 u8 C# R, p& O2 @; \' `
#include "stdio.h"
1 G* R9 W$ y  _  i, `class test
% W' F# k' y& G2 H{5 Y' x' d, [) u
private:
- V( a% ]/ B  c9 D; jint i;
/ w0 D& U; }; F8 @5 g' Rpublic:
/ X' A$ Y& e: P) ?4 Btest(){i=1;}
8 I, q. B. V3 {. W. zvoid hello(){printf("%d\n",i);}4 n# G4 E6 C( b* F! e
};5 }: O! J& H- ]0 t  i2 w
void main()
8 o7 E! k& W6 t; r+ x9 X{+ p2 `' G: s, G2 x! j
    test* p=new test();" H1 y: j; t: J* ^
p=NULL;2 }# H$ g& y7 u' f1 Z+ X1 {
p->hello();- A$ W; y. I  c0 H; `
}
2 y3 d; o( |/ F, ?5 D如果将p=NULL注释掉就无误,就会输出1.
% }- [* O) ~; D1 x8 R) \注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。2 ~. L2 Z: [1 Q7 y% L" G: `
(1)C++的构造以及析构顺序! ^3 [) c" X9 O& H6 r
#include <iostream>0 p6 R, E8 l; H. i  [1 f+ Y; x; I
using namespace std;
$ k# y1 q( Y1 c( O) b5 Eclass A
5 Z+ U6 a: @1 b$ u{
6 E. f: d$ k+ {3 B% y& B; x, [5 Mpublic:* q. H) A3 h" L7 H3 f# t
A(){cout<<"A"<<endl;}
2 _0 w7 W& L! m3 G' }2 Q~A(){cout<<"~A"<<endl;}
2 d2 P9 c( P3 U};- U9 z2 Q  a4 x; L; ?* s: L6 `
class B : public A: e* e3 Y3 W7 X- s- t6 c
{" y7 J2 J" c$ b4 S4 c2 J: i
public:
& y5 Q; W2 W4 m# E2 EB(){cout<<"B"<<endl;}
1 q7 N4 S; k0 Q% j3 R" bvirtual ~B(){cout<<"~B"<<endl;}9 j5 u9 r  `  K: F
};9 m$ U0 X6 h- b- a' Y
class C : public B- X$ ^4 W+ Y  e5 O
{
6 R. ~2 z  w! Q. a5 _$ X* Zpublic:1 l$ O. {! y3 Q1 L/ @8 I! ^
C(){cout<<"C"<<endl;}0 u4 Y2 [( Z/ j$ ^" t' w4 d6 l. V. Y
~C(){cout<<"~C"<<endl;}
* q& \2 c4 e7 {' b};
  p3 ~/ k0 s* i
- o# B  p+ Y* j- _( uvoid main()& ^* ~# j4 a3 a" Y
{( h  x6 j: `, |; E2 o. ?
2 [7 P5 r& ~* {, Y* ^2 o- {3 h3 `$ j
A *a=new A();& I* @% Q: Y1 X  v
B *b=new B();
; P; _4 f) \3 l) S7 U  C *c=new C();
2 p- }! Q  v6 ], HA *d=new B();
9 h" ?; ^7 y3 r' b6 I0 ]A *e=new C();
, ^* z2 Y- p( j7 qB *f=new C();
1 k4 r  a3 ~% s) ~  U# z/ e8 \) H% P5 @& y- X- G/ f0 p6 }
delete a; cout<<"---------------\n";
& t: _3 [4 i7 X$ ]* [% idelete b;   cout<<"---------------\n";
0 X$ _, n0 R0 @3 Idelete c;   cout<<"---------------\n";: E! T& w8 ]" }: {+ Y5 q
delete d;   cout<<"---------------\n";
1 B( y  F: t7 Y0 ?delete e;   cout<<"---------------\n";+ T( q, p' P# d4 ~& L
delete f;   cout<<"---------------\n";) K+ S. z' A# |1 Y3 b3 a3 n9 b" P
}- [6 ]( k; j# B
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
6 z( u5 X7 ]5 B& V$ ~  T, L+ t这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。7 d$ `4 l8 f0 B* p) J* \( n; C
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)' x$ T3 B) L% j: X
(2)面试的诡异题目
6 ^  p; u6 k0 e4 |6 z大意就是如果你 test *p=new test[20];
( w* Y* ?/ h3 k3 h: c( L) f! m8 o/ d0 x然后释放的时候用delete p;会怎样?(明显这样做是不对滴……); s2 e- l) _8 R: D1 L
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
& W! v' s' ~( a0 h6 W0 W1 }$ g  z) C" q8 ~* d
Zz
+ y" \* O" M, |" {' d! B* v* v爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
# M! `3 e2 R# z7 I) k$ L) Z9 {上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* d* }: V& `# Z) Q6 H# q3 S
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
! P& f( o0 z5 M5 A# y" `——* }( u* }2 |& c7 u7 X
百度2011年实习招聘专题3 W: r1 ^( R8 [! F' Y
http://www.aftjob.com/portal.php?mod=topic&topicid=22* O, ^$ b( W, ]0 o  S
爱立信2011年实习招聘专题& r" b6 P3 Q- M
http://www.aftjob.com/portal.php?mod=topic&topicid=23
5 e0 S0 [6 P9 o4 h4 F新浪微博2011年实习生招聘- I, `- K+ p7 L5 w3 X+ h; D
http://www.aftjob.com/portal.php?mod=topic&topicid=217 U6 F+ ]( O8 X& c% Q! h0 [
阿凡提招聘http://job.aftjob.com/job
# h; H9 y1 \5 p. j, b阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag, K9 k* G; j. ]$ W$ G  P
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
; z) o3 ^2 l2 O* x, m7 z阿凡提职位搜索/ O: t  s2 `3 i) g) v- M& e% E
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-19 00:15

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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