找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1375|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
8 V1 {8 q1 y" [; P
1 ]5 K. @2 H# pZz
# N" `: o/ r- h0 k( P0 X6 {! I/ L' `. ~* |* g1 `
(1)下面程序运行结果是什么:
# w! K9 D' B0 _$ d! p#include "stdio.h"3 I& D/ }! o9 O( F* M; W3 b: U
class test
. S2 t* o1 f" W4 w6 X0 Q{  D2 G' G# {4 H! N% Z1 e
public:6 i% a1 A: B* X0 W8 d/ I
test(){}
6 l& }: j/ l$ M) ^- Rvoid hello(){ printf("hello\n");}& T* ^, A6 ^& k4 H$ k- q8 I
};
5 i, d, F8 q. l: i1 v; Pvoid main()
; t# F# S/ L, U4 E, }8 a9 N/ W{
/ m/ Q. O1 T3 J, ~+ @" j% n    test* p=new test();
" j: k5 G; V5 `( e  T" y1 _& w    p=NULL;, G  F6 h$ T# E( e( [/ s# J6 G2 {9 K
    p->hello();. v* x( a7 H" J4 N# r- x
}
; `: b3 ~5 i8 F/ t) H1 ^$ D; @事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
9 c' u9 x# U) ~5 a% e2 K#include "stdio.h"
( R2 x3 ~" F7 K1 R! w1 Qclass test
, Z9 E- n' @0 R$ `: T! O* H{
. s1 z+ T! T: N5 l$ Wprivate:' Z) d: }, h" [# Y, I; o: i' ~' l3 v% `
int i;
) e. N) |/ X- ]2 h, apublic:- M. ?) _6 q1 Q- }0 D9 }
test(){i=1;}
$ J: I; s' |8 ]) N) u1 Lvoid hello(){printf("%d\n",i);}  M. r" `% l" N% @6 ~7 [% \" M
};' ~$ f& Y$ W; z. ~4 y8 T# w
void main()
# Z& |# Q  ^& D- L" G{! I, v; x0 ]0 Z4 W) n9 T; s$ m* b& x+ u
    test* p=new test();
* a; c" P/ a0 ~. wp=NULL;
7 M, R! X: v3 v$ wp->hello();
; ~" J2 i2 L& H) y. H}
# u1 }. r8 e6 r: `8 Y8 M* X如果将p=NULL注释掉就无误,就会输出1.
9 f; h  b4 q3 q' A$ X' k注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
3 {+ @' ~3 \5 U0 k3 {' g' B(1)C++的构造以及析构顺序
9 t* |8 b7 V5 s/ G0 M#include <iostream>8 D8 l: {$ D) k! I( j' R) C
using namespace std;
: c! l6 F, |0 {; yclass A
$ k6 c2 U8 [- d: ~{
! m6 V! P) a# j5 {public:) A4 r- b6 \# {
A(){cout<<"A"<<endl;}
" }0 X3 \  |+ ]& t~A(){cout<<"~A"<<endl;}
! D  V; z& t9 S6 h3 R2 [};( i4 b0 U8 s/ Z2 `& J7 J! S8 A8 O: \
class B : public A1 _, S5 S. W2 s1 s
{0 G. I9 c5 A$ c3 s6 w7 Y% e8 a
public:
5 |5 b% y2 w" z5 }1 ~7 fB(){cout<<"B"<<endl;}
8 M" j' |& O9 g2 Bvirtual ~B(){cout<<"~B"<<endl;}2 Q5 E2 p) d- c# Y
};0 i( T- l# @% g. f9 `" c& L
class C : public B
0 _! J1 j( w$ j2 `5 m4 f; C- w- A{
: P; G, K6 b* u7 fpublic:! ~+ A$ Q9 t2 K3 v
C(){cout<<"C"<<endl;}
: V: x5 ?: \$ y3 m~C(){cout<<"~C"<<endl;}
2 g" e8 ?* z) X8 t};
; a7 c( Y% Q8 V3 F. s
" ^4 r" a. [% Wvoid main()
7 v8 n9 ^. Y8 y7 [{
7 }9 m4 ~+ j3 u  ]/ A! G- X2 S% u% \9 `0 A7 W
A *a=new A();
8 V% m  j5 T8 \4 u- BB *b=new B();
. k: e7 Z& d7 I4 n" Q9 `5 b  Z. P  C *c=new C();. b8 Q/ {4 X8 y" h) {9 |
A *d=new B();
6 ~3 l0 @% c. h7 mA *e=new C();/ ]3 X0 x8 j) W3 y4 j" B
B *f=new C();
8 i6 \4 o0 `( {/ U& `. L* k
6 a8 C! V1 z  ]8 g% ^2 R9 ~delete a; cout<<"---------------\n";, _) M4 A$ n+ C/ g
delete b;   cout<<"---------------\n";0 ]3 B7 n: K  `# h+ |
delete c;   cout<<"---------------\n";
, A% N% r9 e; n/ `delete d;   cout<<"---------------\n";
* p  e+ ~; O, j) Ldelete e;   cout<<"---------------\n";
4 @( }* G' C% ^: edelete f;   cout<<"---------------\n";
2 _& T* [3 T3 W3 `- c& r1 q0 L}) Z4 C$ W1 D  L! r+ p
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。5 [/ l3 [% h! N
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。! p. Q! t' }2 ?( e. B+ |# r
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
) ~7 m6 [) v" _2 U( J7 Z! n3 o! O(2)面试的诡异题目
" O. r# Y4 {7 y/ G' H: Y/ S大意就是如果你 test *p=new test[20];
% e; Z" n" T5 Y5 V# M然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
+ w8 \: [0 R: l9 k) C1 I/ Z答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……1 l' E9 W+ u* L. B! ^2 \7 G" J
. i. f- U1 ^4 Y" s9 F2 M* F
Zz
7 F/ f" M  L7 Z5 I( v& L0 E爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
, f5 ?  n- N7 N& \. O' V( F, c上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html3 I  d4 p& H0 o9 [
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html& G# e5 R0 ~; j& y0 \$ R
——1 h& _3 W! k% O. I" z8 l- b( A. N& ~
百度2011年实习招聘专题" I6 q) C0 U$ t% o0 Q
http://www.aftjob.com/portal.php?mod=topic&topicid=22
4 a8 w" B2 u. k$ v% s" `! o- z; w( k爱立信2011年实习招聘专题
/ K  o5 @0 Y4 M% @3 x% k0 o9 b: whttp://www.aftjob.com/portal.php?mod=topic&topicid=23  m9 Y  x8 F& Y7 ?2 C5 G+ l
新浪微博2011年实习生招聘- g0 j. ~0 L$ f' r, }
http://www.aftjob.com/portal.php?mod=topic&topicid=21
+ W8 W) ?- c4 u阿凡提招聘http://job.aftjob.com/job
% l0 m0 c0 x0 f# H; P阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag, ]. W8 j! `7 r/ y/ n
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum- V+ f! z+ O2 d, b+ a; @
阿凡提职位搜索; D' r2 m6 l( ^5 r2 B. O
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-24 19:37

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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