找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1234|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
% w- m6 u* {- B7 ?0 ~0 b# j$ c* \; K# s" E$ k
Zz
: Q( i/ P6 i) A0 L, l/ T* u6 p, ^- n) w' Y& w: G6 G
(1)下面程序运行结果是什么:% `' U# O7 Z9 E" ?
#include "stdio.h"
) V& I/ V. l5 ]( a- X4 `class test
1 q  t$ r8 _3 [: E4 N{
5 A9 @2 ?; M: F) D* `1 f5 i% opublic:
8 m. ]0 G2 W% Gtest(){}% C' A$ @% u5 [; d
void hello(){ printf("hello\n");}7 N# Q7 o' ^+ [
};! H( `. E# B; d# T. Y6 X
void main()8 E) f* S8 ?, m4 ?$ s6 v
{! e; o5 }, p" o9 h5 B" x
    test* p=new test();8 g+ W* q3 }. ~, n* n  |
    p=NULL;1 F$ o( S; Z7 O1 \
    p->hello();2 ?; j! Z# n/ ?. W) ?; a: N2 a% [# H
}" L6 e9 y0 \9 F" ]
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
- D4 X( n6 I" D- b& f#include "stdio.h"
- R& T7 h, b4 T  b; i4 K5 ?/ @class test
) C4 Y7 D. L' u{
. r2 W2 c. h7 p; Pprivate:' T& _  ?. q2 {0 W! d
int i;
4 c# T) j. Y# T( P' f. Hpublic:
" c* q; u# B* C+ g3 n" otest(){i=1;}+ _2 p4 {+ X! |; F0 i- u8 T
void hello(){printf("%d\n",i);}
* s7 ^, R$ N5 `2 C, _, Q4 n( o( k};
* U' y* K2 |5 x" Mvoid main()6 V% H; w9 U' i, [; Q1 y
{
( w' M, i1 I3 [* M3 a5 Z    test* p=new test();
, h; r1 }8 ~. [; Z; t2 D9 B  |p=NULL;
+ F5 d# I' R1 cp->hello();# t; ~1 z: `% v$ r2 I
}
8 J; Y; k4 X& {! b, J$ O如果将p=NULL注释掉就无误,就会输出1.$ a* q1 ^3 U' I  H; t
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。: s" m% F. E! k0 `' _# X/ A/ M8 E
(1)C++的构造以及析构顺序
( {5 l2 m$ r. y% C' N- X#include <iostream>
# X/ w* d3 R8 V1 uusing namespace std;! [: n% H* n7 I, L! |+ F6 X
class A
8 R1 R, t% V6 k{
! g" W& g( H" u( ^. i- q% i: v" Wpublic:
3 H9 m: S: D) q( c  y3 _8 zA(){cout<<"A"<<endl;}4 m; _6 X/ b) b+ I
~A(){cout<<"~A"<<endl;}8 @4 [1 q  ~7 P9 ^0 M" j
};* I" A# E( ]) s& O, n5 I& F( z5 L- d
class B : public A
- W! q! f0 L/ E5 w7 |6 n0 h) Z{2 @  n# S+ v, i
public:
) h4 V$ U& A5 ^& PB(){cout<<"B"<<endl;}0 I5 }$ o5 H! `, p
virtual ~B(){cout<<"~B"<<endl;}
" e( ~6 j. g! n; W& k};
& y/ u% V8 p+ b" f, e* u5 I- Sclass C : public B
# @* _3 R+ N) _4 h7 K& @* {" t4 @3 C{
" |6 Z5 I4 r# X; Q. h% Fpublic:
+ p( B- m2 Q! rC(){cout<<"C"<<endl;}
: q. b0 O& ?% h" F: s  P/ C' H4 S2 J~C(){cout<<"~C"<<endl;}4 O  }/ o; O* y( T& q, V0 c8 r
};6 E+ B+ m" s0 N# @; l* D+ K

- f: y0 j. `7 i# e. |void main()1 I/ `. P, G6 h
{
8 g) s# f2 e2 r! l1 {7 r7 Q: m& u2 o( d  }  |" X% p1 G4 m8 X
A *a=new A();+ f/ `; s- H4 G1 H( E
B *b=new B();: j7 g  S# \* T) \4 Q1 u
  C *c=new C();
6 E& t, z1 I2 p' GA *d=new B();
( F2 i* w- w+ R& h- s* VA *e=new C();/ f: O1 P% `2 E* H0 }
B *f=new C();
3 \4 S5 j3 }! @1 J2 L# q: }' E1 k8 r/ @4 m: d4 \& T7 a9 L4 [0 l
delete a; cout<<"---------------\n";' w7 U1 Z/ H* N* ~+ X6 d$ B; k
delete b;   cout<<"---------------\n";
0 K: z  v- S! d) u& G! {delete c;   cout<<"---------------\n";# t3 a4 a' Q  I0 K
delete d;   cout<<"---------------\n";
" J- T9 V1 {) L0 y1 edelete e;   cout<<"---------------\n";
) k8 Z! K. E" w; w0 M! Hdelete f;   cout<<"---------------\n";# d3 u) @) S0 C0 w& ~) |
}1 ^$ U0 l( b8 ~. Z7 n
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
; Z2 d2 o. {& v; a  a+ \4 y% r- |这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。& b4 T/ Q4 {$ D7 B9 ?  d# V
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)( L( L, P8 F, o6 P3 m4 u
(2)面试的诡异题目9 \$ h; C9 C& ~0 z' z" Q" t0 V
大意就是如果你 test *p=new test[20];' O9 `1 B4 l: D' ?  _0 t
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)- ?% {% e' D3 x$ Y$ [
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……+ p: ^) e3 {  X( B

' m9 a3 M7 }* C& Q7 `Zz2 C$ P3 \; L5 ^& ^' `' L
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html0 a. ^: W; V* P; q% N
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html1 B1 x0 w, w! S$ K- @: v
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
7 ^" U: V! [4 ]- @——
% |$ q6 g3 F( Q百度2011年实习招聘专题
. N2 p, a: ~8 W& \! q# n- fhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
# C9 Q! x# b/ u7 S( ]* n7 j  m$ i" {爱立信2011年实习招聘专题  h2 |, B' n3 X( z' e1 D" x' ?1 D( `9 X
http://www.aftjob.com/portal.php?mod=topic&topicid=23  J5 M0 e2 Y$ l+ X  s0 m0 m
新浪微博2011年实习生招聘
& y6 P, ^8 ]: b; ^http://www.aftjob.com/portal.php?mod=topic&topicid=21/ R7 H$ \/ Z* m2 ]  h
阿凡提招聘http://job.aftjob.com/job
# L7 [7 E4 X: K9 z阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag/ E! d4 [+ t3 V6 ^" i. ?
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
! d4 R! e+ }; \+ b. c) k7 a阿凡提职位搜索' s9 v- ^3 y8 E$ Y
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-18 04:35

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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