找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1065|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题+ D) K' ?0 k( i8 h6 Q! z5 \! o

( ~/ R  y) e& GZz: K, m3 N7 e0 [2 j* l5 T4 O
' y7 H! F# a6 m7 J& D: i4 a
(1)下面程序运行结果是什么:
6 I5 t. f$ C7 @8 W  u6 o+ M4 x' k, L#include "stdio.h"2 V8 n" A6 H6 R! B1 y5 Z
class test
1 |& q7 `" i# P) H! [2 K& g{
. a9 y- H/ K' Z1 r9 epublic:% P9 {- C! e2 [5 B
test(){}4 X' L7 c. y, A$ o8 \: v
void hello(){ printf("hello\n");}
* ^9 J# {8 h1 J- O$ T* V5 E# z% S};: j$ W: z  k: x# Y7 p. }! y% h
void main()
% }' G# m% K6 ?2 U6 a8 Q" U( Q{
, i! x0 ]: {' f# q2 @- a( c% t. Q/ I# c    test* p=new test();
+ P( a. R$ [: w8 ~) M    p=NULL;* a& {$ T+ ]4 s: S3 U$ d: E
    p->hello();
! T4 o2 q& F6 q2 M" N}
# _5 N+ _" d; E: W事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
9 n. S3 m% R6 \2 P( s" h#include "stdio.h"
2 T1 v# d8 p8 S' v, l/ H6 Q0 o. ^- mclass test' S9 |+ }- j3 R: B& I+ ]6 t  M. `
{7 q; H6 w9 ]4 @" q3 A* @
private:6 v+ m: [  p4 b% ]2 N! ^
int i;
+ c2 ~& \/ t2 e% r  w8 ]; kpublic:
9 V3 a; G4 V( p& a. _: E! Mtest(){i=1;}
+ e: F2 G" N1 g# B8 M- l$ ivoid hello(){printf("%d\n",i);}
5 _8 @2 K3 i! {# q2 L, g};# ?2 I3 `# t; k* R& F) y
void main()2 v( d( c8 w" y' Z( C% m
{* r. V, J9 s* D5 K/ g4 \
    test* p=new test();
* K0 l& {8 {* @9 q& h  \# qp=NULL;
: W5 z9 _3 T) U3 d: @6 cp->hello();3 v5 a6 ~* {) R/ p; g2 \5 H: D
}. z# Y* j( ^0 C: S6 t# [
如果将p=NULL注释掉就无误,就会输出1.0 B+ g( f0 ~* O' I8 j- Z
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
, u' x5 @/ O" Z: y/ e$ e, }(1)C++的构造以及析构顺序
7 [% x' B, N4 ]" {6 r  d#include <iostream>+ H$ y) X6 V. Z* s# ~
using namespace std;# ]: ?/ a- ?5 Y& a" B
class A
& y' t5 V" n# G, t' E: ?* E1 J/ z{
9 q" h. Q  k& Q% ~. S2 m4 Apublic:$ |6 T- M6 n# A/ Q6 s
A(){cout<<"A"<<endl;}
8 M7 Q" e5 L, a& Q; Z~A(){cout<<"~A"<<endl;}. k- Y, [  K5 C1 j' C. C; F
};
; u! M) w5 K% G- Cclass B : public A$ h' ?/ G5 |! ~* v% O7 S2 b
{" j! J! n* ^! l$ F( g5 k$ m
public:: \( V' o. I2 l1 ]% B
B(){cout<<"B"<<endl;}
. _' o/ A2 d  N( ^2 J& M! bvirtual ~B(){cout<<"~B"<<endl;}; ]9 P- v7 L: R
};# m/ i( A. V" e; c
class C : public B2 P3 Z$ v6 j$ ~
{
" x" T4 l& a' O% E7 T/ c9 T) Bpublic:9 K! a4 |$ |2 K% c+ m% T1 w1 Z
C(){cout<<"C"<<endl;}% y! |; G; C1 u9 h4 S
~C(){cout<<"~C"<<endl;}1 {+ }( o1 \- m& o& n
};* S  b* K: L, D2 n* S( d' x

0 y( F) a( Q; R4 l3 cvoid main()
) r$ q; g& X. R# M& L, g{" {. F4 S. S: V3 G# i

% m3 |* W5 R; W& S$ B5 YA *a=new A();
+ e& J* w7 P, X' j) n3 N+ i5 @- uB *b=new B();
0 d* W/ e, }6 Q5 V0 F0 |  C *c=new C();
+ G& A: H3 ?5 a- d0 m) T  oA *d=new B();
+ B. n8 m- D2 U4 A; _A *e=new C();2 F1 U: d) Q( m& z& S+ D
B *f=new C();, d3 s0 i2 Y- a$ h, V
4 r* ]: f' x, K+ Z0 o" }2 C
delete a; cout<<"---------------\n";
* A1 ^1 @+ d/ y0 E$ Odelete b;   cout<<"---------------\n";# Z  C" b$ `5 A
delete c;   cout<<"---------------\n";
* L8 z0 I/ R4 R& N# N" e( idelete d;   cout<<"---------------\n";
5 q- |" \4 i4 T; W; v4 l& bdelete e;   cout<<"---------------\n";
6 h2 k; L- I8 o6 ddelete f;   cout<<"---------------\n";
( N# f8 W, @  ]3 Y" c0 G, g7 s( C}4 s) v2 w' m: u3 X- K7 w7 N4 s" q
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。8 l$ I5 q2 M+ ^
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。6 S* f2 N7 y! J, s
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)7 k5 ]1 P. {& W. v
(2)面试的诡异题目
  f0 t1 h7 v/ J) J4 E大意就是如果你 test *p=new test[20];
; }5 k: F7 W# m1 b3 q) h$ h3 u, L4 h然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
% J5 X& Y* i; w8 J* z% R% j答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……& N  r+ t8 O7 G1 q/ {

0 v; a( ~$ ~' I% H- s. IZz
- \+ |: j, v3 h( z爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
0 y9 m5 K8 @6 O; H  D6 j上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
7 n5 _6 \% @7 C: f! d爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
( ~' d$ @: h1 _& D2 M. a  {——
/ g/ [0 X7 r1 c  l6 \5 v百度2011年实习招聘专题: Z2 ~. [& v# A; I  G1 ]
http://www.aftjob.com/portal.php?mod=topic&topicid=229 x* f% A" H9 C# Q# x2 W
爱立信2011年实习招聘专题
3 @% M8 Q7 S/ e4 Q5 qhttp://www.aftjob.com/portal.php?mod=topic&topicid=234 E& X) \9 W# z
新浪微博2011年实习生招聘
' m) U/ C0 U) qhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
1 c7 @3 @7 W! c7 j阿凡提招聘http://job.aftjob.com/job
  u4 u0 Q( }- x: C! p阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag7 S; l) c& s( L" u6 Z
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
( b: V0 w& P( M1 i8 \阿凡提职位搜索. Z2 ?. p. a& o% H3 w- N$ e
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-11-21 03:49

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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