找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1165|回复: 0

[面筋] 2009爱立信面试题

[复制链接]
发表于 2011-7-5 10:42 | 显示全部楼层 |阅读模式
2009爱立信面试题1 a  S1 e4 K0 L% b+ m
$ ?( n  ]) r! o
Zz1 V- t( q# c- o* a) S! ?
7 J, \+ W2 [+ Q7 \
(1)下面程序运行结果是什么:
& e$ g  O/ ?- N0 J+ s! p#include "stdio.h"
: \9 U; Q( s- e$ V/ s; Kclass test6 l5 ], T* W; ~
{' O6 \$ q# k7 h) s3 J
public:
! x/ X. o& P6 _test(){}: Q4 A% F  m: c: B" W- V- n! i
void hello(){ printf("hello\n");}) [" G' M) g6 D; \  q# M
};. f, m% }" |/ ]' r
void main()
8 ~' A: N$ @/ \1 I' z3 b{
! {( V+ }+ Z, O4 T    test* p=new test();- y( @  D# \" f( \/ j! w
    p=NULL;% |! n3 t8 P* n% p( t) K
    p->hello();- L  @% Z' M5 ~; H* M) I
}% M6 g5 _! V8 o' [& t
事实是输出了hello,虽然在调用p->hello();之前已经给p赋值为NULL了(即0值),但是p依然可以调用test类的函数。我对此的解释是只要是test类的成员函数和成员变量放在不同的存储区(事实上也是如此),只要是test类型的指针就能调用test的成员函数,前提是函数里没有涉及到成员变量。比如下面的代码编译无误但运行会报错:
1 e" V$ ?3 Q7 P4 [. f) @% h#include "stdio.h"9 y3 W3 j" G, K# ^+ B, K0 k) y; r
class test; h( `  \: V4 c! V/ w8 M* F
{* f' d+ k% I: z. E, n
private:
/ g! j( ]! I- A( l" Z; L% H2 [int i;! J+ [8 e  N' j2 n) Q" J6 S' q- ^3 |: K
public:
, p% }  U: _# H7 Q/ gtest(){i=1;}
& D6 Y, r8 ^  |$ x( D/ e, }  ovoid hello(){printf("%d\n",i);}9 |5 f# P/ ~5 s) g6 Y! z
};+ k- A  m& T7 f* A
void main()( I- ~1 z" v8 \* i  a3 M
{5 ^7 N# Q1 ^5 Q" W' t: E8 y2 m9 k2 k
    test* p=new test();* z; [% G! ^- I8 }7 J
p=NULL;* b; m# G3 d1 n8 v
p->hello();2 l+ G" {' w( ^2 P
}
" o& S/ L) _+ N3 {1 j如果将p=NULL注释掉就无误,就会输出1.
: U  }  V+ V" T, a注意:另外上面两个例子中如果把p=NULL换成delete p;也会有相似地效果,第一个依然输出hello,第二个输出个随机值(不报错)。大家不妨调试看看。  r" ]0 t3 A4 f  k  ~
(1)C++的构造以及析构顺序% D  r8 B" ?! E5 g, j5 k' R6 S4 V8 D
#include <iostream>$ m; _! z- q0 N, S) Y1 J
using namespace std;
) ]" w, T4 Q1 x+ b& bclass A$ T  E  `. U, V; ^+ {
{" I, E7 Q0 v# F) [; P. N+ v4 I
public:, j0 }% I, m  G) ]5 x8 \
A(){cout<<"A"<<endl;}
1 |! Q2 @: F, H+ R) Q( ~7 M% S& r~A(){cout<<"~A"<<endl;}! S0 }0 Z: K! U9 e! ?
};
* W6 N% r2 I8 D! p! S( ~9 nclass B : public A
! x! a* D3 r/ L) N{
" F5 t2 c3 ?6 vpublic:
0 s3 E( g6 g1 \% w& F) |1 m' x) nB(){cout<<"B"<<endl;}1 H/ E; Y) O7 b/ J' T
virtual ~B(){cout<<"~B"<<endl;}- A' |; B9 T" _6 G
};2 w1 ~9 I, d* E$ P4 B" l
class C : public B! m4 c& Y( [0 T2 G% E$ s
{8 f0 J5 M' c+ j2 Y$ n' h
public:$ p6 S' x" ^- D, O, n# B9 _, _
C(){cout<<"C"<<endl;}. @- Y8 p7 D8 s
~C(){cout<<"~C"<<endl;}
6 k  T5 h. b) w0 y};
7 y5 @7 Z9 C$ i! e1 ~+ p
7 s8 ?/ c) F0 _, c* T' Evoid main(), q  L! P; u: P4 W
{5 V: c) g1 H2 H4 B7 _8 G
2 H  |" y" w5 P% e
A *a=new A();* R& f& P1 H+ J+ S2 ^  H9 N6 D
B *b=new B();7 {' D1 ^0 G2 b
  C *c=new C();
6 s% v  c' J' e! ~4 ^A *d=new B();; u9 _3 _% P/ L5 Z
A *e=new C();
' V) a' ^% Q/ [6 WB *f=new C();$ E+ ?" S$ A2 G( m7 _/ \

7 L# F* y! J( u! H0 b1 J) @delete a; cout<<"---------------\n";& V0 J" ~" h! g. ~# h1 U) l  ^8 L: t
delete b;   cout<<"---------------\n";
/ u$ G6 f; C$ m0 G6 {& J8 V& edelete c;   cout<<"---------------\n";' R% o3 Q) J/ |( X9 o5 W) i
delete d;   cout<<"---------------\n";
- s2 p$ ^' T# L, sdelete e;   cout<<"---------------\n";
* I: N1 ~1 O6 G: I: T2 f* Fdelete f;   cout<<"---------------\n";
% ^& r8 C' y# t}
3 w" \. d! q. \$ C# p/ W这个代码在Dev C++下顺利通过,在VC6下有点问题,大家自己看结果。
& x1 k5 n& v0 Y3 x, H# v2 \这里要注意几点的是:首先,A*类型的指针不能赋给B*类型指针(强制转换也不行),不过有两个例外,一个是void*指针,另一个是当A和B有继承关系时。
3 d+ g8 w' o2 Y9 R; j0 {其次只能将子类类型指针赋值给父类(上转型),而不能将父类对象地址赋给子类指针,因为子类默认包含了父类的所有成员(当然有些被隐藏,呵呵)
7 y5 V/ }, L# W- u% ]# m9 F6 _(2)面试的诡异题目, }+ [7 G; Z# j0 x# [' d
大意就是如果你 test *p=new test[20];
: t0 [* ~2 d& n4 V4 ]* r然后释放的时候用delete p;会怎样?(明显这样做是不对滴……). y. q6 g% T6 A
答复是会调用p[0]的析构函数,然后p[1]到p[19]没人管。另外还问是否造成内存泄露……1 |! P1 [) @% w# o! B& p

, x1 }0 t; q% }6 {8 TZz2 ^+ ^, l+ L) X* V- `0 T
爱立信(Ericsson)求职俱乐部:http://bbs.aftjob.com/group-298-1.html; v! b2 U/ u3 f4 s% v
上海爱立信面经(实习) :http://bbs.aftjob.com/thread-289784-1-1.html
: q9 I! w$ ~% Z/ l爱立信(Ericsson)笔经面经汇总:http://bbs.aftjob.com/thread-416668-1-1.html8 ^. o. J" e7 R+ r; K$ W; Y
——
7 E5 [7 f) ]0 s. ^4 \$ t0 I百度2011年实习招聘专题% c. n7 S' r- `7 Q7 `7 h4 z! _
http://www.aftjob.com/portal.php?mod=topic&topicid=22
$ R/ f$ E* \; S爱立信2011年实习招聘专题
% f! W* M$ i8 ^http://www.aftjob.com/portal.php?mod=topic&topicid=23
; \% Q+ B6 _+ ^% o( T, W  w4 C4 \新浪微博2011年实习生招聘: q) a5 V8 ]1 l% A
http://www.aftjob.com/portal.php?mod=topic&topicid=21: M. q' d& M8 [! c
阿凡提招聘http://job.aftjob.com/job) }  [7 Q5 l2 A, _' |$ K1 S: C
阿凡提热门关键字http://bbs.aftjob.com/misc.php?mod=tag
7 l, _, `2 T3 Y( N  E0 ]阿凡提内容搜索http://www.aftjob.com/search.php?mod=forum/ g4 J# O( H$ U3 ~' u/ C0 W6 O
阿凡提职位搜索
4 N& j- R; S5 W——
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-4-2 16:27

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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