找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1353|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题- s! X/ H2 q" t( I

1 N" X* }+ p2 @+ O7 M7 e9 GZz$ B1 V' Q( `7 Z# S6 D- C# q
1 d0 K* z: q  D: t5 J: F5 `
(1)下面程序运行结果是什么:2 G8 j/ V. P. j7 v3 E  B
#include "stdio.h"
4 i' G) Q% q$ N$ cclass test* W3 M8 F4 E& G7 L, L. ~
{
' _2 c! t. A# i5 H) M; }$ y& ppublic:0 ^# n9 {% m0 n% [0 I
test(){}# |) g) ]+ h9 A7 O% W% S% h: z
void hello(){ printf("hello\n");}
/ v4 x: n. B" Q4 P& f# w# \( ?% t};
; V6 Q, p5 ]4 L8 fvoid main()
! S$ _+ w6 n  l7 q$ ~{9 l( E* b# g. H2 Y& R
    test* p=new test();4 m, I. ?3 O5 J$ L8 ]6 I
    p=NULL;
& |+ Q+ H- q# F2 |' x  L& ^8 g    p->hello();
' @$ m( \2 H$ u. K' c6 g}
3 Q+ e( N0 }& d) q# w事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:9 q- Y8 A0 w* T. F
#include "stdio.h"
2 W0 l, a- O- \class test+ |; I  F) D& i4 k6 r( M
{
0 n! p$ j$ U3 R1 N) Gprivate:- n- z' u6 m3 ~) H
int i;
0 {# n4 {* P8 ^* `) Hpublic:
! b0 v& c+ q  a; o3 B7 i4 ?6 ]test(){i=1;}- E/ A" x- D' h
void hello(){printf("%d\n",i);}
( e3 a( P; e, a, u# z2 E};, F* x! m# z+ h% K2 g9 _5 A
void main()
, V# B- X) X( \+ y  p& c{
% g: ~: E: ]0 H8 _9 R: D  ^    test* p=new test();
* S$ T! H; B2 Q) Y, K, {p=NULL;; Y, g( g0 d! V# R5 w% h
p->hello();' c) w+ A5 P; r( z* |. k
}( e. [3 E  W& {+ s9 s  D8 }
如果将p=NULL注释掉就无误,就会输出1.( ?* j9 ]  P: E1 R5 g% K
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
( Z% q9 [! H/ K" E* H0 R9 J(1)C++的构造以及析构顺序7 J4 c2 P/ Y9 z3 m' H
#include <iostream>
. s) ]" M- E* l/ m4 R1 nusing namespace std;
: w  P0 A: B+ D$ ^class A: u* Y2 z* G: i) `/ r! z
{
5 c# Q6 \1 z& Z" G  ?public:
% ]1 \" L# X. uA(){cout<<"A"<<endl;}
; k: T# c( C0 F) i+ g~A(){cout<<"~A"<<endl;}; Q, ^6 h- k! J1 h$ c
};$ p! k# k1 E: s. ^/ y" c# G
class B : public A* _9 w3 q# ]: X2 j  \
{
+ u0 {) w2 ?. n8 h" P+ Z* S0 Upublic:& @; V8 Z7 z9 f& h7 b
B(){cout<<"B"<<endl;}
; ?5 I% @+ L9 v7 J* q7 I, L: ]2 Tvirtual ~B(){cout<<"~B"<<endl;}
& Y4 T  u2 ]1 S};3 n; U( E; Z; l
class C : public B
( i7 ]" R( \! |6 Z{$ h3 [$ e2 v; Z6 [" z1 S
public:/ G9 I5 A6 K0 ~* f6 k; M
C(){cout<<"C"<<endl;}4 Y7 H# |* m/ {1 }- }
~C(){cout<<"~C"<<endl;}
4 R7 Q- o+ ]. x3 ?( l0 }+ B};
; X# }; ?: `8 z- |5 v0 s
& @. y/ x  t" E9 @" }: V  i0 Avoid main()
1 x5 E2 l3 v) ?4 Y8 K  @) p% p5 d{
6 x/ o/ x7 [& H$ b+ T, f4 @3 E; j% ^/ b* f
A *a=new A();
& z) Z# L4 |; MB *b=new B();
% s: Y: I! q4 i, q/ M  C *c=new C();
; z( b, R: g& k/ U- j1 B" L$ sA *d=new B();* @! Y% F- l! L4 t% h3 L9 J7 f& ^
A *e=new C();; W+ c$ t0 E2 s; ~; x& f! h: l
B *f=new C();6 V5 ~! U& r: m0 @
2 Y; a9 }5 q) ?2 C2 ^
delete a; cout<<"---------------\n";
$ H6 k) L8 T& Rdelete b;   cout<<"---------------\n";4 G/ Q1 T, E9 T: |9 v) r
delete c;   cout<<"---------------\n";
, Q! ^3 s+ X- b) D0 p. D- p+ adelete d;   cout<<"---------------\n";
* l" w" `- q. a  _, \  Y# y. F9 rdelete e;   cout<<"---------------\n";
& k' h  G' g) o/ t5 p1 W5 hdelete f;   cout<<"---------------\n";
- p/ v% {' n0 v( ^2 m}
* E& c6 R) Q7 A8 u) ^: ]8 I2 o/ ]这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。1 ^' s. n0 x. j1 z, j
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
6 e/ j- y8 v1 a' I: C/ \) y; j0 B其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
- I0 ?: W4 O* F' @6 I4 m(2)面试的诡异题目
0 c) G4 f7 y+ u' q/ K5 v4 ?大意就是如果你 test *p=new test[20];$ w8 R# t- I% y3 d  h
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)( }  J# [9 V% M! T6 V$ f
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
% ]9 \" Z/ K: ~# f7 N
9 T6 ~( m( X; Q# F8 WZz# X) z( P- N; M2 b+ {% j, b$ j
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
- H+ J2 ^2 V% H, Z- j) [上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html$ A$ n1 N: g4 R3 [& o' o) `
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
4 `: K2 \7 a3 R7 Y/ w——7 I$ ?8 D+ F, S
百度2011年实习招聘专题0 T* @# E, G. Y9 ^' _" ]5 a
http://www.aftjob.com/portal.php?mod=topic&topicid=22
" }) o+ Y) B; e% {3 |爱立信2011年实习招聘专题
. F) o" Q* b4 a8 |4 khttp://www.aftjob.com/portal.php?mod=topic&topicid=23# Q# Z9 S  U" V! S- N! B: A
新浪微博2011年实习生招聘
8 Q+ G1 \* m$ [0 v  ^http://www.aftjob.com/portal.php?mod=topic&topicid=21
6 H7 b3 Z0 [) q* `1 g, }& c阿凡提招聘http://job.aftjob.com/job
9 J1 Y# W  s# C/ Q* X) @: M& J' {) u阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag" E- M$ U! _, m; r; l  D
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum' O5 Q5 i2 U9 i
阿凡提职位搜索/ l# v, ?& a+ m  |! U0 \
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-16 23:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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