找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1128|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题. M4 S  v& X4 y/ ~; J
' Q3 q7 }# N1 g& b9 c
Zz
5 `- T- A% E/ I9 i4 a1 G9 E- n
(1)下面程序运行结果是什么:4 \, a* F" U$ T% Y$ k) m
#include "stdio.h"" X% B# l( ~, Z- w3 T. \4 b
class test
6 O( G" F, {8 {) v2 X4 j{
" v* g4 K8 A; N& j; i/ @public:# v, X6 a5 i8 u0 J: h2 H6 S; u
test(){}
( P9 W( F, C2 g6 o1 ivoid hello(){ printf("hello\n");}
( [) F+ a5 G+ s! Z- U7 e3 L. j  Y% k};
$ e' G6 P$ q& m4 r; Z; Nvoid main()
6 d2 F( G& V/ I# s! Z7 G  ~# [; O{
; Z' [' o4 O/ X    test* p=new test();
- d* _$ n3 E6 R+ b! v% U    p=NULL;
5 H* y1 a- H' }  |    p->hello();+ m- A; u+ J8 C# `* v
}
% C/ I2 d9 N& f& I) W# s1 }事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
0 H- T5 a' W% J2 Y( G! F#include "stdio.h"! u( r$ f) q6 C
class test. ~, l) K( L& O! g
{$ Q, A* i9 X0 T4 R
private:$ j" R& i2 \' M2 ^4 l% ~  \
int i;: C" t8 E  @! o; V! @
public:5 T; `& G7 |0 n/ l6 s6 i/ ^
test(){i=1;}
. c) n0 T) s% F, l% {void hello(){printf("%d\n",i);}$ `" L( E2 B% v+ U0 d% Y6 m
};1 z5 W& X/ o4 m: _* T
void main()- {9 I, y8 S2 R! R
{2 R2 m* r' X7 _" [! w
    test* p=new test();2 D  S/ ~0 t, s, ]4 m" E1 }0 H
p=NULL;
2 `7 [' q( X; Pp->hello();7 J% _9 r9 U9 W, `+ G4 T
}
6 Q* ]# O$ e: |% A2 `% g  l0 c如果将p=NULL注释掉就无误,就会输出1.
% b7 t3 s' m$ q1 {注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。* T8 L9 g. \" ~4 G
(1)C++的构造以及析构顺序! f7 S, F2 N- Q0 e0 k
#include <iostream>
+ M9 ^0 \# a: y9 w) R* busing namespace std;
6 A; W( M9 Q. R7 k) r8 k3 ^) |! t+ Iclass A
4 O. K$ _! K6 Z{5 O6 }9 u. S& b8 X
public:
1 ?; {: _* z' \2 j6 [2 DA(){cout<<"A"<<endl;}+ E3 J  w# }3 B; R) X# {' T7 ]
~A(){cout<<"~A"<<endl;}
3 b5 X5 F% {! \1 w};5 {& y+ M3 w( u4 t# ?' c
class B : public A4 ]/ ]: ?7 ?) o5 {, z; l6 g
{
, p' s7 S$ `9 y5 j- s  ^, Rpublic:: t" S! L0 g/ n
B(){cout<<"B"<<endl;}
/ e; k6 k! |# c) B7 e$ Cvirtual ~B(){cout<<"~B"<<endl;}4 H+ k' H+ }1 W/ ?4 o& H
};2 h' J, Y/ B& D/ A
class C : public B/ j. Q- J) P* b; H3 [2 }0 Q; P
{) `2 R7 Z# {' h  N: O0 U. n
public:( _* I7 }& B- O' V
C(){cout<<"C"<<endl;}' d0 [. L: f. p$ K
~C(){cout<<"~C"<<endl;}
: P/ P( Z* F8 G3 G1 n& u; R( S5 k};6 s; d# K- `( f

* Q& I( u) Q/ G" c7 i' xvoid main()
8 F; F6 \7 E# w/ Y  B{
* ]2 J9 P9 G9 ^3 ^8 B9 w8 I- ~* U0 L5 t. h
A *a=new A();- T' u! y$ B4 X
B *b=new B();
' ^8 `9 U2 d: g  T3 W' C, a  C *c=new C();# Y- }1 o+ q  l. O9 T
A *d=new B();0 ~; @7 e* D: f( b0 I: ?
A *e=new C();# u$ b$ Y" j( ~
B *f=new C();
. d  R! k9 J, p8 ?' B% ]8 a3 z! s, B+ v0 @/ q$ I1 C" ]
delete a; cout<<"---------------\n";+ y& n, _, e- ^1 z6 h3 Y; o3 d
delete b;   cout<<"---------------\n";
1 }+ T7 \4 r9 O% ~delete c;   cout<<"---------------\n";
6 X+ q2 c8 R1 x0 x+ Xdelete d;   cout<<"---------------\n";6 o5 a  k. V: E+ x# |" X( @6 I
delete e;   cout<<"---------------\n";
* U( ]' J4 m/ K  Ndelete f;   cout<<"---------------\n";
7 V4 \+ p8 i# n# e/ N}
* D3 e1 Q+ ~+ J7 Q+ n4 C; p这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
  h& J  {6 c/ s& ^. T' I. m这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
! A: e- R/ s8 ]6 O9 ?, {& l8 a其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)) M7 l4 E( N; D7 H
(2)面试的诡异题目
; }& ?+ g8 B1 {. e大意就是如果你 test *p=new test[20];
" }2 a* {! I3 Z4 {8 X! w然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)- ?& J9 q1 H  O  n
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
( ~5 J6 k  ~% Q; `; }5 ^( C0 X$ e
8 P3 }8 d' A1 Z# @4 k9 HZz. G* F+ g% C# K4 {
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html2 v! z# m/ J- c1 M1 S
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
- B& q+ l; Y1 v( O爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
, C8 E2 Q0 B) {, `——
0 q- u. i$ Z  A$ ^百度2011年实习招聘专题% l5 p2 w& p3 Y3 B
http://www.aftjob.com/portal.php?mod=topic&topicid=22) c' X0 F5 J/ `( W$ C6 O4 q
爱立信2011年实习招聘专题7 _2 i: J9 m/ y  y1 S" M1 M9 s# z6 ?
http://www.aftjob.com/portal.php?mod=topic&topicid=23$ k. o2 t0 E1 d- D+ {
新浪微博2011年实习生招聘
* E  b& `& Z6 N5 F# A( _1 @. K  ?3 {http://www.aftjob.com/portal.php?mod=topic&topicid=21' h; H9 u# x- g7 v
阿凡提招聘http://job.aftjob.com/job
$ \2 B1 [. M. Q) ^+ d( P. E. s, B阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag$ {; L2 l  M; E/ Q! N' z
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
3 X2 _" W6 r/ I, }, ^+ d6 t阿凡提职位搜索
1 |; d/ a: R6 [( f——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-15 05:52

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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