找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1233|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题  |+ k) D& G: G' u+ ^& J
9 ?9 \$ |- w7 D( n: Z+ f5 \
Zz
8 D" Q, O; x3 i+ x. l6 F+ Q; ~3 Y6 {  v9 U, k8 w
(1)下面程序运行结果是什么:
5 Q2 v0 t8 E5 k+ r+ j#include "stdio.h"
* \/ J4 x* i1 a0 }, _5 H) Sclass test
. [2 ^+ S6 G4 `* d0 a! z{' v8 ?  f/ f- J# ^7 g" X
public:2 S  ^( j' T! K& m
test(){}( O* h' T9 f% p# n6 s
void hello(){ printf("hello\n");}
. D" y- |. C! E3 L3 p};
# d1 ?$ F8 v5 _$ Kvoid main()! }2 D6 l) A6 N3 \
{$ j! D. e3 j% b; [) B
    test* p=new test();
9 G1 [6 |7 U6 z. x5 F    p=NULL;
$ k( R" k2 Y) r$ D    p->hello();
/ R6 T# {# B4 D$ [7 Y}2 O* c7 B) O/ D0 d/ X% j3 b
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:7 Q- l. o7 ?- H: h/ ]
#include "stdio.h"
, H2 q  p+ a! ^5 Gclass test+ a4 v- L" y, V: g8 M: m- D# w7 x
{: ?( j' P( C' Q" o9 }
private:
! Y1 v' `1 n: \; S4 J# a+ sint i;
, W& A4 K6 W+ n" g; Lpublic:# |# q/ X: c" \( p
test(){i=1;}5 ^6 a: o3 |1 _9 {
void hello(){printf("%d\n",i);}+ v. M6 Z, p: r  y
};
3 [$ [0 X" Q9 |3 X- h1 @8 uvoid main()+ i2 E/ M/ x/ x" g+ d3 m
{3 r; L) u* O5 U
    test* p=new test();. d) v$ e# @3 O, I
p=NULL;+ u+ M5 u1 x5 V7 q7 |
p->hello();
& W9 |/ u% C* _0 P- j}
# a6 g+ g9 `0 j& d" q' c- y: G# w9 U如果将p=NULL注释掉就无误,就会输出1.: e, z8 ^' m- h7 b' U% V8 k
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
6 B/ K* Z. s( S; A5 D7 b(1)C++的构造以及析构顺序
5 h, C( [- k5 a# J% {) s#include <iostream>
5 i% Z+ U) W3 [+ Vusing namespace std;( @# A, b7 }: T3 e) T% K
class A* v1 S) ?; U+ I% ^0 j( p7 C
{
' N5 E" i+ Y; Z' B; _public:
1 @, }$ l7 o$ WA(){cout<<"A"<<endl;}6 ^, L) E% Z8 b) W+ B  }
~A(){cout<<"~A"<<endl;}0 k6 s# L0 ?" ]8 H" Q2 D
};5 o1 J5 P4 A: A/ O  u
class B : public A
2 [# G7 U* P; O- Y{
% r/ c) m7 @3 Z3 \9 _  U. j7 apublic:, H5 p- _, e: h; K( c7 M; w3 V
B(){cout<<"B"<<endl;}
  i- u( |" Z  V. ^+ ]virtual ~B(){cout<<"~B"<<endl;}
6 m4 u# O! S. x* c};8 U$ }* k" |) }9 {
class C : public B
' |# I" ~9 V! M/ T8 l9 f/ E5 M8 Z& u{
* T: u) d/ V8 npublic:# B2 t( q: M1 H- j9 B- y" T, A4 X
C(){cout<<"C"<<endl;}
, D* n1 t0 O& \4 a~C(){cout<<"~C"<<endl;}/ n0 F0 t% x) d# C: d8 _8 P# f
};
# F' Y! f3 Y) _, o4 J) C. {7 x6 t# ?
void main()2 @* w3 T) x& T4 t  m. w5 p
{0 P5 o" l* ^# w- s

- b' V7 r7 a0 L6 w7 DA *a=new A();
! _* c( a9 j" B' [' t) M- X) KB *b=new B();
, O+ J( x5 D* T/ `# A, d  C *c=new C();1 g* d& o# T! R$ K6 {% V
A *d=new B();$ G! Y4 P! U$ m& ~6 L( H8 g
A *e=new C();! p) j8 z& v" ?7 ~; u6 e
B *f=new C();& a$ ?6 D  C1 M' I; h& {9 ~" t
& T% F: w0 y& ^  H: R
delete a; cout<<"---------------\n";! {: P% k; }, i) w; h0 K0 X
delete b;   cout<<"---------------\n";
! x; z( a2 I6 ndelete c;   cout<<"---------------\n";, y/ |8 W+ o/ V
delete d;   cout<<"---------------\n";
5 I" d! w! Q; f7 z! ?delete e;   cout<<"---------------\n";% @7 z8 H5 j0 ?% d
delete f;   cout<<"---------------\n";
! c9 h, |1 r" s2 O}
3 }2 o3 C8 f5 a+ v这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
/ I) U4 a& H* t5 e这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
% [* R* x7 t" z$ ~其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
" _- j/ H+ F4 q3 Y: g(2)面试的诡异题目; E4 R( ?0 d9 N1 Y% ^, W# N
大意就是如果你 test *p=new test[20];) C2 v* w* G" V7 a5 v2 t- c
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)- {% {1 @1 Z& _6 c- L" g; Q- `9 m, N( z
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
" x! Z" r+ r* i  t: X! Z0 i4 R) {& T* L
Zz' ~+ z& ?/ U4 g/ ^1 W
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
/ S. n8 S4 S+ b上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
$ X5 a# Q6 R1 x* m+ s爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
% e1 V# c( H4 ]. K! n3 {——
/ V5 u& l4 a* x3 B- e百度2011年实习招聘专题1 }/ w. l# Q) T' A
http://www.aftjob.com/portal.php?mod=topic&topicid=22
, r, ~6 Y8 t; F  s! h爱立信2011年实习招聘专题
$ M2 i6 L' y0 Q/ z5 G0 vhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
# U4 n7 ]' a$ U3 K, W( k1 ^2 o新浪微博2011年实习生招聘7 Z7 m% ~+ n: P" W
http://www.aftjob.com/portal.php?mod=topic&topicid=21
& e: `+ z8 q* Q4 E' u6 W5 ^" ~# [阿凡提招聘http://job.aftjob.com/job, g' ~- ?$ A8 Q" Q. g0 g; Y# Z
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag% j0 d4 M3 \# T8 T. K9 S& B0 D
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
0 ~/ D, F! C2 ^1 ]% D+ n7 o0 T阿凡提职位搜索
% i; U& Z  v, p" q+ n& u$ a3 u——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-17 10:02

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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