找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1362|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题$ Q. O! ]' _1 l8 i0 D" ?
" r/ |1 j# {3 |5 J% B0 [- X2 n
Zz1 n+ {! B2 Y: x" X. b( {0 A
3 A% ^  Y1 C2 q  ?) z: T6 r
(1)下面程序运行结果是什么:
: ^6 t9 k, O) H3 Y. [#include "stdio.h"
, N4 t1 t5 c5 V' e* O, Rclass test9 {6 X7 W) z2 Q: m) c1 }
{* H% P( n3 M7 o- I7 k
public:  a: t  R% d8 a) t% H9 ^3 S
test(){}6 K0 C# m+ `$ Y# [( ^
void hello(){ printf("hello\n");}
! {# V6 z1 p( q3 @; Q1 c$ ~};
/ I$ t* T! V" y3 r( m3 O% ]- K' }( dvoid main()
& S+ _/ Q( w/ f& P* a/ {{
7 j; O4 Y) m( u  j# f2 W& S    test* p=new test();
: e  X) C( o/ @7 [* v    p=NULL;
* g8 i+ a: B4 N: d% F    p->hello();$ z( q7 I8 b  U: O
}
) n! U: L9 i  g4 k" W事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
3 y  v) T  A: z  N9 Y#include "stdio.h"! Y- F- k/ `7 R+ M; b
class test
' t: \% a% Z% n8 P& |% l{/ W2 b5 C$ z5 }( M/ J! b
private:
4 d4 t/ g% W" S) A4 [: h% @: [int i;5 X9 V! b9 K# F: Y4 }( w& J
public:- `  h3 B2 }3 A) _; z& f* X$ Q8 v
test(){i=1;}4 n# H* Y) T' X& Q  ?+ D: Y
void hello(){printf("%d\n",i);}6 x1 G& T& R' h6 \: ?; D) P! q
};7 m6 ~- l2 G  m$ K# y
void main()
* u4 x) D8 [: s{
) k- Q0 }* W, i! k% C    test* p=new test();
# T4 c" U6 `) g/ N/ Kp=NULL;
& a. k! I$ _9 Jp->hello();5 G) S7 m% J2 \$ Y, V
}
0 K4 ^* g* s; {/ ]+ H$ Q  d% M) x6 r9 P7 B如果将p=NULL注释掉就无误,就会输出1.: u: X/ ~1 M6 x- }0 M5 i
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。: a4 o! \9 ~! A) R
(1)C++的构造以及析构顺序
( n5 S& Q7 @) c! F#include <iostream>; }) j4 e  o9 h1 s$ l
using namespace std;% r5 {# V* L4 U3 i
class A
& G, h% V: K* q) a& T# E{* _8 w1 D2 t0 E' j" N, r' ~: `3 R7 W! D
public:) d7 i, C* X( k1 ]+ f& }
A(){cout<<"A"<<endl;}$ z1 U; K4 p4 N& z& k. F
~A(){cout<<"~A"<<endl;}
6 M& L# a( ]2 g/ ]! q0 A' }2 O};! j  k2 h- c/ D/ }0 |; F
class B : public A  Z$ o3 p) G; n& _4 e, {
{
8 P# r1 ~; X% ?* @* K  l: H6 G( ~8 l3 Jpublic:: d% I; z7 y% n/ q
B(){cout<<"B"<<endl;}
; K% Z% O3 [- s1 ]2 avirtual ~B(){cout<<"~B"<<endl;}7 C( D$ w5 D; t! G0 N0 p7 p
};) F. E/ Y3 ~: m& P) [" A: D  w
class C : public B
/ Y1 i6 e% D0 f3 r{
/ P' l: }+ |4 e/ cpublic:/ f$ O& |* Q- C
C(){cout<<"C"<<endl;}+ j& `5 h3 F; X9 F: S) U7 v
~C(){cout<<"~C"<<endl;}
+ [$ {& c& r" W' ~$ w0 M8 Z6 g; y};
' @) ^5 Y8 S1 `% p. b( c' U2 Z1 R" K; Q+ _5 l( `
void main()
( M4 x6 G% ?( O. K{2 E! h# Q& H1 c% ]: o5 H2 l1 P
- ^/ Q, p6 i" x
A *a=new A();- D7 }" R8 o' s( n! J6 j$ C- m
B *b=new B();8 F& V) R9 l/ N) \# \
  C *c=new C();
+ B9 I; J0 b6 G5 C$ l$ i" l- t) o1 _A *d=new B();5 M5 _4 S6 ]  {" U
A *e=new C();5 ^- N4 _8 V( x) F2 B
B *f=new C();
7 s6 n+ S+ I( H# Z8 [( B7 @
4 z) w/ F2 @. S. e& e) Rdelete a; cout<<"---------------\n";
- Z* h2 U6 b) @" h0 I6 O  gdelete b;   cout<<"---------------\n";* d" j  u" }! @( ~, r$ O
delete c;   cout<<"---------------\n";
6 y3 c9 i' Y1 t& Odelete d;   cout<<"---------------\n";
6 C5 ]2 Y; t% E; R/ Ydelete e;   cout<<"---------------\n";
; U" ~8 A# ]6 ]8 L' s' W  I/ udelete f;   cout<<"---------------\n";
3 U5 ?) {' \( K}$ g  M# I1 k  C
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。& v$ Q+ w/ \! }1 K
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。& x3 t9 t% s# M- _
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)6 U/ _1 r4 g: c7 r' ~' w1 s
(2)面试的诡异题目. G  G. x1 c. W
大意就是如果你 test *p=new test[20];
7 b! M% P  }9 C  Z1 h/ U% M然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
6 Q1 R# E; `' M4 s" O; z$ l答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……7 i# v% Z! ^7 ?/ R* |" O

4 k* V% P6 V* e& {# FZz3 w" o  t; o* V3 K# c" R3 T
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
& h! j2 V1 d/ m5 c# E上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html3 ~2 A/ T* {: _# V3 a0 b0 y; w
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
9 _! y: \1 o; Q——
9 l  V% F$ l. d5 E百度2011年实习招聘专题2 c2 j7 o8 V$ @& `
http://www.aftjob.com/portal.php?mod=topic&topicid=22$ ?, Z1 o0 A. S. q% Y% t" V
爱立信2011年实习招聘专题
! t3 U5 ]& r4 jhttp://www.aftjob.com/portal.php?mod=topic&topicid=230 U& N% L3 W; N, s5 ^" F+ {% p
新浪微博2011年实习生招聘
  Q% L' M- B/ I& k# H$ Z. [4 Ehttp://www.aftjob.com/portal.php?mod=topic&topicid=212 @; H7 p* L6 ], \4 r
阿凡提招聘http://job.aftjob.com/job" N* _9 O9 d0 J; ~
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
" ?+ c8 H3 O+ a4 A阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
# Z$ n* C/ S7 b阿凡提职位搜索
: g' A! V, A! S6 m——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-20 13:11

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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