找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1231|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
' O: f; V, w3 o
9 q% n+ y* ^( D# ?+ lZz# k$ z6 q8 V0 c6 A
# G8 l# A' K8 |5 G" P0 o" G
(1)下面程序运行结果是什么:
' H% d. @1 Y+ h$ C7 a#include "stdio.h"- Z; t1 V  ]# n( q
class test
( N4 J6 S/ H7 {$ S- s( N- b6 I{
" z- w1 O' p. x1 T& Y& M3 }( zpublic:& H: S! k' i( m2 A  s9 U
test(){}8 e0 v$ ^) j. L& k; o
void hello(){ printf("hello\n");}
2 t" V; u: a) M+ o% T$ `};
! i( C' L5 p8 k3 K# v; r5 o  B4 qvoid main()
, S- h! ?6 q2 H{
" k  w# c9 H5 z. t6 S: }( o    test* p=new test();
, \) I! N- f! t# o7 M8 P    p=NULL;6 A5 c% V! ~9 m" w+ a
    p->hello();. T% L" w) F# ?8 V2 D) D. Q
}- s. L! s2 ]0 K0 Z% D# i
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:4 `; u5 O  F* w
#include "stdio.h": w6 ~. h0 ?7 |1 W$ K3 F
class test: z7 a0 r& A! \
{$ G6 S7 V7 R7 Y2 [4 H9 B4 U; b
private:
( Q% z) X4 D$ O; Uint i;0 R( U" H( m8 ~' W7 z
public:
9 u5 I. U) V4 |; X# {* Ptest(){i=1;}( U* E" v4 W, c6 E4 v/ ]* X
void hello(){printf("%d\n",i);}" A& D& _3 f2 H
};
6 P+ J! w0 {, L% y8 Wvoid main(): n- f3 V$ {- s: ]  ]" u7 _
{
. s" X, {) M$ Z0 y; O7 u! L    test* p=new test();
# h& @* S4 u7 l1 Y' [% S0 Ap=NULL;1 K+ B! P" s0 [: L1 P- @# y' s
p->hello();; B! M" ^. ]7 N; c/ x
}9 A! A9 B8 C6 e& e7 u
如果将p=NULL注释掉就无误,就会输出1.
6 q$ t4 B2 @2 y7 X8 L注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
. F, o, S2 A+ j- _( Z(1)C++的构造以及析构顺序
/ E- u8 }) e* y! ]7 x" O#include <iostream>
/ M: Z3 N$ R, @$ _! X  D9 ausing namespace std;
8 I; |1 y5 X3 O- c( n2 cclass A
9 S0 C3 s( t! m{; K% K/ t( A+ c
public:2 u6 \, D( m  a) Q
A(){cout<<"A"<<endl;}: M4 v* H# F& A' |4 P
~A(){cout<<"~A"<<endl;}
8 [! \8 @$ A: V( v" A8 G};* S* z% F. V- d# s* C: E
class B : public A* a4 L2 q6 N) l3 }" d5 l# N* }* `
{
3 A7 m* \! w5 D  \! z* D, ^" Opublic:9 h" s- T/ ?/ J  q: G
B(){cout<<"B"<<endl;}9 }% M, S6 q2 c
virtual ~B(){cout<<"~B"<<endl;}
8 S7 P1 [4 R# C};
1 B3 }& ?5 H" Lclass C : public B
* D0 L2 o" m2 g% H! M{
( H5 m$ g3 n4 P& e7 d5 p  spublic:: n, C, l% {: ~: o3 Z0 n4 R
C(){cout<<"C"<<endl;}0 e# I  Y+ w$ i
~C(){cout<<"~C"<<endl;}
+ z! G. [# I! e% f};
/ v$ C. h5 M. O/ k/ y6 J, _3 o4 A0 f  m0 H
void main()0 L' G' E% m% z/ g
{& C$ [4 `1 `) T7 y

( J4 v, p: V% x" r+ J3 dA *a=new A();
% N1 E, N% R9 {. k( y. B( c7 ?9 e$ rB *b=new B();% {3 z- J0 S# w5 E  x" A9 `$ l' H! F) N
  C *c=new C();3 i% m0 v7 u) ?% Q2 ?4 O
A *d=new B();
; ]7 E, ?" S& s# F0 yA *e=new C();
* @3 e* i+ L" O4 p& SB *f=new C();
+ n- N; p( L' s! W7 W1 [# N! f: ^0 L7 s( ?5 x+ E9 D
delete a; cout<<"---------------\n";
5 f5 ^5 V7 u3 L$ q& c9 I$ o" l8 Ddelete b;   cout<<"---------------\n";
6 ?1 }6 s; c' S" t+ C$ }, Ddelete c;   cout<<"---------------\n";8 P9 U0 B# b- ?7 W
delete d;   cout<<"---------------\n";
( q/ F$ G8 z8 y; kdelete e;   cout<<"---------------\n";
$ Y& N# H' j: b0 P4 gdelete f;   cout<<"---------------\n";- E% X* A: e& c9 U- _! ?  v
}) a: X+ P, s; F+ d9 v2 F, y+ E& q/ D
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。, |: ]3 I* v& X
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。/ @( O( s) F; j0 _
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
: F5 E5 Q$ e1 R  |- i: A8 m( a- N(2)面试的诡异题目
5 x1 {+ b0 ]' L7 A' r! T; k# x  r大意就是如果你 test *p=new test[20];" V- u7 ~. o1 y9 Q; t8 j
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
! ^; E; \0 `' A, [) h, o6 Q答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
& n. [* G. z' {" M) s  u: i+ \5 h1 `& s" s9 j
Zz7 m' Q8 L8 e1 g1 Y# G2 N
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html; c* _& \  M) W
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html9 A' D8 r+ U: g1 p7 f0 w
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html& {9 o- W1 p! G, _/ s3 N8 U! w
——8 x3 i- J2 e; q5 O9 h
百度2011年实习招聘专题
6 v6 ~" V0 [/ f2 k" {http://www.aftjob.com/portal.php?mod=topic&topicid=22
% T* a$ X7 r( ]爱立信2011年实习招聘专题
5 w# @  [( D+ a0 Jhttp://www.aftjob.com/portal.php?mod=topic&topicid=23, k! f) }: K2 ~* r  t/ j% n- e" y
新浪微博2011年实习生招聘
8 o- w4 M+ V. r7 i0 X# E4 U& ]8 b& whttp://www.aftjob.com/portal.php?mod=topic&topicid=21
, v+ b# A+ {" I/ S2 q阿凡提招聘http://job.aftjob.com/job! Y4 x* t! S+ G/ n5 _' B) K, x5 ?
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag. q, Z% _: l) `$ d2 d8 o- Z- W  A
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
% x1 \) p( ^( N$ u. g+ n( Z4 ?4 ^阿凡提职位搜索
! k. ~6 e& w  l& E# _  C# c! B" C. G——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-16 09:23

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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