找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1371|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
4 P7 r+ [6 Z  d, f7 Q7 e1 c4 _+ O& X6 A9 `! N. {, n: R& a7 \
Zz
) _" g- j: b" Z+ i& A6 p6 [' t: z. X
(1)下面程序运行结果是什么:
7 N5 ~! a( v3 b) v5 G4 z#include "stdio.h"
! T4 m5 n/ h# Z- l/ e2 ^0 o- }8 _class test) y% B( l+ ^) z6 ?3 y! a
{
% N# c% J8 N6 D# k5 B& Q9 W" V  W1 I* \public:. W! Z/ K! |! Z1 T+ o! Y/ a1 h
test(){}. _5 v1 H7 J6 i5 }# P3 q
void hello(){ printf("hello\n");}8 Y  h1 T3 g% @( j& G7 y4 l
};
+ |' F1 f: h7 s0 x* y( _  X$ f4 xvoid main()
* {# m9 ?% P6 d+ B{
5 D3 _! ^8 a6 x' l: I    test* p=new test();) _& p3 ~. {7 M) s
    p=NULL;
* X5 F) o4 ^1 v5 f& _    p->hello();  s1 x2 w' T3 |+ P' ~4 m  c
}! h& ?' E8 |, i% y, }) B- S: P
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
* V3 K7 J; _7 `5 u) `#include "stdio.h"
8 {2 s8 J% y5 g% {6 w3 I2 Nclass test% r8 [) J8 M$ q
{
, i5 I& L( o, A3 U, v% B* lprivate:
' a7 X, ~' O9 l9 S1 l0 mint i;. O, B. H/ p8 Y! y( T
public:# _' V) v, N6 _  P# q' j8 i
test(){i=1;}
% X: c* o1 ]1 O: x" Xvoid hello(){printf("%d\n",i);}
1 W" m4 R# b6 V7 W" m# e9 F( e};8 J! H. K6 b- A5 K2 O
void main()% o6 [  D9 d- z) f  O. k
{! G% C1 C. z6 W% J6 e6 D8 B7 K
    test* p=new test();1 Z" U7 p1 y% C7 ]
p=NULL;% Q* q; U/ b3 Y3 c' |0 ^
p->hello();
' P3 A7 w) i. v5 S' g$ C}: c" a( f6 W& B- D2 j& ~- v) n
如果将p=NULL注释掉就无误,就会输出1.
. e3 e+ C4 i; o" Y0 u注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
! E$ L4 A  J) d& f& r4 A(1)C++的构造以及析构顺序
) l5 c6 }9 e* ]7 b#include <iostream>8 W" d; ?0 n5 s/ t; d, c; A
using namespace std;
9 ?- ]0 z0 x& t9 Yclass A1 W. h2 _! C( R4 d
{6 L: c1 R; P4 h' n8 L
public:( J' }( N; q- C6 u+ [$ E: ]
A(){cout<<"A"<<endl;}
; Q5 E* Y( }; z' A~A(){cout<<"~A"<<endl;}* L3 ~- u8 e. n7 s7 H
};
0 h3 o& M& v5 S, b" x* J/ wclass B : public A
8 k* A3 N. N( f  l( D{9 `1 z' x. h% q$ S! c: k# j
public:) H& z9 @8 F2 M5 X& d6 `" l* w
B(){cout<<"B"<<endl;}
, O' p; x( v$ C% \- xvirtual ~B(){cout<<"~B"<<endl;}" Q- u7 ^4 F* r. J5 p& C- }
};( R0 [' m: R7 B/ l  o# {% w7 H
class C : public B
3 d5 ~" ]- W6 j{* g/ S! {8 {# I, \  Q4 y
public:' b+ ]+ p! Q- _, `1 r- R
C(){cout<<"C"<<endl;}
8 E! f" Z5 v! @: p~C(){cout<<"~C"<<endl;}* a! i8 |' D  {5 O/ S& t9 x; Y' d! ~* v
};
4 k6 L; \2 S- {9 G
" E+ v5 ]+ G- jvoid main()4 x: z: X6 _5 i% K8 {; [
{
* |1 ^. K0 U4 Q* t. {6 v
, o' Q2 u% I" o" P/ B( o& K, JA *a=new A();8 [  p  k$ O, }( a% P/ D
B *b=new B();6 i2 m% K1 l0 B$ x
  C *c=new C();; S- o! R9 ]# s8 d/ y5 P1 |
A *d=new B();8 g; n8 b* g2 Y5 A( D" A: \
A *e=new C();
+ q& A7 i- k- ?6 X  u0 p7 m" L# y2 DB *f=new C();6 y6 h* L$ M; p
6 ^- ?$ g/ R* R3 g; W0 G& u' s
delete a; cout<<"---------------\n";# q8 o$ Z( h) J. V9 \. {
delete b;   cout<<"---------------\n";
- `% z# `8 u& P( S" j7 p8 L8 Adelete c;   cout<<"---------------\n";
) _4 ?1 _8 c9 b& v8 Idelete d;   cout<<"---------------\n";
. f6 F+ j5 a' z: ?. Adelete e;   cout<<"---------------\n";& k) X/ I9 n+ M/ F
delete f;   cout<<"---------------\n";& g" @& X, [% s' ?8 G  M
}
% d; j% C* x& _4 n这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
" A# m, {* N! _, I0 N7 X- c这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。1 ]* k* I4 b7 p: h' ?
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
  y9 l. ]7 d  q' ~3 e. M(2)面试的诡异题目
: m2 g! Y- W4 Z' p大意就是如果你 test *p=new test[20];
5 x% i# ?4 {) Y+ d+ G, v然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
, S" G' S& U: G: R  ~( t8 \' B/ ]答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……3 `. W; V* @% m3 K8 ~  \5 T- f, m
0 S0 U* L2 j0 n1 ^1 {5 [9 v
Zz
( B- _) Q% h1 c; n爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
* a% {5 j3 _8 t' f2 T上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
7 N# x9 ?) b( }# p+ S7 N& A爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html) B1 v- i, W  q
——
! q( K, H/ @8 ]8 w1 _6 ]* }百度2011年实习招聘专题
9 M. k3 e& t" `+ C" T$ A/ x$ shttp://www.aftjob.com/portal.php?mod=topic&topicid=22
, S& @% k" K2 l- K7 ?. f& ~爱立信2011年实习招聘专题  h" k4 x# @( k6 K! |" Q" L! U
http://www.aftjob.com/portal.php?mod=topic&topicid=23( N) I( P7 V. Z* c; ~2 S4 S8 Z% x; v
新浪微博2011年实习生招聘
6 r: C9 `  U3 p: g7 Ghttp://www.aftjob.com/portal.php?mod=topic&topicid=21
' n  S6 v# E2 z8 Z8 @9 _- o3 h阿凡提招聘http://job.aftjob.com/job8 k5 @5 y; f$ @; H
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
$ q; H' M% W  }* o' \& A# K; K阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum) [! i$ ?9 h' a
阿凡提职位搜索) V6 c# Q! N) h2 R0 Z
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-22 16:50

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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