找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1274|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
' f/ ]$ H) I9 N- i/ D3 W3 E* R+ e
Zz3 y/ x. \) m4 F$ ?8 y5 }5 e

8 L" l8 C2 t9 O" x& [(1)下面程序运行结果是什么:  u3 J: Z4 V; p: V+ |# j: `8 v
#include "stdio.h"6 q! j" A: s! Y4 f& P
class test
; D- {- D" r. l  ^( C, G' u( B/ R{; d1 m2 m* d% U# R* n
public:% Z5 {* L% f) t$ c
test(){}
  e2 d% M/ |) {6 i+ [1 lvoid hello(){ printf("hello\n");}
' i! Q' T" v4 ]$ g4 Y1 k};
# `; ~$ Z3 @) ]- ~: l3 E3 k6 o! ovoid main(). W5 U+ r1 Q, z7 P* p6 ~/ Y
{  o4 D4 l0 j1 N4 @7 s* @
    test* p=new test();. @* p* F) ^6 X; r' L2 R! \
    p=NULL;
! {& b9 T$ E& D    p->hello();
3 V, u. D9 o& I; x0 g}
5 M+ |" p4 L& D* g事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:; d1 k( o! b0 }* ?$ c
#include "stdio.h"
1 B7 a+ O. ?5 }* oclass test
  Y' e" v1 G/ p{4 y! ?3 p) N1 V
private:& w5 r& {: [1 o/ z# M0 y& v
int i;# e, P$ H. x2 o. w
public:$ {6 a2 p6 z/ G8 N1 N
test(){i=1;}
6 ^1 B$ H/ s* W" U! Lvoid hello(){printf("%d\n",i);}5 p* S" ?- g" ^+ r  G" \5 n
};
3 N- c' `; c; W* R2 v+ Y$ Yvoid main()3 C* ~+ U( b3 X# Z
{8 [0 Q/ u) }0 j8 S8 T7 P0 a" y
    test* p=new test();
$ [% U7 [3 W2 R0 ]p=NULL;
  U8 {9 l. _' [- I9 ?p->hello();
/ _, }: b2 \+ l9 G* J}# |/ b# x0 m8 ?% [
如果将p=NULL注释掉就无误,就会输出1.
7 b" k; t: q& V( d$ G3 w8 K# ?注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
4 e) [% U, g6 }7 a7 ^(1)C++的构造以及析构顺序5 t" N# H1 H6 U
#include <iostream>
/ u- y5 W: O8 `1 b  W0 [using namespace std;" v0 H4 a* n, R% a4 q6 h( k
class A  o" g; \5 |7 [4 s; F5 J7 b
{
1 [% `8 @' Z. |5 z* J* npublic:+ a: J* E% h( I& u8 W
A(){cout<<"A"<<endl;}
* n5 o5 c: w! H7 F( e4 E: A~A(){cout<<"~A"<<endl;}2 B7 A5 ~8 F" O* F5 A* p& F
};
7 R  p* V  E2 yclass B : public A5 C/ _' C& @$ A7 d. P- O
{# I) J$ V9 S6 R5 B# x
public:: F- F# _! b. K
B(){cout<<"B"<<endl;}6 S/ g. c. j+ J/ }
virtual ~B(){cout<<"~B"<<endl;}( C( W" R+ H1 g  a! X2 X2 j% W  D
};' g" {0 H9 q! w: r) H0 }) Q
class C : public B
+ b0 v1 p" h6 [# j; Y{
- ?) O3 e& g- h* ^8 v0 Rpublic:/ A6 _% w5 n3 z: z, W
C(){cout<<"C"<<endl;}
6 m+ a8 b, q0 v8 ~~C(){cout<<"~C"<<endl;}$ r/ ?" d5 }3 k( c
};
* U4 W; P2 T* M; R* l, {
9 v" T/ g. B4 x# C" a, x; @void main(), T* C& s$ F7 A
{
% w, d3 Z: i( R- T
$ C" r9 {, Z3 s+ X# O/ P2 U2 I$ Q% jA *a=new A();
" w3 t* h0 ~0 p7 tB *b=new B();
& T4 \: w) N1 e! L  C *c=new C();% |# y4 N+ n, Z
A *d=new B();
8 a" l* l, k* m8 m6 LA *e=new C();
9 ^% V$ L/ O" A! d1 r4 A5 B, |. TB *f=new C();
+ N! u# \% T* |! {( }: u5 c# k3 Q! H9 T2 L. }- U' u! Z# ?
delete a; cout<<"---------------\n";! |) f" k+ F8 d# b: C
delete b;   cout<<"---------------\n";" i5 X! V8 R* o: K% t# X3 N
delete c;   cout<<"---------------\n";
* k% v, X7 ]; o* o% G6 z5 @delete d;   cout<<"---------------\n";
+ q9 W4 Q1 h# @7 R" I, z4 u0 xdelete e;   cout<<"---------------\n";
1 h$ c4 _$ F" i! S) J/ bdelete f;   cout<<"---------------\n";
, o9 I) b; _  q0 R' K}+ |  _, D* z6 c! x0 d6 H
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
* P6 u' v* x' A% T( o, i1 {这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。3 h8 |4 C+ @# Q: j4 Y% g5 ]2 r, m" `
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
* Q" e4 }1 \+ T0 h(2)面试的诡异题目
" {" \3 H8 i' O- T# R* A; m8 u% X大意就是如果你 test *p=new test[20];5 ?% n" T$ h3 v6 U) ?5 {
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)3 A8 m! s7 @# j  H7 @% }
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……! U4 X" {" `/ `+ N

" Z7 p6 J( y; Y7 NZz
* n% h4 N- }/ z0 f爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html" h; Y& b/ t) ^8 p% X3 y
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html8 c: v6 _- s& \, z+ l/ w
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html4 r0 c. R0 P. i9 R' |- A
——2 ?$ D  U7 Q4 N) U$ z: Z4 q# s5 |! ^
百度2011年实习招聘专题5 Q% R" X) n5 P4 _
http://www.aftjob.com/portal.php?mod=topic&topicid=221 M" ~/ e, S# W
爱立信2011年实习招聘专题
: `: g0 U3 R- K( m- \1 v! b9 ghttp://www.aftjob.com/portal.php?mod=topic&topicid=23; E3 \) V+ S' P, e
新浪微博2011年实习生招聘
. \/ U9 x  K, T7 zhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
. s% m# I( S, w# v/ R' A3 a4 b阿凡提招聘http://job.aftjob.com/job
; U( F6 x- I- `6 y$ J5 x阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
; Q/ T( e0 C! L" x3 r阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum0 _- _# j7 D2 p! k7 g
阿凡提职位搜索2 y* u: c. Z. p2 u4 S% v/ t
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-6 16:15

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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