找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1157|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题! y7 H5 p- r& @$ b* \
& _1 W9 B6 Z& d9 P! ?# X% c$ @) n
Zz
, m7 j8 x0 y' M7 Z* O) d* h, ?# I' s# @
(1)下面程序运行结果是什么:( L3 a& f2 s' i3 i' x5 M' z
#include "stdio.h"3 o  \9 T4 t/ O
class test
2 H  w1 y, Q( v  _{' w5 v. A# q- ^) d
public:
* I" K1 G5 {9 a% S/ Y' Btest(){}; H$ F" ^; Z8 v  J8 Y
void hello(){ printf("hello\n");}8 d. h. P3 r& `2 P
};9 U3 A% r1 m: M# ]0 X/ a1 `6 J
void main()
/ M% C8 Q+ J, T/ S. J{, l6 K7 v9 }% K0 z. O
    test* p=new test();2 a4 ?& g; L! w% y- e3 ?
    p=NULL;
. u$ k  g  u8 x    p->hello();
' m& _$ A7 C- O/ D}, `+ s+ b$ s! q9 \- u
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
- Y1 r: w" l) S' n5 [4 w- ^#include "stdio.h"/ d1 ?4 {4 p3 N# U9 K5 M* _
class test2 C$ K2 e- T8 _- R
{
1 m7 u5 |; d+ d1 o( F- Yprivate:
, l% m3 Q. ^! R0 C6 z  h+ |6 `5 Uint i;+ @2 o- S5 X$ N, B2 i
public:
8 n+ U+ V" _# U$ {  ~0 m# v1 etest(){i=1;}
2 O+ \9 X- O! v$ r6 `void hello(){printf("%d\n",i);}8 j- U6 M4 \, @; C6 r
};+ ]7 ?" J8 e8 [, }' M* \$ V3 O
void main()$ D7 i/ o3 x7 @3 \# ^6 H
{3 g3 L5 u* @2 C/ ]
    test* p=new test();
( ^9 f2 d" f1 J  A# r( P# V) Q; Qp=NULL;! z: M2 Q" ?6 c1 p- t" a
p->hello();4 A5 h) T" X8 C) P, u, m1 _" H
}
3 w2 F. o) @; K9 A9 e3 r如果将p=NULL注释掉就无误,就会输出1.
9 g( C% V  t3 u$ N7 v5 `注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。5 [2 q* T  h4 X6 A2 ~
(1)C++的构造以及析构顺序
% O; ?/ R2 K# R#include <iostream>: W  g& d: g- u! f1 f9 u
using namespace std;6 w# v0 D9 q: x& a- w" x
class A5 A4 O! h' a" h% z6 ]( Q% F
{' d5 O1 G/ w4 g* p% o
public:
" ~/ d2 @. b' v2 F" xA(){cout<<"A"<<endl;}; |, g! a% f. X& X+ ?
~A(){cout<<"~A"<<endl;}
/ U5 h, k4 D6 B2 L. f+ o/ D' d% ?+ D};8 a) Y. Q6 m; b0 C
class B : public A
( C6 A+ r3 Q# @! [) z3 L4 ^{9 x7 B4 w% {6 c7 D) o, O  `3 U7 F
public:
3 X6 U1 j/ l5 q1 |, VB(){cout<<"B"<<endl;}5 O/ c& w& i" {/ g! o
virtual ~B(){cout<<"~B"<<endl;}
4 m: ~8 X9 G6 G( g: Q' h9 B9 I+ y};4 A) P. z7 r+ O9 {: v7 I! p# D- u! q- Z
class C : public B
9 h0 |  g& W1 b! P{; b$ l1 p- J) p# W% X
public:
" Q( C: R0 x7 p, b1 y3 cC(){cout<<"C"<<endl;}
8 [5 w: d; [) G# P# H0 J) F~C(){cout<<"~C"<<endl;}
: x/ m7 v9 G) z9 e};
) F6 v/ }& m& z/ k/ D) {4 w) D% a- ?; p7 Z& e) n$ W& P* F
void main()
0 H+ h- P" S/ s% z( f8 Q{
  L+ d- k( e2 W) Y$ G6 B0 Y9 I
- v5 ], k  [$ w4 l1 o8 o- o7 DA *a=new A();! a) Y8 r( x5 b
B *b=new B();
+ t: V  g$ Q% |. i/ {# e# u- \' g  C *c=new C();
$ M+ p$ ~/ ]% }+ pA *d=new B();* v& M/ Q% j$ y- v- |* b5 ~
A *e=new C();8 k" k" r; @# |( w
B *f=new C();- n  Q4 \. q4 X3 I/ x- _/ L4 U
" q3 a+ b# T6 _
delete a; cout<<"---------------\n";' y8 V+ P( v8 q+ d, x2 V
delete b;   cout<<"---------------\n";
( l1 Y3 z  X+ F- |7 o; Ddelete c;   cout<<"---------------\n";3 J, _1 x0 }+ R; |: O9 V# Z
delete d;   cout<<"---------------\n";
% @8 {! P- ~9 n/ T2 x/ `+ r0 |delete e;   cout<<"---------------\n";8 F4 f! V* [9 S: l
delete f;   cout<<"---------------\n";
1 E, N1 u( u2 a' V1 p/ V}
1 L" n! B0 B1 D1 o" j: ^+ G这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。9 P9 {% e/ R  U2 _% f) A
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
4 O  y) V; o: D其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)- C+ c( v$ ~( b- r
(2)面试的诡异题目& Y3 C! |6 U  S; A) V6 S# f; Y/ `
大意就是如果你 test *p=new test[20];  A! Z, Q: a/ v. ~
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
1 `4 q0 z: X1 d答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……5 Q* i( M$ N+ n9 A1 E+ ~
" J1 y: @, n6 h5 Z7 u
Zz$ N0 [# ^9 E9 o: w! P
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
" q- R: Y9 y( }( S; ~上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html* D. \4 p! X- h7 i
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
1 ?, r! f% P( G' ]- U. f——
& J7 C2 @5 \$ B& I& s百度2011年实习招聘专题
3 P2 D% @- N& b( E+ A$ q) B2 Khttp://www.aftjob.com/portal.php?mod=topic&topicid=22
  v: M+ K9 x) C爱立信2011年实习招聘专题$ }# i5 A( r, r/ P
http://www.aftjob.com/portal.php?mod=topic&topicid=230 T2 {6 H; r0 l
新浪微博2011年实习生招聘
( V/ ]3 q4 V5 N  shttp://www.aftjob.com/portal.php?mod=topic&topicid=21
: _1 t. {; ]+ P" |阿凡提招聘http://job.aftjob.com/job
  G# t6 ~; Z/ Q! Z" ~阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
1 W1 A+ o% [% j/ D4 `阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
- l. Z) ?& I- T  {) z+ n6 |! X# M阿凡提职位搜索# O( G5 p( A( f2 E
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-3-14 08:28

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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