找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1144|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
" a  r7 i2 l5 U( j7 X# u2 G
: L: r7 D: p# d; [4 vZz
# n0 z9 o4 B% \5 M* F; r* z1 S2 W: v$ g1 ]6 ~1 b, v
(1)下面程序运行结果是什么:
/ R  k( r5 ^' s& _- e#include "stdio.h"
7 O# k) y$ j- E; x/ {% gclass test& A7 ^3 |2 ^( Y
{; N8 G6 @3 b3 s; B+ x9 d1 |% D% K
public:) k$ A4 B# b2 A  n% ~) ^; t5 T
test(){}) R8 G( m' p& w  p  d% p
void hello(){ printf("hello\n");}! p; u( \& ~  a7 x8 k3 T1 P
};/ \( N& R4 D8 ?( C, ^8 Q) P) \
void main()
  |+ c6 g8 I* J* f% D{
. X3 P) V! L$ F% ^$ n    test* p=new test();, ?7 E4 g- A/ A2 d8 J
    p=NULL;! |, }5 k) Y7 U+ J9 Y; P& b
    p->hello();+ O5 p* }# U: P7 F% S( |
}0 t2 t" ^! L4 ?, w2 F/ K
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
& O4 l, N, q" Y- X, W#include "stdio.h"
/ G6 O6 o3 {' w8 Fclass test% W, j# V( d' j: G
{4 z$ k) M" t* l: {
private:' m% c2 M" {9 B6 c# Q
int i;
5 n8 x1 ~& A& Spublic:
# e. m" M1 R; _, Jtest(){i=1;}& O- O9 D# _" R% k( t: z
void hello(){printf("%d\n",i);}
9 A! [' c8 e4 c& S8 ]};! j( J9 w* G  G2 z- a
void main(), ?# }. z, k& r5 Y, m7 q
{0 l  D- c8 }$ Y0 w5 H& a1 v9 r
    test* p=new test();
: k- w% k" l+ F$ l+ A: p% Qp=NULL;) {0 e# H, ^/ v9 I& r
p->hello();
: Y; P: Y/ Y7 [, U" v0 X9 ~}
6 y! [, U) c+ Y% y0 {如果将p=NULL注释掉就无误,就会输出1.1 U. m3 O- G3 K) ^4 L" A
注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。3 @$ k$ `/ N' F" F. ~0 k
(1)C++的构造以及析构顺序2 v# M  G5 D4 J$ t$ i! E
#include <iostream>
+ \( r; b% _1 S* J1 Tusing namespace std;
# V( T% t+ Y$ f/ `  \5 {) j# fclass A
/ R$ d! N) n; T+ a  T{
4 g* U9 f- R8 z+ O1 A& l: L' upublic:2 p4 v$ |1 {! p% ~! ^- ~4 H5 e( S
A(){cout<<"A"<<endl;}
6 W: x; O0 J+ D( ^9 i% q  I4 w~A(){cout<<"~A"<<endl;}2 S% z+ P, J  d. G+ E1 y
};6 c2 t$ [! P/ x( \
class B : public A9 Y7 Y8 a8 o; U  o5 i, M% }
{& n) |3 C1 R5 H  L
public:3 c- \  V0 s3 T% Z, q
B(){cout<<"B"<<endl;}
  e) u# P  V3 o0 F8 W0 q7 ivirtual ~B(){cout<<"~B"<<endl;}
; ]1 r1 ^7 s/ @};2 d9 H0 K! J3 I: ]. a# N* i9 M
class C : public B1 _+ ~% n8 u$ v# c' `" |
{4 ^* ?* K8 w3 f' z2 g
public:$ c( i" n3 Q+ `2 b- [, C
C(){cout<<"C"<<endl;}
" `6 W/ I; ]7 L~C(){cout<<"~C"<<endl;}0 i4 R3 P: |% }( `: |
};7 s  b4 l  ^2 {

7 I. P; T; _" B" A/ I' Ivoid main()* j; Y1 P4 B" n( ?- }
{
+ l& u1 G( V1 R2 R8 g
$ J) G% i  Z% y. e- f& `  _+ x" Y- qA *a=new A();; Q3 l' V8 }: W4 L: ^9 I
B *b=new B();0 T; W" c7 o. Z8 H: H& z
  C *c=new C();
( Y  f# y5 A: i% hA *d=new B();1 t& w. u# \3 s, L  S
A *e=new C();
8 }2 V# m6 D. J1 R. KB *f=new C();, b9 j% z9 h: O7 o2 U

* k; S" m1 n! Mdelete a; cout<<"---------------\n";
4 q$ U7 w( n9 ]' Y. `; ndelete b;   cout<<"---------------\n";
% S& P; j5 S$ idelete c;   cout<<"---------------\n";
4 s# E  B; ?9 b. l4 |0 ?, Hdelete d;   cout<<"---------------\n";3 P9 T& C& }& z" O# B
delete e;   cout<<"---------------\n";
4 D5 U, X5 w$ Kdelete f;   cout<<"---------------\n";3 ]/ }5 w* i7 C, f3 d
}
7 Q: e- k4 j3 v0 v1 H这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
% d: n3 [$ o6 j这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
3 e4 C, H7 b- d3 T$ n; O) J其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)9 v2 R# ~8 v' j& l: K
(2)面试的诡异题目. w5 J) X! f8 g4 F- u
大意就是如果你 test *p=new test[20];  G) T  T; q0 u9 z# r6 H! Y
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
% g% u! ^% |0 ]; ]1 H答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
8 X. `0 x; k3 y0 Z" K& I! a4 k
, {3 n, N; t  ]$ Z. q* u/ eZz
, y/ V, @# v4 s& g9 `' C/ t) S爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html3 h/ M: E. A0 V" T: F
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html; q. q" f5 @) z/ w, \1 E
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html8 H4 F4 }7 i# Y6 D% ~6 P. @# V
——! |, U5 X- x+ ]8 \- h
百度2011年实习招聘专题
  ^! l) b9 _# A. m6 Chttp://www.aftjob.com/portal.php?mod=topic&topicid=22
' U$ r0 I# K- Z0 L9 j爱立信2011年实习招聘专题; c: k, Y$ D% O3 H
http://www.aftjob.com/portal.php?mod=topic&topicid=23" d# _- E* B) k& M, V/ e; e% I& J
新浪微博2011年实习生招聘
- {0 |0 Q* {4 ^( lhttp://www.aftjob.com/portal.php?mod=topic&topicid=21+ [& }9 g+ M) e- D
阿凡提招聘http://job.aftjob.com/job
: I) ~2 |) {7 t6 J6 J% M阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
" L' s+ d2 p1 _阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum" X) `% g* R' o: x
阿凡提职位搜索
* n' _) q: c% A0 W$ g* n——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-25 18:40

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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