找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1242|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
' V7 I& p5 E- Y+ O3 ^, B' s- k2 Q) o' Q3 `; t, h
Zz+ `2 O( q' {- O" F5 }" K. C
# C2 o( X. {" e. S: J
(1)下面程序运行结果是什么:% c* c3 }4 p0 B( Q0 s
#include "stdio.h"$ I( C7 @' M. E: n* D2 [4 a% n0 M
class test
. T  D2 ^$ A) r1 b7 ]{
% y0 \5 U+ L8 ^$ ~( kpublic:1 f. m3 a- z6 K2 j6 \- I
test(){}8 e: X2 l3 {1 G1 F3 y
void hello(){ printf("hello\n");}
4 R& I0 V  k8 X3 x1 Q};4 c2 w0 Q9 m: W# ^" P
void main()
, r5 A0 a4 J7 h9 d: n4 U) E4 b{
! W9 p% I* P5 @/ _( N% W9 j    test* p=new test();. ?  ?* v# ^# ]( Y9 K
    p=NULL;* ~  u+ L* k4 W5 y. P- `
    p->hello();
1 P! U' F8 z2 k7 l5 A* Y0 ~5 t}
  A: T5 d! G" j, B7 L事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:) @( X7 m7 ]3 p; y- N$ M
#include "stdio.h"
: R1 x& [/ q! V% X. M$ S5 [class test
  m9 l9 T1 A8 x{
6 Y% F' n' h$ C: v0 O9 [private:4 ^7 L: Q/ r- M$ O
int i;. K9 Y: g) K* n: z; S' A9 s- i
public:* D- j% ^$ N3 b5 L  {7 c6 d
test(){i=1;}
" [  F' _7 v- |. X+ yvoid hello(){printf("%d\n",i);}
8 w& T/ H5 x/ Z8 l7 M4 r' P};$ Q$ g! Z; n6 R1 C0 x6 w( J! C
void main()
7 J" B( r0 `( F- z: d{
8 B6 L7 b" V' G+ k. J. ~    test* p=new test();
& y# E8 |' M$ _/ w1 q, s0 vp=NULL;" ]2 Q1 L& r( Q0 F
p->hello();& v' g: F/ a) n, @# l
}
( m4 y. H6 o- ?, Q: n如果将p=NULL注释掉就无误,就会输出1.9 r/ E7 N5 _& g/ d* G' L% e9 ~4 h/ ^
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。4 T8 i) a. Z2 q7 P8 p
(1)C++的构造以及析构顺序
5 Z, l: L5 w4 m5 P* j! r& B7 r; u#include <iostream>
/ [: Q/ z$ b: l1 r8 Eusing namespace std;
" K9 |- `5 B3 Yclass A' O7 X4 E6 Y' A3 p/ p7 N* S: j3 D3 L
{' z9 T; u$ o. W2 j4 Y0 `: U0 `
public:* W0 g. J( X  _
A(){cout<<"A"<<endl;}$ f0 f# t6 L# {- s. z) P
~A(){cout<<"~A"<<endl;}
! Z! a) B  c/ d( S};
+ [8 x- i$ \& z1 Mclass B : public A
, O+ W' E# z5 |9 A{6 P& n: Y$ J; V& f! @) i( p" c
public:
. y# w4 p$ O: w9 o' oB(){cout<<"B"<<endl;}
5 r+ @" s" w/ ^  `- w+ ivirtual ~B(){cout<<"~B"<<endl;}$ Y+ d2 b: S8 W8 W
};
  }3 g1 ?" C/ r, R1 d: Xclass C : public B
8 D  M1 S% l; c; D8 `* ^4 [{
3 A: B1 v3 M. n& }public:0 r% e' U4 ]% N! S( o2 ?
C(){cout<<"C"<<endl;}0 e  X7 S# A6 l
~C(){cout<<"~C"<<endl;}
  w  R& Z! S( w};3 d) }5 K! f; Z3 z$ |, J$ b. o0 z
. P$ l& P3 N7 M2 Y
void main()
6 R$ e; ]8 [# K& X9 e6 K{' [- j2 T( N+ P. Q5 i' o

9 U7 z3 {6 ?% V; g2 R$ I! S5 A  SA *a=new A();
# h. r2 T, j1 t' NB *b=new B();
, J% A# ^+ \9 H) G3 R* e6 {  C *c=new C();$ U9 ^( C5 z1 F" j
A *d=new B();
$ u4 m9 m3 c  ]; P# T0 {/ ]A *e=new C();
& Q1 v: I3 M- g( e) K, M, a9 MB *f=new C();
5 k0 ]/ u# \. l5 ~0 L  L3 M0 m% X) L* H- m
delete a; cout<<"---------------\n";
% n) O6 r  {( O  D8 Ndelete b;   cout<<"---------------\n";
4 l& S/ W- P8 Ddelete c;   cout<<"---------------\n";
' e, _1 M/ Z: v$ Kdelete d;   cout<<"---------------\n";2 ^+ U2 _  u; u  s# R' \
delete e;   cout<<"---------------\n";
; U8 e( Z5 k0 @9 T7 p/ Tdelete f;   cout<<"---------------\n";6 q) L, k0 o: n  m- p
}# c( Y* D0 [6 V! v& }. [
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
  f9 p: w/ J7 k0 i/ q$ @这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
" ?0 o& j1 k; c% e0 |其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
1 ~" d0 L% E8 r+ q$ a6 }* O, B(2)面试的诡异题目& r( O! }, E/ E/ k2 I1 T
大意就是如果你 test *p=new test[20];
! @& ?# G6 ]. c0 K8 _8 {' Q然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
1 Z. K9 H) ^9 f5 B- _) {) [6 k. w, Q8 Z答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……' j/ @# V, M. y$ j. n
; I& `8 y2 L) \
Zz% Z6 K9 E: O" O
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html+ O- c% t, Q% l; H4 Y' ?
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
8 |9 ~5 ?3 l2 {爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
  z9 z0 |. s) d9 u  p——* }% v( n4 {) |% U
百度2011年实习招聘专题
' Z- V% N$ {- b4 @8 o/ ]9 j9 Jhttp://www.aftjob.com/portal.php?mod=topic&topicid=222 {- ^; @9 g! ?
爱立信2011年实习招聘专题& v3 ~" N7 C! F( l0 \
http://www.aftjob.com/portal.php?mod=topic&topicid=23
3 G; L5 q1 E3 f0 |) Q. G新浪微博2011年实习生招聘7 [$ J( [7 ]& a/ a. p) o
http://www.aftjob.com/portal.php?mod=topic&topicid=21
0 \. Q# m5 m% b, t3 A9 t阿凡提招聘http://job.aftjob.com/job5 r. y6 O3 g2 T( c3 O! D. b8 E
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag9 o3 s3 k" P3 u0 w9 ^
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum( p0 j- k9 x3 X$ T8 T5 _
阿凡提职位搜索
9 I- `1 h, _! K! w1 [——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-22 06:17

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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