找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1329|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
. Y' \+ O0 B7 N2 m! N, O* b6 y+ S' P7 G- h0 K
Zz/ O) W/ g, M2 |- u) A
! C$ R. ^1 c3 ~! J+ |
(1)下面程序运行结果是什么:
! u5 ]" S* H, Y#include "stdio.h"! W& e2 E5 j3 I7 Q& n" u
class test
. ]& x* t1 c4 X/ ^$ ^6 @{# K- P7 C; O7 J- s
public:
" s! s+ e% `: A; {2 `5 f, ptest(){}
' ~8 r3 s: A+ @) y" N8 Uvoid hello(){ printf("hello\n");}
: Y& S5 G8 I& M9 R, M+ a};
) a# R8 f( o0 _% bvoid main()# K( v+ L4 ], p
{
9 I( U$ |9 g! x+ R    test* p=new test();4 v, p! d; L) Z* Q
    p=NULL;* `3 j4 p8 ?4 n' `$ \1 U1 t! y
    p->hello();+ s  v+ q7 i3 g
}
3 E$ W  k& H4 o% u事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
: Z( Y, R3 s6 _5 I1 K#include "stdio.h"2 Z) @7 N! K# t, G5 n1 N3 M
class test
! T  g' g! T) q& I{
+ M3 e  y# N. g1 rprivate:) {# N# |% L4 m# y
int i;
: H8 o; ~& _3 j' R  _public:
% o: n  d3 F5 ^2 l% C/ ltest(){i=1;}
( l- f- d/ h/ D) hvoid hello(){printf("%d\n",i);}
' q' p/ m* a" q, M6 u};8 C! N3 S- Z2 y  F- h2 s- h9 {
void main()
! G2 J2 b( B& s$ y4 U{  a1 w+ B& }7 K
    test* p=new test();& Z) O6 p- \9 V' p
p=NULL;
  y: j! i! Q. y, Q0 h5 @' Zp->hello();
- ~. k% g4 i8 k: b/ v  _( C0 R}, a/ {7 p; g5 W  F2 x
如果将p=NULL注释掉就无误,就会输出1.7 i* O3 x% {- P+ ]- D& {' v
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
9 J! l* S7 K+ U1 T/ E3 O' U(1)C++的构造以及析构顺序# H, _6 H( s0 E
#include <iostream>
# ?% N/ \0 u4 V  nusing namespace std;- d% E6 }" w! l4 u" B# h
class A  p7 e- j: W' o+ [# G- V" W& E
{* w$ G' i% U$ @& s7 _3 O
public:  p1 ~% @( f+ E1 Q8 t& w  W- D
A(){cout<<"A"<<endl;}5 r* t( K7 [7 g( i% z( b' e/ F
~A(){cout<<"~A"<<endl;}
5 o3 C& x" c5 \' R6 f6 ?) c. f};) d9 q$ h1 X2 \6 Q2 y) W% |/ k) O
class B : public A
4 B( n2 X) Y7 _, n+ L# g) q{
" h9 q1 k! L( s' Apublic:
8 T3 b8 A5 p( V' KB(){cout<<"B"<<endl;}. M7 X' H( b% E9 }7 h# V
virtual ~B(){cout<<"~B"<<endl;}
& O, F9 K! K& _. s. i8 U  D};: a5 Y7 u, j4 p4 J. z
class C : public B# e) I# n7 @, r$ m" a! a5 |  ?
{
! n9 k/ g* `$ X9 F; opublic:
! F6 i1 ^! d$ [+ K- e6 xC(){cout<<"C"<<endl;}
  a4 F5 [9 J# t' g) ^+ _; r1 u7 H# l~C(){cout<<"~C"<<endl;}
+ M' K! P& K7 _! d! J9 R' U$ k};
! C6 h* s! u/ v$ z/ n9 I' E+ `- {+ ?; W2 n& _& j; t
void main()
; Y6 n- R& T, F9 g# `4 M{
, X3 x& v2 Q3 s3 D! A* v$ k& H7 y! N" Z: t- p/ U# p
A *a=new A();9 R* f: Q7 w+ {" k; p# T- o
B *b=new B();0 T& j% J; `0 _! k
  C *c=new C();' Q; p! [) Z/ a# H* p: o. {
A *d=new B();0 \3 o2 i; I/ p) K8 K% w% _1 t
A *e=new C();
  a; s' Z' ^- Z4 K" [  W& vB *f=new C();
: \4 h  \0 a8 ~2 r, s% k! q, P' _$ Z) g; H, K( O. u* U
delete a; cout<<"---------------\n";
! z/ {1 X3 x6 kdelete b;   cout<<"---------------\n";8 _2 P# U! C5 m+ T& c
delete c;   cout<<"---------------\n";# K( S6 W! S2 V  l" }, Q
delete d;   cout<<"---------------\n";
5 y8 u8 q0 z& Qdelete e;   cout<<"---------------\n";; d% p+ }9 |* g' z* Z/ a
delete f;   cout<<"---------------\n";
& W$ e4 Z+ U; ^9 a# A+ {: c% ?}
2 W+ `3 I" {6 c  r这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。" ~9 [, ^' L4 F/ k( ~! B
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
- z% K1 T. G+ E$ X$ r其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
0 I( I0 ^; w6 a! k0 S- }2 j3 ^(2)面试的诡异题目. F  U1 ^7 k" h1 ?' P/ X' [
大意就是如果你 test *p=new test[20];- @1 F& ^8 W  p1 ]* a
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
" i3 H( o- l( C2 j答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……  `. ^( l  s  @6 u5 H
$ i0 c9 C1 L7 D  Z7 Y. Y
Zz' e8 N- A$ N- T, q* A
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
8 l/ v% }) D' V3 }7 t& d上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html. I. D. X* s1 w; w6 W9 f( m
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
; G9 j+ z0 U( D; h  O- {- C——
+ I# s8 W0 [  K$ C0 V百度2011年实习招聘专题
2 l9 [' Z+ o7 F, [3 }6 E* H0 Vhttp://www.aftjob.com/portal.php?mod=topic&topicid=220 \; B8 h) V6 o! R/ p) T# ^2 H4 |1 M
爱立信2011年实习招聘专题
8 F1 |: o3 r5 [1 x; N; [4 a- H& \http://www.aftjob.com/portal.php?mod=topic&topicid=236 k) J, m: w9 X9 j
新浪微博2011年实习生招聘& P8 m$ I! a, A7 }- v
http://www.aftjob.com/portal.php?mod=topic&topicid=217 ?0 i/ b# C4 H
阿凡提招聘http://job.aftjob.com/job
6 B: ]- v: q! \2 L阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag. z* Y7 _' i  t
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
$ n! A* z/ M& \阿凡提职位搜索7 H. s( f4 ]7 |7 [8 ~: l. w
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-8-3 12:47

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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