工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 999|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
6 ?" Z& {. z% a5 z* c
, P5 J' ?4 I8 [8 p4 u6 jZz
7 l# L) t) G8 F, v4 l/ h
( l, G2 W7 T" _2 r: S(1)下面程序运行结果是什么:6 y' q& N7 J  g  B* O
#include "stdio.h"$ u% m) W8 l# z3 n" T' R3 d
class test
& L+ j: ]$ K; d% R6 }{# J. A0 e, ?: Q% @& c/ F
public:0 i4 J. ?( k5 S1 l- @9 n
test(){}
1 U, H0 C! C8 s$ U* I& R, M$ ovoid hello(){ printf("hello\n");}
9 C+ K) Q! y. F- E  A6 |};% F2 T+ M5 U% U$ r1 j6 x/ R
void main()% z& j! a; h0 a1 y) g
{. Q. V; ?, H! u5 l
    test* p=new test();
* o2 k; ?2 B7 }    p=NULL;, O0 R# E6 }! `+ Y5 D6 ~
    p->hello();
# |3 C9 v) v  z6 V' y! ^}
2 U5 D3 ]0 [1 d& a: e事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
9 Q# G# U1 j" \- l8 _/ c#include "stdio.h"6 e3 L; D5 |  V# ?2 {
class test
6 t' j$ h" J/ r! v{
" R/ j8 D  f9 P1 [2 g% j% a, c4 r4 vprivate:
7 w# ^6 w3 d# D4 R& Oint i;
: b/ u' o, {2 C7 @0 U; C, T5 Cpublic:
! H( |) t- G! O" s$ @; w; t6 Etest(){i=1;}+ y8 R8 X1 G$ m( s
void hello(){printf("%d\n",i);}3 X1 A/ M. L" j( A. @
};: J! N5 E0 D/ H
void main()
" F0 J0 ]( E7 S3 e1 Y/ a7 y{7 Y3 Q' @# Z2 p( s5 ?
    test* p=new test();$ T. j( h7 h- D) Y4 ^0 n. x5 ]
p=NULL;0 j* O; A5 I8 k6 [% _2 N' m' [' c
p->hello();* H1 m& R7 }: }0 G* G  U- |! D
}! M$ e8 {2 p; e/ j1 x
如果将p=NULL注释掉就无误,就会输出1.
- i8 }. f( N5 m' U7 y2 z8 v! q注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
: Q! O: w$ f( h( _(1)C++的构造以及析构顺序
/ m5 H- ]6 r* d; D9 n) b5 W+ S" m#include <iostream>
+ |1 y3 F9 ]/ Rusing namespace std;( u+ Q9 z0 x* T% c  s  h& n
class A
: }: j+ _( i% W1 k{
6 A$ W9 v4 o! Zpublic:" y0 u. S. ~" f# h& ^# v8 _- w; @
A(){cout<<"A"<<endl;}
2 j/ ~, `% j; {. f/ A! I~A(){cout<<"~A"<<endl;}
' s- o3 |/ R; U; O7 i3 l8 @};
3 E- [7 t6 y: o8 @7 M0 b2 Pclass B : public A0 s1 X: `# F$ C) T  d
{
+ V; d  u: w0 _# xpublic:; F/ T6 x& q" g0 j$ |! l
B(){cout<<"B"<<endl;}7 U) e9 |% [  m4 Q( B
virtual ~B(){cout<<"~B"<<endl;}
  D+ h& D+ {1 u1 e: |( o};
" Y. p- r3 `# k$ w1 `class C : public B
+ C' T/ y, P; c" H# @{0 Y8 n! y" K9 |3 L+ P: H" H
public:
7 u9 @& W* q- N' Q' I0 |- C: ~C(){cout<<"C"<<endl;}
8 a$ {& F6 A, a~C(){cout<<"~C"<<endl;}
0 c, K1 g7 Z7 g8 S- g6 N9 J3 s};
1 ^* M$ }5 P. r: H4 t" _2 Q
5 P' \; `( R  G0 lvoid main()0 h( p7 |% a. ^4 D1 a
{
2 `, c' o* P. A  o9 u0 t6 b' z$ n! q0 p/ j8 |# n
A *a=new A();( {7 m. T7 w: B2 c
B *b=new B();1 Z5 \# o3 T- k8 u% F: s6 R0 v* X
  C *c=new C();5 E4 s; U6 o& W- X, {
A *d=new B();$ u& f# [# I' i- J0 [3 X, J* \6 F
A *e=new C();
8 g9 U% t) K) z- n5 a- BB *f=new C();
; G( Y  M. b. j# c0 i  b' f3 C/ j1 b/ D
delete a; cout<<"---------------\n";
% x0 b* @4 \& C* `" Gdelete b;   cout<<"---------------\n";  `3 [- G4 ^) F3 D# D
delete c;   cout<<"---------------\n";
8 u: c& a+ }: f. t6 m7 hdelete d;   cout<<"---------------\n";
9 K- ^" c* _* adelete e;   cout<<"---------------\n";2 I0 w+ l/ [) A2 s+ O. N+ S
delete f;   cout<<"---------------\n";
1 a+ @8 Q/ m, {8 q}
% ~% V/ j  C" i/ X" e这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
0 {% F3 j. y% ]& N这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。, R5 V: T: a. X
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)6 J. V+ U- \! z/ Y1 |
(2)面试的诡异题目
7 ?/ y& \+ j4 J; J; l8 h; N大意就是如果你 test *p=new test[20];7 s8 b& @0 C0 A% C( I
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)+ m" D- E, F2 ?2 P
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
1 A7 x2 @# \* [7 ^0 _$ V6 i1 o# _
Zz
6 o+ T& [+ b. `" M4 n爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html. v+ e) m( q6 g9 G: a1 H; D: W
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* Z* }+ }" |, ^* B6 ?
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html5 {4 I( s: _# |' @" c, N
——
" H, S4 m, e+ N9 |6 N. Q百度2011年实习招聘专题- Y' R) o. M' s/ q: |- e# \2 W3 e
http://www.aftjob.com/portal.php?mod=topic&topicid=22# \" W6 W% [% H/ l
爱立信2011年实习招聘专题( X9 G0 m4 r$ s
http://www.aftjob.com/portal.php?mod=topic&topicid=23
/ d- F0 X# m5 i+ w4 ^) n新浪微博2011年实习生招聘/ d9 X% P$ }, V7 t7 S* }9 t! B
http://www.aftjob.com/portal.php?mod=topic&topicid=21" P; p+ G/ \- w3 T; L, r
阿凡提招聘http://job.aftjob.com/job/ m+ Q7 l  Y  x
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag4 o2 u6 }& x. X; J
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum( G( T: N5 |% g5 F" ~/ y8 N
阿凡提职位搜索$ l, N: r9 p: n# ~" Y
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-9-16 16:29

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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