找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1155|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题, k! z4 J8 ~# \( d# w- A# L7 D

% g4 a  Q; n8 F1 t* \# `Zz
) m- {/ R7 h4 J* e
( M0 k) I; q2 b& J; e(1)下面程序运行结果是什么:
6 b2 V( T; P2 U. D- v8 L9 m9 K' [#include "stdio.h"
3 t  ~% b: \' y6 Nclass test+ j* I# u/ r. {3 M' @& o$ _3 b$ \" M
{; Q. `" _' z0 ?+ g- s# v
public:+ M+ N- l% p- p# c1 ]3 H
test(){}3 I/ u/ z% ]( D
void hello(){ printf("hello\n");}( T  J5 b" H+ D8 g! H
};+ s' U7 n2 v3 r9 |
void main()) s2 @7 ^0 p5 x: D! l; _
{% ?/ v8 A, {8 d" j. e
    test* p=new test();
& y/ X1 ^5 o' a9 Q) \5 D2 _+ p    p=NULL;$ l. u- i4 v( n, Y, |
    p->hello();7 L' A; z( L) [- U
}' c6 v6 V, z9 T$ K; t
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:9 M0 W  f# D; ?* g0 Q9 U
#include "stdio.h"6 Y5 o7 W' ?* q: Y
class test- D9 J  n5 y3 F: E
{% @+ C& R# r- S  {( i
private:- M% b% {( c/ b( ]) G& N0 Y9 h+ Q
int i;
5 q3 `. {5 A8 {6 U& t& opublic:
+ M" ~7 k, F) Ctest(){i=1;}
5 ?4 K% X# \% p3 evoid hello(){printf("%d\n",i);}3 G9 ?# j0 Y/ u. r' l9 F4 a& u
};/ `/ J8 a: l; ?
void main()
4 R. }0 J0 K: C7 B9 e{' K, K, X/ E7 a6 E. D/ N
    test* p=new test();; O! Z" m0 {( v+ F4 z- b) s
p=NULL;0 _4 S4 R+ c& U- _# Z* v; }
p->hello();
6 U, R1 G4 s6 P: H5 T}8 B* E. \4 K' w/ }/ u* Y
如果将p=NULL注释掉就无误,就会输出1.
4 ]: I/ A1 x( w" j- Y/ z注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。
  q' E7 g0 Z8 A( o1 x(1)C++的构造以及析构顺序
: H8 w& I$ P' T. V( r4 w#include <iostream>
: {4 z& \6 i' [" U' ~+ n7 a0 H! ~using namespace std;
- p# L  j- f/ l0 D& f# i: f# bclass A$ T9 s* H$ _! {% J: x9 }
{
+ r& I# N  P3 lpublic:
" N/ [- B, O1 Z( r4 nA(){cout<<"A"<<endl;}3 Z3 G3 s) E9 R5 J- ?
~A(){cout<<"~A"<<endl;}
  n2 K& x, Q) d# j: l; j* [};
$ ?5 d# O) @4 B! ~# A" {  mclass B : public A
# R8 u7 T% M7 r2 s2 V. {{" E  ^/ g7 f6 B# F
public:
; C! t3 r0 z+ m. i) {B(){cout<<"B"<<endl;}; g; a' e9 A, I7 S5 \/ x
virtual ~B(){cout<<"~B"<<endl;}6 Z, `7 p6 p  \
};9 {8 N5 {) Q% k" I$ e* ]0 z
class C : public B% `5 n( f+ `7 b8 U+ t" M4 ^
{
* s! x( G1 Y5 }. G' apublic:
+ j5 b6 |  O. s; ^8 _& pC(){cout<<"C"<<endl;}
- h, A% e: m3 P  H~C(){cout<<"~C"<<endl;}
+ e" `! {+ q8 b5 |2 S  U+ u6 m/ s$ ?) Z2 o};8 d; h7 V; E) I1 ^- l

) e+ X: Z6 C. U  v  ^void main()
4 R5 A" {: S( F, F; @9 q{! G( h  v5 ~9 Z; Y
+ v% k4 n3 s+ p2 C
A *a=new A();* v8 r% U$ u/ z; E
B *b=new B();- a. c9 H: I( j3 _; k) p+ }2 b) ~
  C *c=new C();
+ @6 M8 K$ Z9 \A *d=new B();
2 p; t# L: M" L( S+ sA *e=new C();
, J% K$ X! s, \7 r% R$ tB *f=new C();
8 S- {/ C7 a+ R" D  B+ D# |
( f, ?8 s4 {! O* y4 C; B3 Rdelete a; cout<<"---------------\n";
  V" a; F; N( \( ?  Odelete b;   cout<<"---------------\n";, s9 C6 X  |( J/ e' I8 d% o# J
delete c;   cout<<"---------------\n";
+ x5 h5 ~7 t% ~delete d;   cout<<"---------------\n";
" Z% Q, k: O- R) G: I4 ndelete e;   cout<<"---------------\n";
( N8 T) O& y/ d. J  n& j" Y/ idelete f;   cout<<"---------------\n";
7 g9 w' N# R2 A! W, a- k* d) ?) s}2 X$ ]0 a  M. u
这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。2 F8 `4 a0 B8 j# W  z
这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
$ x( W9 a% ?# B5 h5 X其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
+ k( V. A( s6 t7 w- r3 ?/ d(2)面试的诡异题目+ @6 ~% r6 u7 }9 L8 t
大意就是如果你 test *p=new test[20];
# l) J  C) x' t然后释放的时候用delete p;会怎样?(明显这样做是不对滴……)7 b% e+ g4 e  I5 j
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……
0 I; V" }# W. V4 f  n# p( ^
0 n# X+ K, {0 [; q& V; _/ @Zz
! I6 l3 m8 o- r2 |  G1 K6 V# i爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html
/ u, t1 h4 I' K% p上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html6 p7 f3 ^1 H- n5 R
爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html
7 I* C# l- ^  K——
; K% P  k4 J, b  w$ V6 A9 D百度2011年实习招聘专题- `  y5 N) y6 {+ p1 W0 x
http://www.aftjob.com/portal.php?mod=topic&topicid=221 B1 l# I- I. B5 C7 s2 l" p
爱立信2011年实习招聘专题) ]/ c3 v- S  H. x
http://www.aftjob.com/portal.php?mod=topic&topicid=230 w" T, r* \2 i# S) [
新浪微博2011年实习生招聘+ `. o% q/ x$ |" \) y$ i
http://www.aftjob.com/portal.php?mod=topic&topicid=21
. J, e/ c  Y& O- t# V0 Y. Y阿凡提招聘http://job.aftjob.com/job) f+ a+ C8 D/ z' J$ m
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
* |) f8 `( z. u1 a" S1 U阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum5 b& f6 R1 I$ K7 l/ @* F7 c" h
阿凡提职位搜索3 H; V7 i+ ]) [* d* \9 |
——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-3-7 03:43

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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