工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1034|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题8 {; ?. G" L* l5 r$ O. N' `& Y7 s

$ |8 F" G) l( ^  b* P2 ?Zz
/ y  C6 K2 b- Y  M; `6 ?4 Q: K7 ^+ I% B
(1)下面程序运行结果是什么:" d9 G- y4 W8 X
#include "stdio.h"1 Y& I7 Z2 g' M5 |8 c3 G
class test
# t0 `: t$ f9 c0 k2 @  @, J{
3 ?; S5 R$ u1 b# g! Y. d& Fpublic:
, X9 S2 ?. T5 n, `9 o: C8 `test(){}3 e9 U( Y' v/ b' |3 ?5 V- x) e
void hello(){ printf("hello\n");}9 E: w7 ?3 M; v7 y
};, X( R! C: f: ^" W
void main()
2 v& u4 s6 d+ A: v4 V6 T{. B" W, `' O5 A$ n/ y2 ^- E
    test* p=new test();# D: K. H- U7 o- U
    p=NULL;, z* M4 h* l" ?- v3 Q- d4 o
    p->hello();" C# h  W% I6 u5 z) `  ]9 ^8 A
}0 D8 \  A% n, R7 D& e
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
9 b, j4 ^3 h& \4 _* G+ F#include "stdio.h"
2 }, }9 h: a+ K! Dclass test
: ^$ U/ P& H. W: N* a{
4 i  Z* x# _. [; k4 \) Cprivate:
* A" _+ n: Y  tint i;; {8 j+ ?: v8 h6 a9 S' Y" ]/ b
public:
6 Q# N' F! ?: O3 ?# z6 W9 Itest(){i=1;}
$ y$ ~1 Q+ p9 Y8 }7 T1 Q. Qvoid hello(){printf("%d\n",i);}
7 t4 T6 q0 a& h1 s: Y1 m; X};
/ i- G1 F# @0 j( M) h4 u  Jvoid main()
  Q  \& f/ Q' r{
! M- {- M' e7 S! j$ [5 u+ C# t    test* p=new test();
, r& K6 S7 @) s0 a, Bp=NULL;! \- `3 _* r3 h
p->hello();! P( m! \$ [1 X: Y6 B5 J* t
}
/ j4 b. B8 \; c+ W5 `5 X3 M! k9 N如果将p=NULL注释掉就无误,就会输出1.
' _1 L2 i) |) ?# x+ u# x% I" {& s注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。) U) B8 B* F1 H8 m
(1)C++的构造以及析构顺序- x0 `6 u, Y2 R0 d1 X0 W
#include <iostream>
- z/ U0 E9 @0 U2 N& P: E/ }using namespace std;) O5 i3 s! i3 ]: H: E" t
class A) Z& x5 t+ u' G& _2 _2 \
{% f$ J9 S, A7 P5 c( g' m
public:
/ k* Y, ^0 E7 b: @& hA(){cout<<"A"<<endl;}
! U6 u2 i3 R' G' k/ r$ b~A(){cout<<"~A"<<endl;}* t) y" W% z$ @; _( @3 _
};
$ B5 N) V5 t6 c1 @2 F. |4 Aclass B : public A
$ s8 y9 E0 u! B* K  ~, p{- I3 o. T. D8 ~- o0 y8 J( r: |8 U. r& i
public:
$ x/ R) E# j, f2 o* @B(){cout<<"B"<<endl;}
6 }; I, {) [8 r7 e3 y6 d! _8 O" [virtual ~B(){cout<<"~B"<<endl;}
6 [1 N3 n/ `# r5 |};2 A( L0 l# s  _3 `3 ?
class C : public B
; W7 U+ z. [( ?' s{
# M) C2 K2 t! A6 s0 ^* _public:
6 B4 F: i1 B, i. n* r. [: wC(){cout<<"C"<<endl;}
4 {! a# r9 \3 K7 K( U~C(){cout<<"~C"<<endl;}
2 s$ c( j2 R; Q. A# w};
( }# g' Z& |' V$ c7 ?* T5 D/ W9 \" c' I6 d# l1 H3 p
void main()
( X7 S' P8 T9 c! a{
  @* L8 M1 g; I: [
* _2 r4 M$ m* `A *a=new A();! X3 l1 M8 d( o3 h
B *b=new B();
+ |- {/ u/ L. i/ r  C *c=new C();7 o. T3 ?! L; \3 T+ I9 X
A *d=new B();
% k7 }0 S7 |% ~  KA *e=new C();
; M* w$ Z1 S  J- q" r  u# {( \B *f=new C();
0 B' v5 z) O1 f
9 `. U7 a7 Y9 }1 m/ a* ^5 Odelete a; cout<<"---------------\n";3 r* J6 z  c4 Y( W6 T. E
delete b;   cout<<"---------------\n";
; l8 G4 U" E' H% h+ j0 s  Jdelete c;   cout<<"---------------\n";
- P1 Z' n' y8 idelete d;   cout<<"---------------\n";$ v6 ^/ ~5 `( F5 D8 A" o9 f
delete e;   cout<<"---------------\n";2 V2 w* K7 t1 _( i- W
delete f;   cout<<"---------------\n";
, }  V# h/ [5 t1 [( G1 ~}6 y  j/ n8 k- K! b$ s- B
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
* R8 E# m" ]8 t2 f, z这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。! y9 J' L4 g! h' q# d
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)4 U0 G, N2 Q) N% D" W: a+ o  G
(2)面试的诡异题目
( K4 S$ f' V: Z9 i4 v大意就是如果你 test *p=new test[20];
: b1 k$ U# B- `+ P然后释放的时候用delete p;会怎样?(明显这样做是不对滴……): j# d! S7 F9 ?7 C
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
) N% e$ R- Q6 x. A/ L* Z
/ f1 ~0 F) c1 iZz+ a# j2 S3 x, j- u& C$ ^6 ?
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html3 `. _2 L4 e: C  T2 W0 V  H
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
' l- g9 C5 @2 g4 ]8 A( i5 o爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
+ f! P* ~: e; t7 W# {. t——
  u% r+ e" Y+ E, f% Z& |百度2011年实习招聘专题: v9 {6 ?: N1 G+ p5 J: j3 _/ |) c- T1 D
http://www.aftjob.com/portal.php?mod=topic&topicid=226 u4 U9 s. t* ~( V7 O
爱立信2011年实习招聘专题
# {% v: _; M8 k; Ihttp://www.aftjob.com/portal.php?mod=topic&topicid=23% q+ b0 d3 `' K: H; i
新浪微博2011年实习生招聘
- B- p% h) m( }6 h; dhttp://www.aftjob.com/portal.php?mod=topic&topicid=211 ~3 K0 [+ A. h0 Z! E
阿凡提招聘http://job.aftjob.com/job
- r2 n  R) [' Y( e阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag, O* O$ y4 j/ ?  q9 ^0 X; K5 d# v
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
1 c' @3 {. b7 Y) v阿凡提职位搜索7 R1 w/ D6 C/ h  X$ n3 z
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-10-20 21:12

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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