找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1297|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
" Q' Q# z/ `. G% \2 B
- y  H+ Z- I1 v3 |& {Zz7 X8 x0 S5 y9 R8 `8 e; o2 v& s& g

, p& V( b0 P3 e( @(1)下面程序运行结果是什么:7 v! Q0 E+ k; r& m/ f! t
#include "stdio.h"$ g% g6 b' ~# i0 m0 @
class test  z7 U5 Y( A1 M; f
{
2 E3 x7 g9 p7 Xpublic:
" e6 ~8 h) U0 n5 Y0 Ftest(){}" q; `& P# X8 m$ R" p
void hello(){ printf("hello\n");}: ~/ c9 n! m# v/ m. X2 J9 Q
};
# B1 z* Z  a! q$ T8 Kvoid main()
" \: n& ?( O" L{" Q) T1 \( [$ A7 k, U" T
    test* p=new test();
3 h1 z5 G. w0 F) s6 K    p=NULL;; Q! g' v" }8 U6 U# g
    p->hello();
1 ~; H8 ]& X; }4 L( U}5 y; B) h, D1 S4 ]/ @. y% u
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
& }/ U. |" t! g. S; S#include "stdio.h"
: [- W) o: M8 fclass test
) ?# @/ t0 o1 b7 M7 K{
0 @  b4 s8 H# u% R* N; Dprivate:
, o% O% z# J5 U9 C% Aint i;
" _9 |3 p  |9 S) I3 @0 `* opublic:. J) m. a( b( x! q+ q7 \' |3 l
test(){i=1;}6 j4 H9 c9 f9 S6 q6 [
void hello(){printf("%d\n",i);}
& r' y5 g$ S+ Z$ w+ Z9 k; X};9 {$ Z$ A: D9 d7 h
void main()
+ o% p# b' p  [8 f{
2 w" q7 B: F4 r! p" k: }    test* p=new test();8 k; y3 I  H" Y$ Z: ~5 j
p=NULL;
: e: j/ J8 S, R6 Ap->hello();
: [1 C# `) _' X2 W5 ]}
+ M1 i+ O* }$ G- E如果将p=NULL注释掉就无误,就会输出1.
1 c( g- L8 X6 z注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。! Q' u2 [: Y+ H
(1)C++的构造以及析构顺序
( e2 o1 h8 q& g: j% G8 d#include <iostream>
# l& W9 y' h, [+ j0 F/ ?using namespace std;5 V# e) ]5 z2 \
class A
; C" P0 N# x8 [- i{
1 r# w! e8 e0 N5 \8 Z. Lpublic:3 Y) e& m  X0 l
A(){cout<<"A"<<endl;}! i  }, y3 _2 X2 u1 Y" P
~A(){cout<<"~A"<<endl;}7 ~% _( E5 K+ u% h* V2 m& e
};
+ M5 U& F+ Q3 {4 u8 Fclass B : public A
" g8 A" {8 v2 Q6 J  Y2 P. ]{
  K) F/ z& l. t  Q" j8 c# s8 f8 Spublic:; B- }. n, a5 ?1 W, C8 h8 K* n
B(){cout<<"B"<<endl;}
9 P3 ?' F1 x4 E" evirtual ~B(){cout<<"~B"<<endl;}& y6 ~1 W( u5 C7 }( R- U' P
};
3 q+ I9 e( b; T2 wclass C : public B
0 u7 @4 }& u' w! ?: j' n9 W, R{
5 h+ S1 h! F" `! F' e) f4 Z- Npublic:
8 q& ^6 s0 \0 i6 `3 zC(){cout<<"C"<<endl;}  G4 {3 V; v1 Q& N- l" s
~C(){cout<<"~C"<<endl;}
' h5 i8 J- x( |. d2 A/ Y};( y7 ]! q1 R% p' L. ?( |+ U2 w

6 F6 m2 F/ [+ u# |" Uvoid main()
2 I, u3 o( t  k9 H; I& ?- x0 @{5 }% P& R) F8 d9 b/ V

: C5 x  k+ J+ w$ x' e6 O" m- F& gA *a=new A();  z" J6 ?: k! ~7 [4 z
B *b=new B();
0 o) S% m4 J4 j9 y( T1 ~  C *c=new C();
$ b, I. R) A" d+ K6 f& K6 fA *d=new B();& w+ t' K* E* p% U% R/ W* i9 |
A *e=new C();) r7 F2 n/ c# Y" F
B *f=new C();7 b0 ?* p, L& r" ]) c
! F& A) j) y: ~2 {" B4 [
delete a; cout<<"---------------\n";
3 j; c5 H4 Q, O+ v0 f/ s, Udelete b;   cout<<"---------------\n";/ f: J: u0 w2 l: \9 \% j+ c
delete c;   cout<<"---------------\n";
$ h% g; q- A" h/ a3 A- xdelete d;   cout<<"---------------\n";
$ q7 o: v+ r% x$ b. _9 I0 |, U! ndelete e;   cout<<"---------------\n";
* [* h1 }; |; F: t- P4 A. Jdelete f;   cout<<"---------------\n";; C5 B; C: l' x% g; B1 [- g
}
) J% O5 S  b! p& ]6 X这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。/ s6 {& e; c& a, J+ w& b9 `+ P
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
% [0 e( D# Q0 n; R: c0 ]& V7 s其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
+ c: ]% M: Q, Q8 x) j( }2 G(2)面试的诡异题目/ }8 \7 Z" W! l0 Z1 a( x
大意就是如果你 test *p=new test[20];6 \# O1 u) O0 j; w0 U- j6 N
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
: r( z4 T; |, S) e. E  ~& @答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
: U8 L) l# K, o5 y" M5 X, w
% Y% o. [$ Z* v3 R6 B8 U5 L" eZz
( a7 L) W4 |/ }' E" z) z爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
# q0 r/ w8 I0 ~8 ~( X8 l( \4 F上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html) `- M8 S# R8 O% C: f, z
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
0 {7 Q7 [: ~+ _% l5 `) X——/ H4 s( @9 J/ p1 g1 V. H. P+ \
百度2011年实习招聘专题4 Q7 ?# ^' d7 a+ o
http://www.aftjob.com/portal.php?mod=topic&topicid=22: p( Q9 R( b+ P5 x- V: q/ g
爱立信2011年实习招聘专题+ p% V8 M2 V' b! k3 u& Q. Q- g
http://www.aftjob.com/portal.php?mod=topic&topicid=23
5 r6 @. l+ |0 t5 y新浪微博2011年实习生招聘
( u' w1 S, [, Qhttp://www.aftjob.com/portal.php?mod=topic&topicid=21
. [2 v7 i  T' O# i& m/ L4 q阿凡提招聘http://job.aftjob.com/job% j7 s/ ?' N7 b- i% I) g. ^4 Z" L
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
: _) w5 d5 V4 ]2 I2 x4 \% }  H阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum
3 M; y/ r/ ]8 ~3 V阿凡提职位搜索5 J7 B7 f' ?2 q; A5 M  c% ]
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-7-16 00:45

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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