找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1283|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题3 H4 o, K2 F9 G6 w# H

& F) b% o" j6 s' IZz
3 e) a$ }5 C5 m5 R
5 m5 e& m9 S) J4 D(1)下面程序运行结果是什么:
8 I" S8 A* Y5 x#include "stdio.h"% j2 Y! U; p5 s( D0 u8 t  x
class test
7 n1 I$ o  X& f" |! {) \9 e5 U{  d, _/ i  U+ n& i
public:/ g" c* J% T$ q
test(){}( p. C- R' `- v6 V
void hello(){ printf("hello\n");}' x1 s& f* ^- T' S8 y7 K9 [- t$ D- V
};
9 b3 [9 K" S( a# ?1 `1 }$ x# qvoid main()6 F0 c! m, q& R8 y" q
{3 h; T& q$ |0 i. N
    test* p=new test();0 @" M7 o7 y# J. }" U9 X0 W8 ~' D
    p=NULL;
; l- g( [% b/ W9 J: ?    p->hello();
5 q& w7 e1 ~9 ~+ c* Z4 ^, Q}
. {9 L0 Q; X1 K. b% S# ~事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
; l9 q' x7 G/ ?( k% i$ D6 b#include "stdio.h"! e0 w/ t2 r2 T, G$ |
class test
, G) ^8 N% v# f6 |% O! ~{( [. `$ z1 r6 e5 a4 [
private:
- e& a* h$ y6 Tint i;- o8 g1 Q+ \2 f% V8 h
public:
, P, _4 {- V  h9 Ptest(){i=1;}7 }4 l3 S! g- k( T
void hello(){printf("%d\n",i);}+ T4 v6 _# F0 E
};
- T4 H8 [$ O: m8 W9 B- W9 k5 Qvoid main()
. M+ y7 N( a. u9 z4 t, J1 P& V{& i1 f  Y, V# h. n
    test* p=new test();
9 M6 U7 z- a  Up=NULL;
, b; p- I1 u: S" p  q- \p->hello();
7 t7 G1 z8 J; k3 w8 O}
6 x( v% ~) w" e如果将p=NULL注释掉就无误,就会输出1.
9 R0 W" j$ \* ~7 d; d# a注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。: Z/ K+ e- m8 \
(1)C++的构造以及析构顺序
* `6 c5 U# B6 B+ H#include <iostream>
( K) F& L4 z; r& xusing namespace std;1 Q* l- W! c( s7 _
class A
5 G8 n( X3 m- Z. |" r3 r{" g! O, C, C* }/ E4 [' z: R7 v; N
public:
" B8 j8 N  _5 \, AA(){cout<<"A"<<endl;}" R+ \7 R( X* E3 b
~A(){cout<<"~A"<<endl;}
$ S+ i2 S. e. Q};
# C8 H, p0 `* t8 Jclass B : public A
/ w5 W) @/ K. c3 ]; J0 r: z$ s{( Y3 l# {, M% V  ]# `( v/ a+ ^& d
public:% l4 [' z# G$ M* H1 K
B(){cout<<"B"<<endl;}: s4 R: [  Q. m. X" }0 B& T
virtual ~B(){cout<<"~B"<<endl;}
& e) A1 \; p  E' w};
% q( t7 X6 l. g0 ~+ mclass C : public B6 I; h3 e' d9 Q
{
) V) i, c6 T" h$ |4 D. _: apublic:
2 K1 D! K& `6 ]$ C9 u- A' v6 iC(){cout<<"C"<<endl;}, q) l' X/ Y, g: q4 E* M
~C(){cout<<"~C"<<endl;}
, c8 ^% J# N9 J8 f};% y% D8 @$ o( L7 O
+ q' Y. b1 |  D
void main()
) P+ M9 B% W0 n* P9 r5 ~{4 [, R5 F' l1 F( W; O

( z. i1 P* Z7 C' l7 }) UA *a=new A();
6 [! f2 h( M, U# bB *b=new B();/ Y+ w' F3 c5 U1 J* H9 E
  C *c=new C();3 _  y9 F' `$ O, e# n
A *d=new B();
5 N3 T5 |) n6 s5 g; j+ }7 u6 vA *e=new C();* J( O7 u5 L7 E( ]' O7 d" Y
B *f=new C();
7 k+ Q& j- a9 N/ L+ G# i# L
- L6 U2 @# s4 z/ Q& ddelete a; cout<<"---------------\n";
% L( g5 A. e: Q5 l7 u: _( Fdelete b;   cout<<"---------------\n";
4 c% |' ]5 O2 |% o( `delete c;   cout<<"---------------\n";
2 l/ I% r1 F- X* T. i  pdelete d;   cout<<"---------------\n";
6 D; Y. y4 X4 l9 v7 Ldelete e;   cout<<"---------------\n";  e; x" A- O. r% l9 G
delete f;   cout<<"---------------\n";
* L+ g, ^1 @+ Q& D; Q8 ^- f; u}
" `, g: J. `% O) R这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。/ \/ H+ N: H- }. I2 m
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。# D( X0 f( q1 l. S
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
( A7 x& {2 h4 Y4 D% e) @' e( h/ u(2)面试的诡异题目
6 x9 S1 N8 y- n大意就是如果你 test *p=new test[20];+ i! o5 ?( u% w6 {( }
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
  G9 |! S5 L5 u7 ]答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……' V! T2 f8 P, X8 ^& `0 C! E7 p
! u" {" n' ~$ Y6 F
Zz
0 s0 m5 q& Y9 f* L! V1 g( r爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
/ M: ]$ U, o/ w8 ]' w. Z上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html6 t8 _) w1 [) {9 C! w. ~
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
" L5 C4 v, |( c) @8 y# z2 F2 D5 Y——9 w& ?/ \  p5 K7 E: @
百度2011年实习招聘专题
' n3 \0 x0 p1 E* Y5 q+ M4 r1 [http://www.aftjob.com/portal.php?mod=topic&topicid=225 t( C/ `- X# u  b( X6 l9 k
爱立信2011年实习招聘专题
3 S! ~; ]% i& j2 U0 n/ shttp://www.aftjob.com/portal.php?mod=topic&topicid=232 d9 }" d2 B  A7 _
新浪微博2011年实习生招聘
# V, ]  ^# L1 z, I) T% W3 bhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
1 K4 a( @. k. x+ n& T; O阿凡提招聘http://job.aftjob.com/job# `; z+ v; P3 I6 w
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
5 i$ |) U% c. r# R" L; b) G! i& y阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
7 M9 R, b$ V% E7 Q3 D阿凡提职位搜索
  y* y- s5 b- L* a1 V——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-9 08:53

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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