找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1260|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
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——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-30 02:04

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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