找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1108|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题6 f: b$ t; j# A- S

. W* ^. n1 @; @0 N4 F: q% bZz4 k8 X( s. `+ k& V7 c# {& ~9 a# }
7 e4 r5 Q6 T" _" d
(1)下面程序运行结果是什么:
. D2 P% m/ p, B: s: V; x! f$ E& I#include "stdio.h"" D: s- h3 b4 w. P2 k2 i. I
class test. v. U5 X, O  Y
{
" K( o8 F* B( [3 R3 _* b! xpublic:% ?0 v% {2 \% G" f2 t
test(){}) h. H# u' Y, o6 V4 e7 m
void hello(){ printf("hello\n");}
3 p5 U$ T, H/ }6 b+ k6 u};
+ _' l& y  e. ]void main()
; v2 }4 |6 P% @2 U/ @0 R{0 S& i. q8 {+ D* o8 U( d' t
    test* p=new test();
# P9 V! \& E2 |% d5 F    p=NULL;
/ x# f* V. c3 `% B    p->hello();
" C: [" L5 }" y3 c( f3 W  O6 b% L}, o( m8 A( I" U$ l& W
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:0 \) A- R) ~& _/ M% b
#include "stdio.h"
- N/ m3 A1 a8 M) C+ j# @class test
. t+ j; v9 B3 d4 @4 J, M' Y{9 P, a6 I: [3 C6 E
private:( \6 B. e1 i# d. K& m* L
int i;9 T1 f4 y9 X5 n% d
public:
' {% E3 I: s+ v  u" Ktest(){i=1;}
  u0 W; X& M5 g, g2 Qvoid hello(){printf("%d\n",i);}( N; U. B" Q) g
};
. o2 Q. p0 n  ]7 c& ~  pvoid main()  _0 N/ ^& D( m9 @. b
{; D9 L0 z  }) v! x/ }- e0 i( f
    test* p=new test();" h0 t1 \1 s+ j8 V2 D8 `
p=NULL;  y' q3 ?$ N9 N" r0 X# l
p->hello();* v% g0 T1 c9 Y. `
}
! A. ^* v6 N) q6 Q8 J: ^如果将p=NULL注释掉就无误,就会输出1.
3 t* q: [$ e2 P( y( J' k注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
' b/ O2 W% ?: s' J* e/ q- \(1)C++的构造以及析构顺序0 q6 o7 v' v1 A# `6 E% e
#include <iostream>
8 P: S4 X/ w3 [9 F% u3 q# wusing namespace std;8 U8 d, N$ S% u6 a! l2 g/ e
class A7 n' f2 Q- `7 ^- i' U. e# _
{
# L" q& H% a0 m6 E2 ipublic:! P: \! J8 T5 L
A(){cout<<"A"<<endl;}: r( K; E5 |( k
~A(){cout<<"~A"<<endl;}4 G- ?- g0 D. v% y; ?' h
};2 h7 m# A* N5 C* ]. {
class B : public A. T& u+ B! f) {% i. e
{
! Z' H' o) V4 {) @- s' F" lpublic:( Z1 s) E. d. c% z1 c# U& O
B(){cout<<"B"<<endl;}7 j  M; t' @# A0 B2 @
virtual ~B(){cout<<"~B"<<endl;}5 `5 k8 x8 O! P! j  `" ~; g' m5 x
};
2 Y9 r$ Z, J) O* v. e$ Y' Dclass C : public B! @. {* h5 E7 Z. R
{
( I; D. z, P- H9 _$ Q) T$ g- F( D/ fpublic:
" ?. u* k/ u- f2 oC(){cout<<"C"<<endl;}6 t3 ^' r% p  e5 w! M/ s+ I
~C(){cout<<"~C"<<endl;}: B5 C/ M7 q% |* H6 s- o
};% v, O8 k& S4 C6 U
3 e1 k, z/ k$ X4 O! C) c; _
void main()4 I# ]  [1 E' l- A! S
{
6 G% I0 p- m+ y3 |% h, i. S2 a6 A/ l* m1 }0 [6 `+ L! S+ z
A *a=new A();, q# ?7 K( L+ x7 s
B *b=new B();
2 l: m2 e1 Z$ g0 a  B  C *c=new C();2 Z7 H  t  c0 q+ Z
A *d=new B();
' ]+ A* v4 ]& J( ~5 n* OA *e=new C();& i" y/ U7 H# E4 S: o7 k7 J; ^
B *f=new C();5 l, O8 f( u5 J8 X+ q& h
9 [! j5 H2 |+ E; Q# d" E  I
delete a; cout<<"---------------\n";
$ G" V6 {6 ^1 N/ {delete b;   cout<<"---------------\n";
; b; n/ B/ ~2 O8 R* Odelete c;   cout<<"---------------\n";
: w5 g4 G. n% H/ H' a8 ^7 p) m; ?delete d;   cout<<"---------------\n";: _) s5 l1 _: D
delete e;   cout<<"---------------\n";3 R8 i" C& }: @! l& z5 I
delete f;   cout<<"---------------\n";
: A0 l% b5 k1 X" a# u2 c, U}
3 o" o8 F7 X: z这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
4 l( c, w. V; F6 A& ]5 S这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。9 B1 ^5 b# |# c6 q% M7 Y
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)1 ~, m6 X$ M0 j5 n5 X
(2)面试的诡异题目: f) ~0 {' W& _+ M
大意就是如果你 test *p=new test[20];' d# V( v$ @0 P, f+ O9 ^2 k
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)! A' N" n( Q* K4 S& K1 @4 p0 Y
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……. R  J4 y/ v4 R6 \; `$ m' {
+ [. s/ {7 W4 G9 ~' P* G2 Y) M
Zz
! d# P* {* t" ~! R( {爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
; t6 A7 E9 i6 |  T: p: W上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html7 c6 S5 `" c2 _* Y
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
. ^& t, ^+ V. B) z4 V——
8 L; ?5 C  ]5 x百度2011年实习招聘专题
% C" w. _) F& ?# F/ K8 khttp://www.aftjob.com/portal.php?mod=topic&topicid=22
6 n  q( ~4 V; X3 ^( x* ]/ n7 v爱立信2011年实习招聘专题
6 p/ O$ R3 X9 b; l5 Rhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
4 a9 ]7 M- t* @9 k8 L新浪微博2011年实习生招聘) ^' ~# T; l+ T) r# {: ^8 F) L
http://www.aftjob.com/portal.php?mod=topic&topicid=21
' L. p6 e2 T! N" _" p: @3 \+ c阿凡提招聘http://job.aftjob.com/job/ U# U' n/ R9 w( }: R1 n, b
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag8 ~  b' n$ n( F  w0 G5 K$ P
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
1 \+ {% u1 \0 ^$ y, ]4 v$ [9 |+ E阿凡提职位搜索
, G! E* I% u$ B  f0 G——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-1-16 04:55

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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