找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1131|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
( A! I4 S0 C$ C: ^8 C* V5 u( X" l8 N# e5 h
Zz3 U$ D  J/ Q: C5 P" y5 o

3 }" b0 ~5 y% u5 K(1)下面程序运行结果是什么:
( L1 v6 a) G- l* N% q#include "stdio.h"
0 A- U- @7 p9 ^7 Z3 I+ ^class test
# [) l4 \! f% U; c0 I1 r+ ?4 d{' Z4 i) A* U3 E6 e
public:; P2 d" a+ u0 |; o% Y5 I; ^& b0 p
test(){}
! f5 d# F8 Y! W5 I" A/ Svoid hello(){ printf("hello\n");}) Y3 I6 J+ q) ^1 x
};
* [6 w- D/ z  |' Cvoid main()
* T1 J: c2 a* L! U; n{
$ [$ Y2 m3 }+ M1 |7 x# g; o    test* p=new test();
; E9 a1 F. Z- `  D8 M1 a" P5 }( y7 {    p=NULL;
- Q; F3 B" i& ~  V% Q    p->hello();
9 ^9 E, j0 u5 t/ ^& z# \$ w}
7 Y) L/ n+ U2 o2 W+ L! e0 j1 P事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:5 M/ d& l, @9 w" c
#include "stdio.h"
; w; n* d: |5 f) P/ Yclass test  v1 B; n6 J; s0 |& M! a
{. [$ M0 P8 K' R$ f- x' s9 ^
private:% [: Y5 w! ^- s9 l/ S
int i;  O( h- g0 N# z9 x% _
public:
% J( c: G2 }( Y: b2 atest(){i=1;}
1 z% H6 N) y' \7 Z2 u' Bvoid hello(){printf("%d\n",i);}$ e( a, a/ @- U( `0 \' M- J. [* |
};, c! `5 F" ?2 r/ j
void main()
6 t. B8 M6 |. V/ q5 K3 v{8 c. e% \( @) _% @- @
    test* p=new test();9 b. R% e  t: K1 B* k! U
p=NULL;9 N4 y& b* E+ r' V( v  U
p->hello();3 J3 n. l6 M, G  x0 n' S
}" t5 w  B! i: ^6 Z
如果将p=NULL注释掉就无误,就会输出1.
: h1 z" z' w9 Q( u  A6 C+ p注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。. b$ o/ i2 J( |5 w2 g
(1)C++的构造以及析构顺序2 {( W3 ]& ^% X# \+ S. M! l/ s9 D- l
#include <iostream>* ^+ Z, P4 Y0 g
using namespace std;3 R! s& W0 r! W
class A
3 E; \1 X0 `2 J* g{
' i* F. k& |- lpublic:
2 o# S- O4 A5 L; rA(){cout<<"A"<<endl;}/ {6 a/ X8 c* q4 c- Z2 t
~A(){cout<<"~A"<<endl;}' @4 `1 B- ]1 M
};
" p$ A6 I0 e' _# Xclass B : public A
$ [7 y! \  v; V1 f1 g1 L- k+ F! x% n0 z{
# n9 b& a- Y7 V1 U+ epublic:4 j% X9 z) a0 k. `1 J
B(){cout<<"B"<<endl;}
' r' R$ c8 A$ o% ?4 jvirtual ~B(){cout<<"~B"<<endl;}$ m3 I7 o( {# D9 z
};
- N. N8 E' _9 O( U" w. u$ [class C : public B5 c! c9 Y. r7 M' y! j' f
{
: R$ P* i! ~" B& W8 P5 L( A0 b& {public:$ G, Z7 B0 s8 b+ e0 V
C(){cout<<"C"<<endl;}, f+ M* @. |! S0 `$ p  _
~C(){cout<<"~C"<<endl;}0 ~7 F2 P: j4 Y
};
8 z0 H% Y+ n" e: v: U8 F
7 \" O5 F& |2 r: pvoid main()
" ?9 n6 f6 I3 a( i( }* t6 P{" h6 R4 s9 u1 Y" l
/ j7 Z* O  y, H# ^2 m2 X. A, @
A *a=new A();1 z" B; ~8 ^+ C
B *b=new B();: m8 I( W- C, b: u3 h8 q
  C *c=new C();
( B$ @; m1 X/ h& k) ^, b1 z2 JA *d=new B();& N. ]7 s. D- b! R
A *e=new C();
6 G& [' U; E) x5 z/ H+ dB *f=new C();% U0 X5 J; y9 j! @1 X* y+ X% o
$ [1 H9 _2 n9 ]3 _" W3 t
delete a; cout<<"---------------\n";' B& p$ M# u6 o9 O0 ^0 x" [* R/ T
delete b;   cout<<"---------------\n";
( Z$ o3 @- N5 @9 G, q5 Jdelete c;   cout<<"---------------\n";
, p6 O$ D1 j) @* i  S7 _delete d;   cout<<"---------------\n";3 C; e( o0 ~* s. j2 Q
delete e;   cout<<"---------------\n";$ t& q* ]) v4 b) V3 |/ F9 s
delete f;   cout<<"---------------\n";
$ m  H# g% X! a% b}6 B! X2 O4 W$ b  h. r" c; d3 _
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。4 i9 L% R: p1 A
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
+ U9 M- V* \! b6 n$ [! _, Q4 E其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)2 J! {- S7 A7 K" u4 ~
(2)面试的诡异题目* D1 g5 \0 ]' B, {: w; |
大意就是如果你 test *p=new test[20];
% P: u/ |5 f# s6 }' l: C然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)0 ^, M5 v! C! {3 j
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……  D% e8 A% h/ \' K; O, c1 G
( _$ v1 w; |0 Y* R! y
Zz. D5 \8 \' }9 K0 ^$ g
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html) d$ P# w' b  m. `
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
( |9 w& B+ J5 Q: q/ t: W7 D爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html7 B+ C% G4 @6 N. E) U
——4 Z* `. C0 C7 W4 f  M5 a
百度2011年实习招聘专题
, ]7 b  X) u; h& Vhttp://www.aftjob.com/portal.php?mod=topic&topicid=22
& s9 H! h. N, y; b7 R# F2 M爱立信2011年实习招聘专题
9 x2 ~3 j2 Z2 c* ~http://www.aftjob.com/portal.php?mod=topic&topicid=23
( ~6 I$ n' }" g5 t& J( G新浪微博2011年实习生招聘
/ E4 |0 ?1 n/ Vhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
: S  ?+ ?" s0 H: s1 q1 c阿凡提招聘http://job.aftjob.com/job
& l) {, B, U/ P( M阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag, T- \7 S/ ]' X9 J6 \5 N0 T/ C. i$ H- S
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
+ w0 s+ X  s% O: ?$ i阿凡提职位搜索
/ B3 Y: d0 V$ k, ]  v$ U——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-17 13:13

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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