找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1089|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
9 t! |3 Q# G$ a8 p! m  n6 A: w( k4 [9 g$ j7 [! M/ b: [5 @9 D
Zz5 z% I  c4 w0 N; M9 p6 Y, {3 c& `
4 J% f; p: x6 V) D3 ?
(1)下面程序运行结果是什么:
6 |7 A$ H% R2 X( [: q0 E; a#include "stdio.h"1 L5 t! E7 ~, \2 B" w8 j
class test
- v0 U+ ^, J7 Z# Q3 K0 I7 h- P7 r{( I6 j( ]( ~! m4 X
public:
- q! K  u8 C" {% X9 l" J) A6 @/ Qtest(){}( Z, U# Y* c$ z( b2 }7 e- D
void hello(){ printf("hello\n");}
$ T* j* `$ c+ ^0 H9 _% z2 E8 Y2 r};3 |1 v0 K) a6 `3 E2 N8 w7 m
void main()3 m! b! n' c& ?  g8 i
{
. ?' s, ?% s! G1 z" w3 |) ?- T    test* p=new test();7 [' Q: H* }# u. `
    p=NULL;  `( t- ~. @- J9 b3 a8 ^
    p->hello();
3 v" ^$ E+ l+ `}. v) K$ Q0 k9 g# q7 K
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
! I$ A6 g/ h! V) W#include "stdio.h"
# M2 B- o+ u7 x) Hclass test. ^  e! ]9 I* K2 r! |! Y/ g
{6 l1 Q% \/ A& \! J! L
private:8 L6 k7 {& ]: U* U3 W9 v4 o" S
int i;2 ~4 l& V/ \! }7 g
public:
; R* }- I! r8 ^" }6 }2 d; W% S' Etest(){i=1;}% _: W) ]6 d* ~; z
void hello(){printf("%d\n",i);}1 n9 [2 L( y/ W7 z
};
5 X( F" a4 S: Y) j6 L6 v5 vvoid main(); V* S' f8 i* S0 j* V2 p
{
& A+ W' N" e% X- y3 f, j    test* p=new test();8 ?8 R' h# B+ X+ r5 j
p=NULL;' @+ J# Q4 x3 ?' p; p) f, Z' [
p->hello();
2 m' h4 Y$ o8 @}- W* [; l# M1 U% e3 N3 S" c
如果将p=NULL注释掉就无误,就会输出1.
5 ]/ g8 X4 O0 d4 i0 a注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。# \2 d( d& W3 `
(1)C++的构造以及析构顺序) X7 @, |- n9 ^
#include <iostream>8 f4 p- H8 J) s
using namespace std;0 c7 `$ M$ R5 W& R: `
class A( W3 ?% R# |' N" x
{7 N4 [# A) B- o$ f. ]: G% s% h) E
public:
: W( d( C' ~- H3 _* lA(){cout<<"A"<<endl;}8 Z$ U* q' m4 C" U3 ?7 m3 P
~A(){cout<<"~A"<<endl;}3 A: n# j7 y, `  J& d6 |
};
* n- F7 [; T3 I6 }: g& i' ^4 w1 nclass B : public A/ O9 X7 @) s2 e$ E
{
# K% f7 E  r  vpublic:
  [0 H" f9 F" }- q+ qB(){cout<<"B"<<endl;}8 R4 f3 _7 T; e( C
virtual ~B(){cout<<"~B"<<endl;}1 l  r+ O8 p2 G  k& c
};; \6 C' K7 U/ d6 m! K4 r
class C : public B
7 u" q1 Q  {6 u5 v2 ~{
2 k5 U! x5 ]5 ?0 M& k1 i' W1 hpublic:
' i3 @8 j2 x0 p" r, H. [C(){cout<<"C"<<endl;}! }) Z5 M& n6 R6 B4 k
~C(){cout<<"~C"<<endl;}
0 i" _/ O# f% |$ i6 m};) x- i; O- P1 ^2 Y

1 ^9 p# o- Q" H; X: }8 Gvoid main()
, S# {1 j, i  N, N- h5 s{/ s, e/ _: |, D& ]. W
$ e& t) H7 w2 a( a9 L
A *a=new A();! _# T! }; @& ^& O
B *b=new B();
2 Y, r" p/ j7 r* `1 v; z  C *c=new C();
" `' G; F7 f1 l. N" S2 R3 CA *d=new B();
3 O5 H/ z, O( _0 {$ P  _A *e=new C();
- a) f" l7 ]: V; ]) ?. kB *f=new C();
5 `; P, W" Y! k* y& A, A) ?, j% e4 y1 }' h- u3 e
delete a; cout<<"---------------\n";
1 y, I/ C; I5 O9 zdelete b;   cout<<"---------------\n";
1 \" n' T7 w% q! vdelete c;   cout<<"---------------\n";3 Z7 ^4 Z( f5 Q2 G8 T; O0 I. w, W
delete d;   cout<<"---------------\n";
7 f& ^0 ?5 q: j7 A- Jdelete e;   cout<<"---------------\n";- _8 o7 y9 Z/ V( M! _: Z
delete f;   cout<<"---------------\n";+ ?1 d( Q7 D3 U! P
}7 V# W+ a7 l' ~, n
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
: m  T+ ~9 M* D% b这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。  V8 `, B* m5 T+ l; i% q
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
$ I8 b' [( a0 e1 X( C) }$ t(2)面试的诡异题目4 u9 K: ~% K2 M. J! A
大意就是如果你 test *p=new test[20];5 M1 c. w! ^) ?- a  Q  a
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
% |: f" r7 f3 S答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
7 Z! o1 o0 w6 l( U  ?1 g( N0 Q
& L5 Q/ w& \0 V9 B: c0 H; W" @- b8 iZz0 q: Y0 A/ V5 O/ B: ^+ Y
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
& a8 q% [* c" n5 ~3 R$ Y. b上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
9 G* }2 u( c! h+ J" D爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html! e7 `6 j1 m1 V1 H. k7 `
——
9 l8 Z: Y$ }' f% Q4 w百度2011年实习招聘专题- z$ J. ~+ W2 k* R, V
http://www.aftjob.com/portal.php?mod=topic&topicid=22
3 ?/ s/ C# `+ r3 j爱立信2011年实习招聘专题
% ?  z4 I' {/ h/ d+ F- w) Thttp://www.aftjob.com/portal.php?mod=topic&topicid=23
8 I9 w. m, i: |新浪微博2011年实习生招聘3 F- V" T# X1 i. p( I
http://www.aftjob.com/portal.php?mod=topic&topicid=21
7 J' @5 l5 e! K, S2 g; T% M  {阿凡提招聘http://job.aftjob.com/job1 g7 G, x) v0 g2 V, O
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag! G/ s% V9 o( ?8 e) n
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum( a6 b9 C" ~. i2 i
阿凡提职位搜索" ~, v# ]: f% W4 B' [1 l1 I- x* m
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-12-8 17:15

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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