找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1240|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题" j3 M5 {7 J2 q
- I  t9 [1 |0 H
Zz- n" r8 l! _7 S$ q/ a  f

) z) U( E9 K: o6 o: n(1)下面程序运行结果是什么:# f$ r; O$ N. a# q- f9 S
#include "stdio.h"$ m- L; |2 G- r8 Z1 g* L. ]
class test
' E( }; G6 o' B& n4 H3 P5 X; ]+ h{
6 H9 b" l, t# n1 a& |) T+ dpublic:
0 K; S) G+ H! X4 u% W& ytest(){}- y, z0 p9 O$ |8 Q6 @
void hello(){ printf("hello\n");}
/ `: e9 \  u$ H6 v};8 y9 l2 a' `1 L6 ^
void main()
) ~+ X& r! J4 M! o* d1 f$ z{
. B- U5 I% y& K    test* p=new test();
- }! U' S# f) [  ^# x. i+ y: s    p=NULL;
% J$ J% W7 D% |1 |    p->hello();- w% c. \) d# N3 a, y
}
4 ~7 D( k8 ^2 c; C事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
5 m/ V+ c/ C- t2 M' r#include "stdio.h"6 W$ k: F" U' {2 p$ F
class test
+ p* _1 \: |" F; X) i{1 G/ \6 D( f. k
private:
: r1 t* H5 Q- {int i;- M$ ]' @6 E! }# r/ E/ {$ a/ k
public:, P* o% F# _  n# j8 ]+ ]9 ^
test(){i=1;}
5 |+ ?" K0 z; {- V* m* \6 Lvoid hello(){printf("%d\n",i);}9 [; \/ }/ T1 a- d
};0 o3 b# r; n# O0 k
void main()& ?1 `. L* O  i& b. e/ D! U
{( K& x1 r/ `% s4 @5 }+ s
    test* p=new test();
1 I) p* C5 w. P0 M- T) W8 l4 Up=NULL;; q, V1 m# Y) \! c
p->hello();3 }: L8 c+ u, o" f
}
2 Q' W% B6 C' c6 I$ E* P如果将p=NULL注释掉就无误,就会输出1.7 y" X8 l$ k+ \$ r; k
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。% b1 E1 V  |2 H: j
(1)C++的构造以及析构顺序
: p- A" l0 N2 V' ~+ h#include <iostream>* n7 _0 @% O8 ?& r% j1 r( a
using namespace std;8 ]2 a4 }- y. }2 Q* A  F2 F2 a
class A
, V5 ~/ X2 k+ n{0 N/ {, z. ^3 t3 g% Z, N
public:
5 c4 ^' G. t, @& zA(){cout<<"A"<<endl;}5 z9 f( \+ A9 X) X: v
~A(){cout<<"~A"<<endl;}( ~! Z4 O# k8 j; T
};
* J) p/ [: z  tclass B : public A; ^! x: x( ?+ m, G% P
{4 m) S! c2 ?9 {) S! N
public:
/ g* `6 @5 B4 F  O8 f, S9 [B(){cout<<"B"<<endl;}: I, ~9 z+ m. T- v$ Y9 @
virtual ~B(){cout<<"~B"<<endl;}1 L3 r, |5 b- r
};
) B1 G, Z0 A  M0 @class C : public B7 P1 t* [3 W& M! O' I2 L: |
{# [. l* @7 p8 B: X; j- o4 P
public:
+ ~; \& T8 t# I5 J& H" e# T. l7 d! iC(){cout<<"C"<<endl;}8 _/ Y) l: R) B7 Y. o
~C(){cout<<"~C"<<endl;}
0 ?0 E2 F. p" T. L; X};5 Q8 H7 D( \7 ]
% s  L. p" H( U- d
void main(), Z- q: w7 S$ p7 K
{3 ]; g5 `7 I% y- i/ T

9 f! _1 l7 ^/ RA *a=new A();
4 P/ }8 f2 `3 bB *b=new B();( _9 _6 ~: g! ?8 L# M5 Q+ Q
  C *c=new C();4 M5 P" F! h9 ^2 f& }& L
A *d=new B();2 ~1 o( \5 G+ R
A *e=new C();/ V' O9 j: ?  _$ e7 m6 @% w3 ?( o
B *f=new C();, @* h4 Q2 A) H

9 j" q. H! ^7 D! o6 Y9 ddelete a; cout<<"---------------\n";
/ p9 Y; s0 u0 v6 u: S9 x: vdelete b;   cout<<"---------------\n";- r) ]. r  b' p, {6 E
delete c;   cout<<"---------------\n";8 K3 j, u6 b! ?/ p% m4 z: l3 U& M
delete d;   cout<<"---------------\n";
( m% Q; v- O2 K' X: [1 rdelete e;   cout<<"---------------\n";1 ?* Z& X2 }; x8 y5 }
delete f;   cout<<"---------------\n";6 A$ U" Z5 C+ e. s8 `' e
}
2 M! U7 ?1 D! I2 W5 c! h1 x9 b这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。) m: i: l/ U) J. `9 K& C
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。/ _1 [2 e* ]) |' f4 [7 }: |
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
2 h+ l& l" L$ h$ O3 g) `9 m5 d(2)面试的诡异题目
3 F3 ^# N3 o0 b$ o; R* _大意就是如果你 test *p=new test[20];
: ~# Y, t, N- w* ]1 B- c  k% Z然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
+ U% S$ r$ M2 z/ f( ~: n" L答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
  f/ H+ j8 {( f3 v- m+ d! {1 G
; A  z# z2 T, K* T% hZz, z2 y0 l( q% }+ n- a2 R
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
1 f9 m3 p/ f3 b8 ^: e上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html8 B% W! n0 g" S# ~- N% o( n) `
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html$ p& Z7 p- c# |  a6 \9 T
——
0 ]  D% }* O* N8 ?2 [( _3 f1 e百度2011年实习招聘专题0 M* u# P* o( I
http://www.aftjob.com/portal.php?mod=topic&topicid=22( G. B. I8 \0 \4 m, u' |  n' ]
爱立信2011年实习招聘专题
  a# I, T( X. a: Shttp://www.aftjob.com/portal.php?mod=topic&topicid=23
0 D+ J% r8 A8 m/ Q! r' [新浪微博2011年实习生招聘
( v0 g. z# M4 J, ghttp://www.aftjob.com/portal.php?mod=topic&topicid=21% {5 Q6 k+ S& A  k( E$ x6 r
阿凡提招聘http://job.aftjob.com/job! f7 Q+ F7 y  d8 L$ E
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag7 y6 G0 \7 V# }$ n; o
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
, {8 B6 Y5 h7 @6 H阿凡提职位搜索
, P6 h7 J/ G) d* u——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-20 21:12

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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