找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1228|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
! ~. B% X6 E7 ^2 L7 M9 q  P0 w# E
Zz
/ M1 m: k' Z) Y+ d7 i- v0 v$ G/ c  M3 o
(1)下面程序运行结果是什么:
1 W3 ]  J! S6 D+ O' L5 h; P#include "stdio.h"
$ d  C; q+ n1 f2 s' m9 H+ lclass test
9 c0 A4 l6 W6 `% V3 R5 y/ Q* O8 y{5 U# Q6 f6 i% g( z- p
public:
; q  V; }1 I% V5 _8 d$ ctest(){}3 v3 C! n; l, w! [2 C
void hello(){ printf("hello\n");}
" }# `5 w  V& y/ b. s};
' C" d0 T- l0 [  m* d" Q. Tvoid main()! L* ^6 S8 J7 s* e
{
' V9 d% T/ x/ V    test* p=new test();% w  h" R, O3 ?/ q
    p=NULL;
8 b/ Y4 k; V# Z+ I# }    p->hello();2 m9 q& T7 ~; @) l9 I
}8 a7 l: C- s8 e7 |' {' t7 [/ e  Z
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:5 l: h  h9 |/ r- N
#include "stdio.h"
8 C' q% j6 Z: B% zclass test& D/ t2 K' w% v+ e, c, L+ |7 x
{
' \- Q1 O6 i/ w1 `private:8 B5 g( g3 j4 ^
int i;
0 Z4 O( H$ Q$ s1 g2 A; `7 N$ apublic:% L0 a' x1 `9 H
test(){i=1;}
+ e: j2 t& I( F7 `void hello(){printf("%d\n",i);}) W6 g  N( }; m6 {: g8 u( x
};
1 r1 {" {: N$ q0 uvoid main()
5 w. o) O( u% i( r# G' S! M% j! f{, p7 f  X6 X% @  L
    test* p=new test();
% c/ v( G  y* Q! k. G0 Y# Ep=NULL;
' i) Y. h4 U  w8 }0 H3 M8 Kp->hello();
3 K, p# @7 `  P8 r6 v' ~}& F2 Q9 I3 V0 ~( p9 N5 {% R+ @: D
如果将p=NULL注释掉就无误,就会输出1.
$ N, M, D" w2 B6 _注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
9 ^0 T3 J' Q9 U(1)C++的构造以及析构顺序
2 y% X& `1 ?$ N3 n4 ?! a#include <iostream>
7 h" R4 K: \- K7 ?: G3 t2 Wusing namespace std;
3 ]: N9 f* `( s" e$ Qclass A
+ G) @& B/ R- p7 o" t% g6 ?{6 m0 n$ b6 n7 d4 }: p! ]* L1 g' R$ X
public:# C. Z' ^* D8 K2 T+ s
A(){cout<<"A"<<endl;}
7 A7 S  o0 L9 G0 i5 X# y& S~A(){cout<<"~A"<<endl;}% a7 b0 e% [- S' U
};1 B4 B% t6 ?7 U6 E% f" c
class B : public A/ y  l9 i% c: {* b7 P" x& q
{
+ N( F- Q& s" s( e+ fpublic:
! P# b  r, f  ZB(){cout<<"B"<<endl;}! U0 ~6 u7 \& g( {
virtual ~B(){cout<<"~B"<<endl;}
' E" j. \8 q" a5 X5 m# Z$ z8 T};
% y- g0 f+ C( F$ b! nclass C : public B
- G( m" X0 W" k1 \" _  w{
9 h6 D! E* B/ Ypublic:
8 \) a+ g' D# P  e4 LC(){cout<<"C"<<endl;}5 d+ ?+ a0 p* G, x. {$ z
~C(){cout<<"~C"<<endl;}
" K8 N/ _0 v0 p! x* j};# H% R6 }; f& y6 h+ u" k

+ Q5 W. u% u  ^, q, \void main()9 K& O. V) R' d* V+ H0 m
{: C6 @* o6 n  Q, r# |# b

; K1 S6 k0 {+ Q" m) OA *a=new A();/ b. P0 H. U. N
B *b=new B();! |4 T7 G2 P9 c  Z$ k
  C *c=new C();
+ H- ?! V3 m' ]6 P% y, [3 ^5 F" \A *d=new B();
% C( z7 g1 j, J* hA *e=new C();
1 l! a1 P/ c# K) q  Y: m3 tB *f=new C();# K6 }  t8 {! J3 t
/ }" ?0 k- k! {$ }
delete a; cout<<"---------------\n";1 r) Q* V( D1 \& K* e4 T
delete b;   cout<<"---------------\n";8 n, A4 U3 }1 N" I
delete c;   cout<<"---------------\n";
1 e' |+ y2 @  Fdelete d;   cout<<"---------------\n";, N0 E: q9 u6 H( a
delete e;   cout<<"---------------\n";
) z" U- ~+ U* d0 R% qdelete f;   cout<<"---------------\n";; w" B5 C! u- R  W
}
8 Q: D8 k0 V3 o" x: u这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
5 L7 K$ H! Y" o# Q7 j, [这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。3 z  \0 h* j( u9 k" r! h2 @' ~; i4 s
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
: Z4 i' W) k$ ^& G% G(2)面试的诡异题目
% w2 k9 a0 @+ T+ z- B, l大意就是如果你 test *p=new test[20];
3 z5 f$ P9 d  _! G然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)3 P) Z2 K  N* v3 m& p  e  \2 D1 s
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
8 j5 J; S, H) r& f9 c. u( N& p+ ?2 R" i
Zz
% U0 [# \: T* s3 ]( b爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html/ Z/ b- _: `+ S, m; \. Q7 R- u
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html& I8 ]3 ]6 S9 u9 t
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
6 }1 p- Y0 V: p' t& P——
5 _# d& `+ [" Z$ w- K百度2011年实习招聘专题
. M& X6 q9 O1 u! A! z& ~http://www.aftjob.com/portal.php?mod=topic&topicid=22
& d* o7 G, v: E' e$ U爱立信2011年实习招聘专题: ^7 m/ j; I& h) u
http://www.aftjob.com/portal.php?mod=topic&topicid=237 |: H  R* h: }  V  I+ Q& _
新浪微博2011年实习生招聘
+ m3 E2 B$ C% Z* I. X( e# @http://www.aftjob.com/portal.php?mod=topic&topicid=216 ]! q6 S: R! r) i) E# G+ \6 @5 c
阿凡提招聘http://job.aftjob.com/job
- `3 K. d9 W8 F7 a阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
- X5 d1 e. c: \$ C阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
8 A9 e& {! \- u# l阿凡提职位搜索& ^2 T* F# s' P
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-14 14:15

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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