|
|
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—— |
|