找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1254|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题
; Y' X  p2 @, F$ F
$ M( i+ [3 q" ?) L+ q1 z% A- FZz/ x2 o2 `, J, H% D$ T
8 A' G/ t# O: w3 t* D  n0 C# w
(1)下面程序运行结果是什么:
: S% o4 j) N0 z" y; {9 b#include "stdio.h"+ ?+ s1 K; y, C% v5 ?0 e/ k4 c
class test
% ~+ V2 k5 C: \% L{
3 e( A- j, h8 h7 p  \public:) _3 h( f7 B& B0 `7 T
test(){}
* a. o  S+ T5 h; T  o8 cvoid hello(){ printf("hello\n");}/ [, w$ [0 J3 a
};# z! p4 G7 b8 W! a& P( o7 s8 y
void main()% s" v% B4 w5 a' L  P
{
5 W+ ]1 {, U" W( r    test* p=new test();6 |7 V6 x$ i. T, }5 q
    p=NULL;4 C+ b! b/ y+ V+ k! |
    p->hello();
4 W# ~/ |* d# ~( R# I}9 j- p/ ?) |! ?$ V9 N0 I0 Y( x
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:, D4 ]8 A' ?* d  u/ ]# t2 f: q5 K, T
#include "stdio.h"# P1 N! |( _% \1 F% E6 Y# g
class test; E1 r; k* q) a5 \) Q& ?" Y3 X
{
: k3 P6 |5 n% {private:$ ]; ~  [; H' W; u
int i;
& G; v& B( \9 t5 C1 |9 xpublic:$ G+ o" x2 U8 t! N; p$ x9 r+ F
test(){i=1;}2 L( @7 {; h* {0 _; S
void hello(){printf("%d\n",i);}
& {  f8 G  i, L/ f) g. @) O# L$ h};/ H# \* K8 n, h9 N$ q, k
void main()
5 V/ ^- V, E! ]5 n7 B- H2 f{* ~& i- j1 x" \7 J  _! N! x* R* R
    test* p=new test();" L2 U- m) A. s* u
p=NULL;8 X' O: @3 {6 G! h" v
p->hello();
7 o# z( O$ c. R$ Y}
! W/ ^8 ~  q! @. A4 A1 p) f如果将p=NULL注释掉就无误,就会输出1.
* \1 f- B; q$ _4 d' x注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
  {% b3 D) ]% U" u6 F0 Y. H! V(1)C++的构造以及析构顺序
3 r' `9 S, X9 E/ c#include <iostream>9 d0 W5 s0 t, y, s$ }6 Z
using namespace std;  u$ G' k* Q1 a' n
class A
! w, s1 r% z7 D{0 `3 [: h, M3 J8 S+ @
public:
" v4 C$ M6 o) O  m/ _- y! Z$ [A(){cout<<"A"<<endl;}) H, y8 ~  m9 C8 K7 v2 d
~A(){cout<<"~A"<<endl;}) s3 h2 ^1 X! W9 M+ m  S3 Z
};
+ H% B' f) n; l+ o) x  d$ H, T: Qclass B : public A1 @6 c9 O, ~5 F& o3 H3 Q' Q
{$ w: O; J( b. O& |! g# I; W" K
public:. a: I4 o+ r8 H3 `7 O& z
B(){cout<<"B"<<endl;}) `1 @0 l% E7 |* l% E2 ]: [
virtual ~B(){cout<<"~B"<<endl;}* s  H& S5 Z1 F& U: \! J( C% I
};" ]  P# m6 ~& `/ n, V  i
class C : public B
. u, h; W8 _6 l% [+ a/ C# Y{
3 z+ m) V1 Z* Zpublic:
  }9 R, n8 q3 p7 Z1 WC(){cout<<"C"<<endl;}7 r  P+ i( U7 Y" i% @2 L/ b0 d
~C(){cout<<"~C"<<endl;}; ^8 S% y7 ~: y6 T4 J
};2 G1 L9 Y) t) E

9 l. ?3 x* L( h" r# Fvoid main()& `6 A* b! i( ]4 |! X
{2 P& A) m7 n% g7 h+ B

* e! {' y8 y$ R' U& P( [& ?A *a=new A();
( w! N- D/ `- Z8 t/ e" A* OB *b=new B();7 K0 [* a7 D  F
  C *c=new C();( h6 V3 y, U3 H- Z
A *d=new B();
" @8 L3 x+ Y4 n) O; K% I% ~A *e=new C();1 A1 G) W" [3 `% y
B *f=new C();
. @* b  h' l" d) H: v9 i. E
1 I/ {' K% u7 ]# w# ydelete a; cout<<"---------------\n";$ p3 e7 l/ R- f: Z# G
delete b;   cout<<"---------------\n";
4 A6 v4 v6 |9 i0 hdelete c;   cout<<"---------------\n";
4 @4 _' g( z- F" f+ Idelete d;   cout<<"---------------\n";
4 `  {0 S9 ]+ J; k; I0 mdelete e;   cout<<"---------------\n";( @6 E3 ^( N& l9 I* y+ ^# q7 U, {
delete f;   cout<<"---------------\n";7 j9 ~* m7 v/ C& z3 f& W
}
7 `; l( t  k( m* ?7 O这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
  y( Z# s8 s( g& \0 C1 L6 J8 C1 d这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。  ?/ Q" G& u9 Q! e) g% l8 n
其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)( C" [1 G) v6 j5 M4 ]3 M; O- x  K4 n
(2)面试的诡异题目
0 b6 o3 x8 z- t: Q' J5 H大意就是如果你 test *p=new test[20];1 R( g1 f) v2 e7 R. @( G$ k9 X2 M
然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)/ `, e' X0 A1 V& T! l" x; H
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……8 K) H& K. v' N7 U, x0 |8 Y

7 L+ J0 w# J; F9 Y! SZz
7 [$ o2 s* e" x( T5 m爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
% E' D% g* `4 y: W* s8 J7 f上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
1 K9 }, g1 k- d4 H5 d5 {; z8 A爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html' A3 F' p, l- B* o
——
; g; a8 w/ S1 C0 W/ q0 m( K百度2011年实习招聘专题: N; e( E2 c# R. Q! u
http://www.aftjob.com/portal.php?mod=topic&topicid=22
5 O% k& K2 P& h; W, j: L7 s爱立信2011年实习招聘专题" t" P- @5 N  Q! I: A( R( V
http://www.aftjob.com/portal.php?mod=topic&topicid=230 o( U# V& i" j8 r/ M
新浪微博2011年实习生招聘* k/ b; n$ V% x9 ]
http://www.aftjob.com/portal.php?mod=topic&topicid=21/ ~4 S9 a; m" h2 r9 y2 i
阿凡提招聘http://job.aftjob.com/job$ n  \0 U) e- r. @$ |( f7 E
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag& h; k+ E- |' u# q6 z5 A
阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum# N9 m7 Q, r$ M5 b9 B. W
阿凡提职位搜索7 }, |/ E3 w  T( W6 M0 t/ o* i
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-6-26 23:15

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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