找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1185|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题) V0 p* r6 C' e( K
+ ~5 U. G+ i) S# Q  D+ n# u
Zz
  _1 Z: h6 Y' c. m, ?. s3 y5 A2 c6 ?6 @- h" O5 m8 M1 T
(1)下面程序运行结果是什么:/ u' |3 V. Y- c& U0 m/ z" I8 P
#include "stdio.h"6 S; O3 ^7 m  c4 l; m
class test
2 j  J6 A2 w: k. B1 G! s9 a7 q3 o{" p; F1 B, j  p! o& `/ e; P2 u
public:* t- }2 \* L/ f( s
test(){}
9 I2 b1 K" D# @, ]void hello(){ printf("hello\n");}
$ j" K% [# ~6 f' F};
0 z; U! s# V* Uvoid main()
- t0 M8 o) i: s{
' S! E: I" P; P& T# a    test* p=new test();
) Y7 ?3 c0 Q$ S; j    p=NULL;
. n& N1 d! ]' V# g- f! c7 k    p->hello();
. X9 P; C! H& j2 L9 V}
# @$ R7 q5 ~& F& p事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
: E4 a( e% T$ {$ h3 Q- v( D#include "stdio.h", O8 o+ x5 M7 K
class test2 Q7 p7 t2 a3 c2 n  E
{# S0 v0 a: f7 V6 e
private:
! r: P( R* v. |int i;
! ^$ R6 l9 ]& G/ V+ M8 l" Dpublic:
: f- R1 D+ q' ^9 ~/ v0 q( C8 [test(){i=1;}2 Z$ L9 a! a' e+ O6 g) W- m. T
void hello(){printf("%d\n",i);}
% r8 ^  ~& i0 L! l/ O6 e3 v  c9 b};
. r! i# Q% c8 X  n$ m" avoid main()6 I4 ], D- A$ t# S# T
{4 p) @  k- u) c  H4 L
    test* p=new test();5 f/ N+ y& v! E( c
p=NULL;
% i/ E! n' p# Kp->hello();2 D) D# Q& G. v7 w$ q% P7 c, R# m4 _* }! M
}3 z) i* m6 v+ {; W5 F$ @: X' r
如果将p=NULL注释掉就无误,就会输出1.
0 Z+ p: ^; E$ B- \. R8 ]* d, M: u注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
1 ~% f8 ~9 Q" j" t(1)C++的构造以及析构顺序7 }0 |: ?0 V  ~' a! k% ?
#include <iostream>3 U( Q& {  D; J9 M& O. G
using namespace std;3 ~4 F& Y5 Z% s2 q. P9 N, \
class A- [6 ]9 c  p7 C$ w, v! a( {
{3 s! \' n4 X7 ~8 ?& b8 n& L
public:
+ \' ?5 ?- O6 V! E0 I' kA(){cout<<"A"<<endl;}$ \; J( |) R2 g0 J
~A(){cout<<"~A"<<endl;}
$ `' {, \' r& p9 `7 ^};9 D9 D; ~0 K7 J2 ^" k: [6 ]
class B : public A) ]) c! F5 h/ d  H0 X
{
2 d& E  L3 m/ H( m+ hpublic:
" x. |3 v$ v; L/ }1 cB(){cout<<"B"<<endl;}
" \- K* k2 P. P7 w: x, B( nvirtual ~B(){cout<<"~B"<<endl;}
' T: R& i* h# W, q  w) i- O; o};6 k6 C/ H) F2 w6 A+ a% {
class C : public B
8 x3 @+ f3 D6 Z, h% l$ h{6 T& a. q1 c% ?* r- ~& _/ H
public:
) n4 B" [) C. s# `5 E1 @C(){cout<<"C"<<endl;}! s+ u. A) t) u# A. l3 `: V
~C(){cout<<"~C"<<endl;}+ Y  E: L3 U: J  N$ e; p  ?$ K% U
};/ {. M7 M4 x: l
' j! u! P2 ?$ {( [
void main()+ @7 N, h( H0 p' s! e2 i
{5 q1 E, ^- z+ K. g1 `4 x( b5 I+ G
& b7 q. \+ {5 K, C7 G4 P
A *a=new A();
8 m: @0 d" }% A: x$ wB *b=new B();
( v, S! Q7 T6 k# c0 \  C *c=new C();
" O! B1 s4 N, N' ~5 QA *d=new B();# N9 d9 s( `+ C3 I& _: i0 O: [
A *e=new C();
7 T3 x# h7 t3 a/ v: ?: RB *f=new C();' t8 a3 z% t7 g* v, ~
9 A3 `' Z  ^# \! C, }2 Z6 N3 [5 w$ o
delete a; cout<<"---------------\n";5 n5 Q2 |6 F; }5 K  x, X
delete b;   cout<<"---------------\n";
9 |7 p# o* N; ~) h) h' {) U% |/ {7 |( tdelete c;   cout<<"---------------\n";1 b' n0 f: Z6 Z  s5 O" u& N4 j
delete d;   cout<<"---------------\n";
4 b# p; f, z- Pdelete e;   cout<<"---------------\n";8 k3 ^4 a3 W7 p! \, i
delete f;   cout<<"---------------\n";- ~8 Z. A$ q, P* G( k) ^7 Q
}
$ J5 X; g9 p$ K& A. d; y  R这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。0 d& J/ L+ k, ]
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。2 [* A' n; X; e" b- ^! |
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
& ]/ S  r) b; U(2)面试的诡异题目
7 y; _, b* S2 N: K2 u$ }大意就是如果你 test *p=new test[20];# r& H, y! u0 q* [, R' Z
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
, N. e, h! N8 r3 Y6 G( o答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……5 N, l) [& A! D+ \5 ^$ J  [+ h
  m; E( R/ [9 {  j
Zz6 E9 Y9 v  L6 Y
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
& m/ m  ?# {" O7 |' j上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html, e3 E* d! {9 ?  e8 m+ E
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
; m% i! D  i. B+ i4 T——/ ^" s# R% u' F' E+ r
百度2011年实习招聘专题
" ?. G4 m% d9 b6 thttp://www.aftjob.com/portal.php?mod=topic&topicid=22
7 Q9 \  G+ A$ x9 C+ f- J% P9 R* E爱立信2011年实习招聘专题
: T! l+ V" d1 K) l, r# chttp://www.aftjob.com/portal.php?mod=topic&topicid=23
( j0 ?& w' O( |& ]3 d2 Z新浪微博2011年实习生招聘# Q+ u" ?8 \/ d. J. E  P
http://www.aftjob.com/portal.php?mod=topic&topicid=21& O& d. I7 L2 Q' j) I6 @: P
阿凡提招聘http://job.aftjob.com/job
$ M; j) ^* [2 \' b阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag% Z" Q  f1 E' }
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum  ?6 V$ h& l3 h6 n- ?! k. C6 P
阿凡提职位搜索
" ~* _* ]8 ]4 E  B( @7 @# ~——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-4-27 06:59

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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