找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1138|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
) f4 M+ @/ o  B: c* k  ~; B
: n) W( W  A8 IZz: a  {! N& F7 Z
# u% ]4 T8 K- C* q
(1)下面程序运行结果是什么:3 Z5 J' t$ M* @' `, [2 ?+ Y
#include "stdio.h"8 ]. O. @* x0 G; D1 A  Q& Y+ @) E
class test
) l, S" J: X6 E( V2 K{
* X) j8 U5 }0 D( ~6 Dpublic:. K* [. _* `6 T" b( y+ n
test(){}/ o, S1 N5 W2 s9 u0 ]
void hello(){ printf("hello\n");}
% `. s0 G8 w+ A# K1 F4 S2 c};. a3 e& C6 F3 B& M
void main()( q* I- l- ?4 e7 |
{( ]; M3 s3 N+ F( u
    test* p=new test();  I+ n/ L8 B! j5 v2 a
    p=NULL;7 O0 T( _/ b3 H
    p->hello();$ w7 r- L, b& R8 k& F* w
}" g7 V, W" {' C. c# e" F+ F
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
: `/ t3 v; J' N- M* D1 n#include "stdio.h"7 z# k. i# ~7 `1 i. p
class test
% i; L4 I! v+ i{
$ U  L2 @6 n  }5 u/ Z4 Xprivate:
( e9 ]2 ~2 u! O( R: r( z* \int i;! X+ ^. w7 s3 r5 p" T
public:5 N, ^" q$ T! r8 i' }1 K
test(){i=1;}0 A  b7 }/ O0 j& ^1 E  h
void hello(){printf("%d\n",i);}5 f" ~; ^0 s0 ]( m8 C/ K
};0 Q( M- |$ d. E5 ?" v2 l  g
void main()( i; \$ z: c( S7 Y/ w; c
{3 [- O, G0 W* O3 f1 }
    test* p=new test();; i# G; |4 E% ]  k( m
p=NULL;- \1 {" ]2 C: W; ?
p->hello();
, U8 ^# U# o7 f; l# R) D}
2 N8 v( a/ I! a3 j6 Y# h# A0 ^) P: d/ n6 K如果将p=NULL注释掉就无误,就会输出1.
1 o$ n9 V2 D. Z2 v; O' Z) S- f注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。: ]6 V2 M: n* N- X" W
(1)C++的构造以及析构顺序
5 X: H0 c) N) C#include <iostream>+ {/ u5 ~; }3 e- S' p: Y
using namespace std;
3 E8 b$ o* U$ ]3 e" i8 C9 Eclass A
0 Q& E6 @1 E; R6 }8 A5 {" W8 r{
  K" N6 n0 M: ^) d# Cpublic:
0 l" e: ?  t& A6 [0 TA(){cout<<"A"<<endl;}' C6 k2 @& v2 m0 M& O, W" j
~A(){cout<<"~A"<<endl;}. e) [: z  T* T  D
};* e9 N, [, \$ k3 L, \- ]8 c
class B : public A& m* n; e' I5 ^1 n
{% S* M, ?  Y  ~
public:
9 [# G; u9 A  RB(){cout<<"B"<<endl;}# ?3 l' Q2 Y/ P1 `1 m$ a
virtual ~B(){cout<<"~B"<<endl;}
2 E( P. L3 s* D8 L};
( ~: _9 k) Z5 o3 k7 aclass C : public B5 E/ w5 H, y: [$ v9 W# a  f6 j
{
) J2 M( g; z% v% f  }public:
) O  E0 d- v" W4 K  j* cC(){cout<<"C"<<endl;}
4 @, D  e/ U& V. c. r2 ~5 }: y5 u8 [~C(){cout<<"~C"<<endl;}" f! ^3 i2 D9 O  J7 x5 S! G1 p0 P
};# `; E7 _$ v, G7 G5 X

, T% q5 K3 s, i) b6 @void main()
5 ?: b. n# s" r+ w: N( f1 D{) x$ d, v! G/ [. ]: D1 q* I
  ^! y$ T* A3 M
A *a=new A();
) d  W( C: t8 ^# a" TB *b=new B();
! c! @0 V* a2 I. v; R9 @  C *c=new C();- |/ l# J# X" v' I
A *d=new B();
9 y2 x( G1 O% S  x- q  yA *e=new C();4 H. z: }6 {/ K" _# {
B *f=new C();
/ T/ K7 P! X/ ^6 ^/ b8 D4 a& g+ N* [0 `4 @; i3 m" f
delete a; cout<<"---------------\n";* n( O7 u7 c5 X  \
delete b;   cout<<"---------------\n";
/ Y5 `6 I, x3 W7 D2 u8 \5 o4 j0 Zdelete c;   cout<<"---------------\n";
+ Y$ @' `. |1 H4 u7 zdelete d;   cout<<"---------------\n";# @  U% v8 ^; }- y+ p/ x/ L" p
delete e;   cout<<"---------------\n";
7 p# V: l) i  n2 l3 l' G9 m, ndelete f;   cout<<"---------------\n";3 o) e0 k; U1 C4 [
}$ L" P5 _: Q7 h, l" v
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
5 E# x0 F1 }; _8 T) X3 K# F这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。- O( Z: E& s6 @7 F- k" H4 U
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)( F6 i3 O# v2 W
(2)面试的诡异题目* }8 Q% K* d5 L5 {( y9 `! v
大意就是如果你 test *p=new test[20];
! t: `; [7 X2 k. }& R4 ~然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)
( G9 [) S9 p5 s  f/ e0 V* D答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……0 i8 _# W( \$ r1 J7 t, i. j0 t# P

  Y0 u0 R9 e0 T! [1 vZz
) @) q/ V& M9 R5 j: s3 z) m& U爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html& g3 C  g8 P$ r% p. A1 P  A% f( o
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html1 w8 b- L$ `! _6 s0 w
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
5 e; w* P* k. q' T# M  q——
  V& b6 R5 S/ I8 u0 r* p; }% D) i百度2011年实习招聘专题
* l* ?) c, [* ?http://www.aftjob.com/portal.php?mod=topic&topicid=22
, v- L$ I+ g4 q爱立信2011年实习招聘专题
( p* |) r4 I7 H) bhttp://www.aftjob.com/portal.php?mod=topic&topicid=23
6 N  y' a/ l" H# a+ k新浪微博2011年实习生招聘$ {2 c4 o% e. d9 G0 o6 H: u, O2 Y- D
http://www.aftjob.com/portal.php?mod=topic&topicid=21
: P6 I" b  J- C6 y阿凡提招聘http://job.aftjob.com/job
  s. D4 ^$ V, n1 T阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag5 Z& i  E+ d' C1 D6 r. X
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum, O# e5 S# G* V# j* A4 [
阿凡提职位搜索
9 |2 ?; B, R/ v( [" Q( ?1 K% F$ g——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-2-21 12:41

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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