找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1381|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题/ ~. W* x1 |9 R
9 S$ f% Z% j2 k) O8 O! A: J1 F
Zz, Q  [8 t! `) u3 @7 ^
$ y6 w8 l* E2 t
(1)下面程序运行结果是什么:% x7 J, q) k' u" B' Q
#include "stdio.h"6 S8 r9 t$ q/ M9 ^. d
class test* Q3 ?% C  f4 y/ u
{5 u$ |7 s5 ?, J; D$ s
public:
' n) T  B, ]* z: ztest(){}
3 E$ W/ I% L5 j  |, Fvoid hello(){ printf("hello\n");}
6 ^; }$ c: a" T( |8 K- p7 a2 n1 y: t};
1 A2 X! {2 s, V& n6 a4 Tvoid main()4 V8 W$ S+ C' E2 D, |
{
& s7 L; G3 x1 W# w% G" `    test* p=new test();
" D7 u! f+ L3 }* @% |( x) ^- t: v/ v    p=NULL;
" v* h: _% ?4 v" f    p->hello();
+ B/ D5 b6 n! Y' S" c" {: c; E}
' N  a4 I$ Q& k* H; s7 j事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:( z. y- S9 Z9 p0 |7 e* o
#include "stdio.h"" C1 {# h( r- a$ b! J
class test
0 w( A' d" y0 x{+ X. P2 N8 t5 X6 b$ k8 w) [
private:9 p) f1 D, o0 s, v4 |* c1 i
int i;  @! T3 D6 b6 i2 l5 T9 r
public:
' f! [+ s2 l$ |% ]test(){i=1;}) p1 x4 Q& j1 p! ^6 x' G; o
void hello(){printf("%d\n",i);}
3 q! X. W: B1 B( P' I, B' g5 T! v};
: T7 Q9 g7 R8 n+ q' t4 Yvoid main()
& f! a2 B5 _3 P6 N& S% N+ v{
9 U* |- b% I& w1 O    test* p=new test();& g  X+ C9 _+ w: c
p=NULL;1 s: M% ~% M% K, D- C5 L- p
p->hello();
$ F: b0 J( C9 {/ u/ r% M}2 y5 b* _1 T* T6 ]  `
如果将p=NULL注释掉就无误,就会输出1.8 _* \8 Y$ B6 [3 H2 h
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。0 E( y  ]  J$ a# d$ F7 Z- X' T3 ~
(1)C++的构造以及析构顺序
9 u' ~" T8 G1 n. P#include <iostream>
6 h# k6 `% J" tusing namespace std;' C2 O! h/ |, r, E7 b% l  v9 q
class A
0 ^+ y) {/ M* U) v/ u{
$ S' m" q# a% d- Tpublic:
' ]& |: T" h0 b( j! ?$ U9 }A(){cout<<"A"<<endl;}
! e+ S9 J- I4 W1 R; F~A(){cout<<"~A"<<endl;}
# R$ \( F; P: r2 p4 u};
  q" ]& J+ @4 D) {5 P  Gclass B : public A9 [  [0 `$ M- z3 E
{5 y7 U3 n6 y2 f7 @. l& w: k
public:
4 I: ?+ |" T6 q( p4 p$ K5 PB(){cout<<"B"<<endl;}
  K/ l! g1 w4 E& }2 P" i0 ivirtual ~B(){cout<<"~B"<<endl;}
) e- I# N) B. e* ?};
$ G8 W+ E5 T& W, q2 yclass C : public B9 T2 ^" w- P7 \. ?1 q0 c
{
. e+ q  O& B. r2 n& Kpublic:
5 e. @- w8 Y! t" _4 @8 u' RC(){cout<<"C"<<endl;}
5 u; Y& e" U$ g; H! I; C~C(){cout<<"~C"<<endl;}: ?( D6 Q$ Z. h. K5 {
};
% C5 }9 P9 d) R- J
1 F$ g1 [9 P3 n0 g1 kvoid main()
: `5 {" ~+ J9 p! ]9 |) G& w/ {5 N{
. L% f3 [5 W" ]6 `) o/ K, X, R  H* q% e+ C0 Y0 D4 ~
A *a=new A();
/ B9 `0 ]) [" ]8 n% LB *b=new B();# L4 i6 R6 }/ n1 e1 o# z8 Q
  C *c=new C();2 Q5 W$ ?- D4 t& U# z& T  h5 ?5 x
A *d=new B();$ P# U0 I& r- c% P9 J
A *e=new C();
  x9 W" w+ a) q& j! P, A" nB *f=new C();4 a; i0 c8 Z$ X; _! N/ [2 @

4 M$ t  w1 d0 P( D8 wdelete a; cout<<"---------------\n";$ j8 [  P! _6 T
delete b;   cout<<"---------------\n";( V% I5 p7 K7 i
delete c;   cout<<"---------------\n";
  g' x; T: L7 K/ N4 s" Q0 Hdelete d;   cout<<"---------------\n";
+ v! S$ a2 X. j' t2 ?: S$ Rdelete e;   cout<<"---------------\n";. Y& E% v; x5 ]9 M  J
delete f;   cout<<"---------------\n";- U* n% L6 d( R$ c
}
* x* u; e6 c, |3 V2 Y6 q* u% N这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。! |/ l2 v0 R, G! b
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
( p2 I! X: R6 z其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
- b9 T/ w' F, |3 C4 O0 V% Y(2)面试的诡异题目
; U) K3 p1 `% T9 s. M大意就是如果你 test *p=new test[20];
$ [) d7 S! \8 H4 h; }) ^5 X# y- U& l然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)1 L- W' B, d! ]: K# f- X, m
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
' J4 z" |( R2 b0 r, s: S5 K, g9 x8 d- g% o9 P. ~3 I; j$ D
Zz
' P$ j$ b+ r, P6 l! q! E0 d爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
% h: X2 o% X. r0 w! [. r9 C上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html: M+ T! A. G/ g; {, q, }
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
7 ^4 O" y8 B8 x9 B- ^* I& R——- R# \$ i8 I; j( u* y2 P
百度2011年实习招聘专题
/ v+ b% I$ v* ~8 x6 Ahttp://www.aftjob.com/portal.php?mod=topic&topicid=22' u0 ~! c! p' z; E4 i
爱立信2011年实习招聘专题
5 A5 U( h9 H7 v  N' T, Shttp://www.aftjob.com/portal.php?mod=topic&topicid=23
) z& ]1 j7 {4 }新浪微博2011年实习生招聘4 m% p$ G) Z6 h! w, ^2 ^
http://www.aftjob.com/portal.php?mod=topic&topicid=21
9 Q: ~6 @# M  \$ ^7 A( V阿凡提招聘http://job.aftjob.com/job5 T9 H: T4 W5 x* q
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag  X3 ]- P1 i" `1 Q' F; u7 K
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
7 ]* l  S/ m  D& ?- M阿凡提职位搜索
4 Y2 M' K* s( k! W, p——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-27 12:50

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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