找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1112|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题3 ]. u$ B& Q4 i& X* [! c% _) P1 n
% Q- U5 E3 @1 w
Zz
+ l- M# E' d, m+ {3 C; }8 g# [. z
8 B) n+ F* h, j5 W7 w(1)下面程序运行结果是什么:
% z& k- ^$ `! _- l1 x2 ?$ S#include "stdio.h"
1 e6 Z! J& t2 Sclass test
$ Z2 L7 Y& n6 i& |! Y3 X{0 e$ P( o' N% X2 k
public:% V: r/ M* q1 `& @9 j( w
test(){}7 D3 T0 h6 E0 k3 e/ Z# X5 u% B/ E
void hello(){ printf("hello\n");}/ m6 t+ m  t; Z, ^, o8 F
};" }' |' \( b7 J% l! _
void main()3 y8 r& r- u. U% m1 Y8 u. ]0 @
{) }* s* H% E7 K$ t6 Z$ u' b! x
    test* p=new test();
$ [) w1 J! F. E    p=NULL;( j5 \  j/ _4 t8 T* ?
    p->hello();
5 w- j5 R" I3 K- I. h}
0 ~/ N- k2 a+ `- ]) b  W5 L2 Z  f事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
% s( S# `( X5 `( H3 y, |, T#include "stdio.h"1 n) S7 f- O* f9 [6 V
class test6 q+ G, B" Q  f, G8 A2 Q
{! J, @: ~0 F/ \- W9 S4 f# H
private:
9 S2 ~. b7 [# X) e- r0 M/ Jint i;
/ C. U: C& I9 z1 \public:% j6 u6 M" s! w7 T( E  k
test(){i=1;}
3 n# q* z- Q& I, Svoid hello(){printf("%d\n",i);}
" D$ P0 p+ ]8 l};) q4 s, T; Q& e4 {
void main()3 a3 C7 i3 h8 [1 P) H
{  c4 G/ y3 C' N& `- S0 B
    test* p=new test();
' [. ^6 _. _# u. f: S  X1 ep=NULL;
/ g9 p1 j# O& Q: I4 Y# s$ yp->hello();8 N3 K: g% \3 }( S: G, E) r
}
5 f3 h8 X: ?" z. g) i9 ?如果将p=NULL注释掉就无误,就会输出1.0 X& V4 w$ }0 D) s) K3 a2 u# ?/ z
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
3 X3 s! i, {9 q: ~(1)C++的构造以及析构顺序
# ]7 q8 }$ o: F1 m, `& {#include <iostream>- X3 w6 }' I3 U2 N6 ?. V
using namespace std;
1 G, ^9 a# K3 l% {" U1 e+ @class A
: N5 l2 y- G% t2 T{
6 y/ r! v* ]+ L" |1 v, P# Kpublic:* x1 S) L3 x) F% f& _
A(){cout<<"A"<<endl;}5 L' o; Z* j' }; d
~A(){cout<<"~A"<<endl;}4 M, [& v, i- E- H$ x# ~6 e6 W
};4 B$ U8 L- U! h3 z
class B : public A: c1 a$ A# U: [& f* [
{
( T* F6 y* K9 Y% y; p  A& u* Fpublic:
) g4 k5 c% m6 b8 E% U/ }B(){cout<<"B"<<endl;}* r3 n( ^; l4 {0 {' _& g, j
virtual ~B(){cout<<"~B"<<endl;}
& K% L, _" V4 f! {# v! e. r4 P$ n};  ^) ^* ?, Q. |
class C : public B
" d: J9 v/ ^: A3 f& N; W{6 Q! v3 t7 G$ p2 \% V) T. J
public:6 g4 M, H2 g; s) \/ R. [
C(){cout<<"C"<<endl;}
: v9 ^& y8 X: L% d1 Z~C(){cout<<"~C"<<endl;}
( L3 q8 {6 ?3 L. C+ O1 g};
2 x- Z# Z4 `3 N7 `8 g
& Y' n3 p2 t1 q" B6 j9 a; Wvoid main()7 g5 V+ ~1 Y6 T% O2 y0 V0 I
{7 D+ R* K& H2 D  y: X5 _+ T. C

: q# q) @5 t) L$ u' oA *a=new A();
% a- N9 G2 i! C3 }B *b=new B();
# Y2 }# {' d3 [% l9 y" T  C *c=new C();
: S' J* n+ u. X" p4 a) [" S' tA *d=new B();
# A* z, P/ C" l. T; r; r* gA *e=new C();
8 f3 L, q0 j+ e# i. C  S4 ~B *f=new C();8 G' }# G" c& O5 C- V' Q, S

8 f( a) {% a$ e$ d- f2 odelete a; cout<<"---------------\n";
7 S2 G3 |7 D( U8 X6 d$ wdelete b;   cout<<"---------------\n";
/ q+ m8 r" v* x) f/ y) S) Edelete c;   cout<<"---------------\n";2 x) F- J# z9 [
delete d;   cout<<"---------------\n";
6 @& {6 R* C; B( x, Vdelete e;   cout<<"---------------\n";
/ M9 P- j9 W- c4 ]8 zdelete f;   cout<<"---------------\n";3 F% N$ P5 o2 L# z; ~- e* h
}
. d, z! Q  `; n$ g3 u' Q这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。1 w- r0 ~8 c) y/ R0 {
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
( y# r9 }0 K0 h* H4 M5 U其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
% [; s3 `7 [/ b7 O9 i(2)面试的诡异题目% W: O5 F% O( q) M6 R) L4 f
大意就是如果你 test *p=new test[20];# P* R" o' C3 s+ p0 n, z1 W! V
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……), K6 g0 G" I2 h9 k1 P1 r
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……( x: O: o3 w+ t+ i2 {
( O/ _; {/ {- T% l
Zz
# I. I3 A, n7 L爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html& @. Q% g% J3 ~2 @; N. |
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html; ?. D3 J4 d) x: L: Q, P' }3 S
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html" a2 H' p0 O- L/ m0 Y5 O
——& ]- t( k7 x6 e& Y# X9 N* ?$ D
百度2011年实习招聘专题% L5 O1 K/ X! b& `: V- s
http://www.aftjob.com/portal.php?mod=topic&topicid=223 p' S) x* [1 M: Y* r$ c
爱立信2011年实习招聘专题+ H" s" H! l, F
http://www.aftjob.com/portal.php?mod=topic&topicid=23
' o7 k; [, t5 e新浪微博2011年实习生招聘
, {8 U0 i. f5 c: u- S( ?1 Phttp://www.aftjob.com/portal.php?mod=topic&topicid=21
( ?+ f3 q2 U! ^' g! Q, P8 c4 M/ E阿凡提招聘http://job.aftjob.com/job* m4 H+ L' i' [, m, p1 J! S
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
+ B. |7 h9 r7 w- R' O( e# b4 X7 E$ S" ]阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
- W) `* w3 @  R* j0 k( C阿凡提职位搜索
  m9 t! j8 \3 ~( k  h8 I——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-1-21 06:59

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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