找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1261|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
* s4 g# E) O' {" y  b. b$ I% N
* W0 N/ O4 D9 V1 M) OZz
  E! Y1 x- `/ P3 c# G
* V1 U# }+ a  N. r- o4 ?(1)下面程序运行结果是什么:# w6 r$ f  H, R9 f. I5 K
#include "stdio.h", s* \/ W2 c+ z: l8 M
class test
+ J8 f9 ], d/ u! s0 J+ {' Y9 ~{
: D1 `$ Z3 A+ m* e* r' ypublic:
* B4 F3 l' T& T' p6 q9 f" Ytest(){}4 y6 b& C. i4 |) U+ N. Q" \
void hello(){ printf("hello\n");}* {& \8 o6 O# Y
};
; t( ^9 Y2 R9 Z& E8 N8 Svoid main()
4 P, ?, P! e3 L0 ~, D. m{- z9 j0 a" N0 R9 v2 n# y
    test* p=new test();) ^  s1 E0 }) L$ J4 H
    p=NULL;% ^; `  q) K. r3 G
    p->hello();
1 p6 E- n8 t" U}+ ]$ z) I+ ~2 k; d0 b) N
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
1 E1 N8 K# a1 F; b5 |8 i#include "stdio.h"1 j) u0 Q7 ?1 f# h5 j) R9 x, F' R
class test
* t5 a5 N+ M0 t- e% _1 W{
4 T9 K8 H) v( I/ aprivate:
! t; P# G+ p4 N% N1 |int i;# d, B" }8 U4 L4 K
public:" h1 \3 T- f+ J4 q: \( @. q9 }
test(){i=1;}
: o8 g- J# N+ ~void hello(){printf("%d\n",i);}) K) y# x3 x. X+ d  {; ]2 f4 G
};4 x' x( {. M6 i# d# Y
void main()
7 e6 S4 H* c8 S$ u* o. f3 ~1 }. x) t, ^{% \% J, H7 }; w/ o& l' R
    test* p=new test();5 W6 o" @% c  ]9 v) G5 E3 x) h
p=NULL;
7 h# S: J' T+ O- p# _$ h5 A' R2 Ep->hello();. o$ v0 P7 R4 b9 d
}" \( Q3 r  a' A- j1 C
如果将p=NULL注释掉就无误,就会输出1.- x. w) M* `; n2 O- J" y; g+ S
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。/ J0 c* d  J2 Q. i4 P' D2 v4 F
(1)C++的构造以及析构顺序( V. R1 c7 y: e/ t: T- y/ N" c
#include <iostream>
* W/ A4 k$ l5 zusing namespace std;
( H5 o6 R5 ^0 K0 G- k. ^( ~class A
+ k  `1 R+ _* p& w# k9 d. s{1 l2 |! O0 T8 S6 H  k* {
public:# N! h. |# ^" F- h7 N
A(){cout<<"A"<<endl;}
% u2 V; T* C8 N) `  x! d0 z~A(){cout<<"~A"<<endl;}
: u- x# }1 ^5 K* g9 L};
; o$ m# ]/ z8 U7 d% E% q( xclass B : public A, u% c# ~6 h7 C% Q  q8 q
{
2 @' d; P' c: a' i# {. \8 ?public:  B$ @, O1 a  \7 g7 a
B(){cout<<"B"<<endl;}% c( T% H- Q* h+ |; |* j
virtual ~B(){cout<<"~B"<<endl;}
7 A' I/ z, Q# v8 `; P4 |};
( e4 |0 ?. u8 Rclass C : public B+ J+ J8 N% r* P' i" l0 Y4 |
{
* b" Y6 q. s5 Upublic:
! S3 a+ U  a& A/ X; k; xC(){cout<<"C"<<endl;}0 `% ?! d( z! i  f8 H$ B" j/ [  x
~C(){cout<<"~C"<<endl;}
! C' `  g; ?* c# v- r  a( m};
2 A6 t0 o( @; c; x) F' k; F7 ?2 [/ \6 j' Z
void main()# ]3 {+ {/ Q- q/ F# z  U- P. H9 n
{
4 q' F( `3 n$ M7 k2 b* @/ ^  S. p; C" b  B" P) {
A *a=new A();
8 n/ I! O1 H8 ^2 f: P# OB *b=new B();. v! X$ p7 j4 r" G  n
  C *c=new C();! }5 [1 Q2 A2 D+ p2 P/ f# N* |2 F
A *d=new B();
. z: v+ d' ^4 oA *e=new C();+ \. x+ X3 j, D3 b" q! Q1 h
B *f=new C();% u' Q$ N) R( y
9 S) C+ @3 K- ]5 X8 _6 z7 {9 S
delete a; cout<<"---------------\n";
0 |! U# M# C0 J+ l" d0 `delete b;   cout<<"---------------\n";
# X- l# E3 n3 {+ n' Ydelete c;   cout<<"---------------\n";: o) Z7 ~# q5 _" I# U: y, {2 P
delete d;   cout<<"---------------\n";8 V( p5 m) O& b# o8 h) f, x; ^2 D0 U
delete e;   cout<<"---------------\n";4 N5 A( `( a& m3 f& `
delete f;   cout<<"---------------\n";' _4 \( B7 O  B
}; ]; x- V# O: B1 _
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。# ], g0 v2 {& Z6 n8 U- r( c1 p
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。# W% k# ^: x1 z# Y, H
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵), R* A, B) A! Y7 p9 k$ V
(2)面试的诡异题目
% C% ~) Y  f+ s/ ]4 y6 r5 w) H; w大意就是如果你 test *p=new test[20];
; ~  L$ i. N* U. l8 `0 D( L然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
( W( w4 D! v7 F* z6 w4 U% S0 L+ f答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……4 N' k  `: ?6 K/ w' D5 e* A
! T$ f% R1 i3 F' N9 P
Zz" w8 t% ?0 r2 @6 w; S
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
6 ~& N1 ~+ g3 [5 i, W- z1 D上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html) X! Q7 Q, d8 H! ^; ]
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html9 u# O4 i& ^7 o+ r7 \+ [" D
——* i/ O' i/ H9 I# E: X! u
百度2011年实习招聘专题) I: v' g( m& B& l. ]
http://www.aftjob.com/portal.php?mod=topic&topicid=22
# N8 X( [) Z& d! p爱立信2011年实习招聘专题. o6 E$ p, [. v- b  @; `) E% V1 P
http://www.aftjob.com/portal.php?mod=topic&topicid=236 p3 q% y8 Q& E0 ^: L' y
新浪微博2011年实习生招聘
' M; h0 x7 U0 Q7 Xhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
- g; o1 b1 O5 f阿凡提招聘http://job.aftjob.com/job
% ^! q8 _3 y5 A阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
4 \' S- [9 J. K& z+ u阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
/ B, J; |; _! a" y' V. E阿凡提职位搜索
: }; m: ]  k! ?* O3 g/ z5 u——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-30 14:46

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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