找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1136|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
: q, Y6 J/ e0 `; G. P3 \6 q! a3 H  s5 e! ~
Zz
- d" w& Z, x+ m  G; a
3 `1 g  M7 }) t2 w- F' k8 q2 u(1)下面程序运行结果是什么:
4 x8 G; Z( j% ?#include "stdio.h"9 C5 @- X0 p" E& V, n8 \% k
class test% `8 F2 w' H/ l, z$ z
{
( r+ [! T/ N6 E, _6 Dpublic:
0 c0 e: E: N4 n' ^% U; Z* {, T$ Ftest(){}
, x! b! N2 N4 ?( M. wvoid hello(){ printf("hello\n");}
! H0 u# {5 w/ P7 d0 O; M/ N};
* o7 {/ N8 ~- e, p+ J3 \" Evoid main()
0 ~6 Q6 v% ^% r' F+ E6 k2 M" Z1 ?{6 o3 n; s/ d8 A; w1 N* b' k3 j
    test* p=new test();' C9 O6 @+ T$ R& d; n6 |1 K9 E
    p=NULL;# o; [( j3 ?' L5 \6 Z5 ]
    p->hello();
+ n2 k5 a. K9 Y+ K) H}
# ~1 {6 K  F  ?, L) A1 m事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
* y/ n7 i: m/ t- h4 K#include "stdio.h"
5 r6 I' M$ q  e! @. gclass test# T. E0 W$ S2 ~- t, N
{6 w- q/ T- ^3 s+ O: S* _
private:
8 H8 ?0 J! m8 L  gint i;
- d/ H$ E, r! @$ p* Bpublic:7 i) e1 q3 s( }) j2 r( |$ r9 b# E
test(){i=1;}. [) l2 T! ?/ g
void hello(){printf("%d\n",i);}! ?, E! S$ [. @7 E: T( {
};
2 H- C& w/ K/ J# I' R4 |void main()/ \# C0 g7 X* Q8 D
{: C! Y, X7 f: V! ]
    test* p=new test();
+ k: H( X! V- f% }- i) u$ n5 G. mp=NULL;
2 {! H8 T: J* z. pp->hello();
  m* M. T. {- w( o1 n* F* \3 u}
& {  N4 n# C9 q; x# o0 i如果将p=NULL注释掉就无误,就会输出1.
; q" ]: T$ v3 j7 T, {注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
( w  x' u: o5 k+ F. X. U# k(1)C++的构造以及析构顺序
: {0 k; `$ G/ z5 r, A6 j( M#include <iostream>& T& B/ M) S+ Z$ `4 _- \: N
using namespace std;
1 v1 k$ [$ D3 {- g* p) {" `. aclass A& v, R5 y% g; Z) M2 g
{
  ]8 o$ ^$ j6 g: S8 }; g! [public:' I8 q- F6 j% ?' [/ ]4 M0 k
A(){cout<<"A"<<endl;}& W8 Y/ K: q/ u, y7 m$ T
~A(){cout<<"~A"<<endl;}
0 k/ X) d8 I  N4 }! d4 E. Z. d};" C# h) N# }4 B4 [8 n
class B : public A
4 J) M: N2 G* \0 U7 j/ q{  l6 I1 x& f0 V
public:% c+ `/ j+ u( Y1 ]
B(){cout<<"B"<<endl;}: i, ^6 O5 Z3 Y1 w
virtual ~B(){cout<<"~B"<<endl;}, I; v, g9 I# N/ y3 m7 }, I3 [
};
+ ]2 c* S- H% e7 A& ^0 h' f0 [/ Pclass C : public B
* M9 y$ `+ O: v{
1 y0 H# @* m0 K& }  M* k# Npublic:
5 U+ j; i$ v7 s$ L# s6 eC(){cout<<"C"<<endl;}
6 O3 V/ i3 a1 i5 K" B! \! m~C(){cout<<"~C"<<endl;}1 Z& I5 U6 M, L: a; r
};$ i9 h7 F4 D7 N( }8 ~  `7 b

# [1 s' a1 ~% Zvoid main()8 D- B+ |; J) R$ ^/ M' W1 Z* t
{
' B) Z- j! E  ?# g  X, h" q, y% ~: p, E7 z" Z+ L) T4 w! W
A *a=new A();. l' H/ k0 e$ f1 P/ O0 {
B *b=new B();' n  F+ ^, ]# R& P
  C *c=new C();
3 t$ `0 y: T+ e9 h( nA *d=new B();7 Y& z7 i( Y$ N- W7 v, }; M
A *e=new C();
  m/ ^. \6 L7 X5 AB *f=new C();" j* e( N% A# m# G
4 I0 }  k& g. ]9 O  U
delete a; cout<<"---------------\n";* N" r0 o" E- D# p* W2 o
delete b;   cout<<"---------------\n";
, _! p0 e, L+ Z2 t9 Odelete c;   cout<<"---------------\n";
5 I8 I5 r* P3 _$ C: W7 gdelete d;   cout<<"---------------\n";
' ^5 F* y5 v4 W3 q' q5 Sdelete e;   cout<<"---------------\n";
+ l! G6 V, j8 g2 O  mdelete f;   cout<<"---------------\n";
5 ]! ~# R* E. q" b4 F6 h}/ P7 u4 {8 e3 B  N- `- t! E4 i
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
4 S  G4 E5 L( C8 X1 M, C这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。2 l5 V* E! N$ ~: E/ o' ?
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
" G0 J  X; V) e& \7 ~# a1 G3 h(2)面试的诡异题目
) o8 b" ]( U: ?2 u7 _5 V大意就是如果你 test *p=new test[20];
6 O9 ?- Y2 r, v: \7 F/ m然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)  P- G- B2 P2 w! E
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……) ]) Y2 X+ g! T0 G# Z+ ]

% R# ~/ y3 l& a9 T% HZz% E3 l* j* b; t7 D
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html$ E+ C3 |9 V/ W, D# A+ [
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html5 ^' s* L1 {, V
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
1 }/ X6 ]0 ~6 L0 i+ u! }3 Z1 k——
" g8 q/ t7 T, |9 z5 j/ F6 H百度2011年实习招聘专题% P- H. u, c$ m) _) }! S, \
http://www.aftjob.com/portal.php?mod=topic&topicid=22
0 J- }* B" V& G爱立信2011年实习招聘专题
; R/ e& w1 `8 C- e  E/ i5 A& J1 ^http://www.aftjob.com/portal.php?mod=topic&topicid=23
8 [5 s; v; w" g# w新浪微博2011年实习生招聘8 O1 G5 T2 Q( w0 x4 B, h- s
http://www.aftjob.com/portal.php?mod=topic&topicid=21
% F' E' Q9 o5 ]- O, l$ m6 N% u: t阿凡提招聘http://job.aftjob.com/job
, `% b) c% ~( ^. q" G阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag, n8 z% R; ^8 v6 M) F
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
7 w2 y# y2 g0 D; N  u9 Y8 ^+ m阿凡提职位搜索" r/ e9 E- R" p$ Q- o
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-20 15:20

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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